/
Автор: Шуп Т.Е.
Теги: теория вероятностей и математическая статистика математика физика линейная алгебра численные методы вычислительная техника микро эвм
ISBN: 5-06-001014-7
Год: 1990
Текст
Т.Е. Шуи
ПРИКЛАДНЫЕ
ЧИСЛЕННЫЕ
МЕТОДЫ
В ФИЗИКЕ
И ТЕХНИКЕ
Перевод с английского С Ю. Славянова
Под редакцией СП. Меркурьева
МОСКВА
«Высшая школа » 1990
ББК 22.193
Ш 59
УДК 519.2
Шуп Т.
Прикладные численные методы в физике и технике:
Ш 96 Пер. с англ. С. Ю. Славянова / Под ред.
С.П.Меркурьева. - М.: Высш. шк., 1990.-255 с: ил.
Перевод, изд.: Shoup Т. Е. Applied numerical methods for
microcomputers. Prentice-Hall, 1984.
ISBN 5-06-001014-7
В книге изложены основные численные методы анализа и линейной
алгебры. Даны блок-схемы алгоритмов и соответствующие программы для
микроЭВМ, написанные на языке бейсик. Приведен набор задач как чисто
вычислительных, так и с физическим содержанием для самостоятельного
решения, дан краткий терминологический словарь по вычислительной
технике.
1602120000-475
Ш 92-90 ББК 22.193
001(01)-90 518
ISBN 5-06-001014-7 © Prentice-Hall, 1984
© С. Ю. Славянов, перевод на русский язык, 1990
ПРЕДИСЛОВИЕ
В 1982 г. издательство «Мир» выпустило перевод книги
Т. Шупа «Решение инженерных задач на ЭВМ». Эта книга
приобрела популярность среди научных работников и
инженеров как практическое пособие для решения вычислительных
задач физического и технического содержания. Эффективному
использованию книги, однако, мешало то, что предложенные в
ней алгоритмы реализовывались лишь путем ссылок на
стандартные пакеты прикладных программ, имеющиеся в
вычислительных центрах США.
В дальнейшем автор книги переработал ее по трем
направлениям и издал ее вторично под новым заглавием
"Численные методы для микроЭВМ". Во-первых, в нее были
добавлены ориентированные на микроЭВМ программы. При этом в
качестве языка программирования Т. Шуп выбрал бейсик. С
учетом появления персональных ЭВМ с встроенными
трансляторами с бейсика этот подход является, на наш взгляд, одним
из наиболее оптимальных.
Во-вторых, был произведен более жесткий отбор материала,
так, чтобы содержание книги стало доступным студентам
технических вузов и младших курсов естественных факультетов
университетов.
Наконец, в-третьих, в книге помимо математической части
появились "компьютерные" разделы, знакомящие читателя с
основными характеристиками и терминологией
вычислительной техники.
Все это сделало новый вариант книги Т. Шупа очень
подходящим для ее использования в качестве учебного пособия
по курсам "Вычислительная техника", "Программирование",
"Численные методы", которые в разных комбинациях вошли
ныне в учебные планы технических вузов и университетов, и
вызвало появление нового перевода.
Нельзя, * конечно, сказать, что содержание книги всюду
ровное по своему уровню или что можно полностью во всех
случаях согласиться с научной аргументацией автора. Однако
недочеты с лихвой компенсируются главным с нашей точки
зрения. А именно, изучив эту книгу, можно научиться самому
выполнять инженерные и научные расчеты на ЭВМ, в то
время как большинство учебных пособий на эту тему,
используемых в СССР, лишь сообщают теоретические сведения об
особенностях этих вычислений.
При переводе книги, согласно предоставленным нам
автором и издательством "Прентис-Холл" правам, были сделаны
следующие изменения по отношению к исходному тексту.
Ориентируясь на использование книги в учебных целях,
мы исключили все литературные ссылки на англоязычные
публикации и подготовили список литературы, содержащий
книги на русском языке, наиболее близкие по тематике к
данной.
С целью сделать книгу более автономной для понимания
и использования был добавлен небольшой раздел, содержащий
начальные сведения по программированию на бейсике. Этот
раздел ни в коей мере не претендуеет на полноту или
высокую научность, а имеет ту же практическую нацеленность, что
и вся книга. В качестве версии бейсика был выбран бейсик в
ОС ДВК. Соответственно все программы были
модифицированы и заново протестированы так, чтобы их можно было
запускать на широко распространенных в СССР микроЭВМ ДВК-1
и ДВК-2. В подготовке и тестировании программ приняли
участие И. В. Андронов, Ю. В. Мельников, И. В. Николаев,
Т. Е. Протопопова, В. И. Смирнов. Всем им выражаем
искреннюю благодарность.
В ряде случаев, когда текст допускал слишком вольную
математическую трактовку либо когда приводились сведения,
специфические для условий США, пришлось пойти на его
небольшие сокращения.
При подготовке перевода даной книги частично был
использован перевод, сделанный для издательства "Мир"
В. А. Хохряковым под редакцией В. Б. Миносцева.
Мы будем благодарны читателям за замечания и
высказывания по поводу данной книги. Пишите по адресу: Ленинград,
198904, Ульяновская, 1, НИИФ, ЛГУ, кафедра вычислительной
физики. Возможно, мы сможем оказать помощь в
предоставлении программ, приведенных в книге.
СМ. Меркурьев
СЮ. Славянов
Мы живем в эпоху беспрецедентного научно-технического
прогресса. Осмысливая развитие технологии за несколько
последних десятилетий и его влияние на нашу современную жизнь
и деятельность, можно отметить две важные тенденции.
Первая из них заключается в том, что с течением времени
значительные успехи достигаются все чаще. Вторая тенденция - все
более быстрое внедрение этих достижений в повседневную
жизнь. Так, телефон, изобретенный Александром Грэхемом
Беллом в 1876 г., завоевывал потребителя достаточно
медленно-лишь к 1954 г. обладателями телефонов стали
большинство домовладельцев в США. Однако другое столь же
значительное изобретение - первый современный бытовой телевизор,
появившийся в 1939 г., - получило широкое распространение
менее чем за 10 лет. Уже в 1974 г., по данным Американского
бюро переписи населения, 97% домовладельцев США имели
по меньшей мере один телевизор, а 45%-два и более.
Причина такого контраста вполне очевидна. Первые успехи
в области связи и систем доставки создали ситуацию,
стимулирующую ускорение распространения последующих
изобретений. Таким образом, распространение новых технологий дало
синергетический эффект форсированного внедрения
дальнейших новшеств.
Это явление стало еще более ощутимым в современную
эпоху. Быть может, лучшим примером этому служит
микрокомпьютерная революция. Первый микропроцессор был создан
в 1971 г., а первый микрокомпьютер появился в 1975 г.
Прошло меньше десяти лет, и уже более полумиллиона
микрокомпьютеров использовалось в самых различных областях - от
развлечений до бизнеса и научных исследований. Согласно
прогнозам, к концу десятилетия почти каждая американская
7
семья будет обладать микрокомпьютером. Возможно,
микрокомпьютер окажет такое же влияние на наш будущий стиль
жизни, какое в прошлом оказали телефон или телевизор.
Современные писатели предсказывают микрокомпьютеру
значительную роль в социальной революции, которая последует за
революцией промышленной.
Новые области применения микрокомпьютеров продолжают
возникать по мере расширения вычислительных возможностей
этих устройств. Задачи, которые раньше решались на больших
компьютерах, сейчас могут быть решены с помощью
микрокомпьютеров, причем это не только физически возможно, но
и экономически выгодно. Одной из такого рода областей
применения микрокомпьютеров являются численные задачи,
решаемые в науке и технике. Эта книга задумана как
справочник по численным методам для тех, кто собирается
использовать микрокомпьютер для решения научных или инженерных
задач. Основное внимание будет сфокусировано на трех
важных задачах.
1. Определить те характеристики современных и будущих
микрокомпьютерных систем, которые позволяют понять
целесообразность или нецелесообразность использования этих
систем в той или иной ситуации.
2. Выделить численные задачи, часто возникающие при
решении научных и технических задач.
3. Дать практические алгоритмы вычислений, позволяющие
эффективно объединить требуемый численный метод с
возможностями микрокомпьютера.
1.1 ЦИФРОВЫЕ КОМПЬЮТЕРЫ
Первым электронным цифровым компьютером был ENIAC,
построенный в университете Пенсильвании в 1943 -1949 гг.
Первые компьютеры такого типа были довольно громоздкими,
занимая помещение размером с маленький дом. Однако,
несмотря на размеры, их вычислительные возможности, с
современной точки зрения, были довольно примитивными.
Компьютер ENIAC имел более 18 000 вакуумных ламп, возможные
поломки которых сильно снижали надежность этого
устройства. Поиск и замена неисправных ламп занимали долгие часы.
К тому же лампы сильно нагревались и потребляли большое
количество электроэнергии. Но несмотря на все эти
недостатки, ENIAC достаточно хорошо продемонстрировал пользу
цифровых компьютеров и стал стимулом для дальнейшего
развития этих устройств.
В 1948 г. был изобретен транзистор, а с 1959 г.
транзисторы начали использовать в цифровых компьютерах, что
позволило значительно уменьшить их физические размеры, потреб-
8
ление энергии и стоимость с одновременным ростом
надежности и вычислительных возможностей. Следующий скачок в
размерах и возможностях компьютеров пришелся на начало
1960-х годов, когда несколько компаний, производящих
транзисторы, нашли способ создавать целые электронные схемы на
кремниевых пластинах. Интегральные схемы явились базой
для нового поколения компьютеров, чьи возможности сильно
отличались от возможностей больших многоцелевых
компьютеров предыдущего поколения. Впервые появилась
возможность создавать достаточно маленькие и дешевые компьютеры,
предназначенные для решения специфических
вычислительных задач и задач обработки информации. Эти маленькие
целевые компьютеры были названы мини-компьютерами за их
размеры, которые, грубо говоря, совпадали с размерами
маленькой картотеки. Первый мини-компьютер PDP-8 был создан
в 1965 г. фирмой DEC. В тот же период времени
интегральные схемы внесли важный вклад в развитие другой области
электронной вычислительной техники - электронных
калькуляторов. В конце 1960-х годов возможности этих устройств
резко возросли, а цена уменьшилась больше чем на порядок.
Причиной этого экономического парадокса в основном явилась
улучшенная технология производства. Неудивительно, что
следующий прорыв в области вычислительной техники
произошел на стыке калькуляторов и цифровых компьютеров. Как и
многие изобретения революционного характера, это новшество
началось с попыток решить проблему в одной области, а
привело к прорыву в другой области.
В 1971 г. специалисты фирмы "Интел Корпорейшн"
пытались сконструировать такую интегральную схему, которая
представляла бы собой целый калькулятор. Результатом их
деятельности явилось гораздо более многоцелевое устройство,
которое мы теперь называем микропроцессором. Технология,
обеспечивающая этот важный успех, позволяет расположить
тысячи транзисторов на одной пластине и называется СБИС-
технологией. Микропроцессор представляет собой полностью
готовый центральный процессор компьютера на
кремниевой пластине размерами меньше 1 см2. Микропроцессоры
применяют в различных конкретных случаях, включая
временной контроль и регулирование производственных
процессов, регулировку светофоров, управление транспортом и т.д.
Одна из самых интересных возможностей применения может
быть реализована путем соединения микропроцессора с
некоторым запоминающим устройством и устройствами ввода и
вывода. Такую комбинацию называют микрокомпьютером.
Отметим, что, несмотря на малые размеры и низкую стоимость
микрокомпьютеров, они по своим возможностям превосходят
большие и дорогие компьютеры эпохи вакуумных ламп и
транзисторов. Классификационные границы, разделяющие
большие компьютеры, мини-компьютеры и микрокомпьютеры,
четко не определены, поскольку на развитие этих устройств
влияют постоянно происходящие технологические изменения.
Используемые сейчас компьютеры можно, например,
классифицировать по размерам, быстродействию, стоимости и общим
возможностям. В таол. 1.1 приведены сравнительные
характеристики типичного оборудования, применяемого в этой быстро
развивающейся области. Влияние этих характеристик на
решение научных и технических задач обсуждается в следующих
разделах.
Таблица 1.1. Сравнительные характеристики различных типов
компьютеров
Характеристика Большие и средние Мини-компыоте- Микрокомпьюте-
компьютеры ры ры
Качественные
характеристики:
физические размеры
Размеры комнаты Размеры пись-Размеры пишу-
менного стола щей машинки
длина слова 32-64 двоичных знака 16 - 32 двоичных8 - 16 двоичных
знака знаков
максимальный объем 12 000 килобайт 4000 килобайт 128 килобайт
памяти
Быстродействие:
процессорный цикл <70 не ~100 не >200 не
цикл обращения к па-< 250 не 300 не >400 не
мяти
Стоимость 2-4 млн. долларов 20-40 тыс. дол-2-4 тыс. долла-
ларов ров
Возможности:
операционная система Многопрограммная Многопрограм- Одна задача
(большое число) мная
(небольшое число)
используемые языки Большинство обще-Несколько Небольшое число
употребительных
языков
требуемые для рабо- Специальное помеще-Ограниченная не-Работабт сам
ты условия ние и квалифицирован-обходимость в пользователь
ный оператор
специалисте-операторе
возможности исполь- Самые широкие Хорошие В настоящее вре-
зования мя ограниченные
Размеры
На первый взгляд, физические размеры компьютера могут
служить мерой его суммарных вычислительных возможностей;
10
однако ныне из-за быстрых изменений в компьютерной
технологии это не так. По той же причине классификация
компьютеров на большие, средние и малые затруднена. Размеры
некоторых мини-компьютеров больше, чем у самых маленьких
представителей класса больших компьютеров. Точно так же
микрокомпьютер вместе с сопутствующим оборудованием
может быть больше некоторых мини-компьютеров. Длина слова,
используемого данным компьютером, показывает, сколько
значащих цифр можно получить в данных вычислениях.
Типичный 8-битовый микрокомпьютер может обеспечить точность
вычислений до девяти значащих цифр. Вообще, чем больше
двоичных знаков используется в компьютерном слове, тем
более высокая точность достижима. Режим двойной точности,
часто используемый в больших компьютерах для повышения
точности вычислений, достигается за счет увеличения
необходимого объема памяти и потому редко имеется у
микрокомпьютеров. Сравнения на основе объема оперативной памяти
могут оказаться правильными. На этот объем следует смотреть с
учетом длины слова и доли максимального объема памяти,
реально доступной пользователю. По мере уменьшения
времени обращения к периферийной памяти ограничения,
определяемые объемом активной памяти (64 килобайта), становятся
менее жесткими. Вообще говоря, лишь немногие технические
или научные расчеты требуют использования полного объма
памяти большого компьютера. Для задач именно такого типа
и необходимо использовать большие компьютеры; именно в
этих ситуациях их использование наиболее эффективно.
Микрокомпьютеры скорее приспособлены для расчетов,
подразумевающих более скромные объем памяти и точность
вычислений.
Быстродействие
Несмотря на свои маленькие размеры, микрокомпьютер
обладает удивительно большой скоростью работы. Если
сравнивать времена процессорных циклов, то быстродействие
микрокомпьютера всего в десять раз меньше, чем большого
компьютера. Поскольку значительная часть научных и технических
задач при использовании большого компьютера требуют лишь
6 с процессорного времени, естественно ожидать, что решение
задач такого уровня сложности с помощью микрокомпьютера
потребует не больше 1 мин. Это эмпирическое правило,
разумеется, следует применять с учетом того, что для
большинства технических и научных задач время, необходимое для
операций ввода/вывода, больше, чем непосредственно
процессорное время. Тем самым основное ограничение на
быстродействие накладывается не процессором, а внешними устройствами.
11
Поскольку обычно компьютер связан с экраном дисплея или
малоскоростным принтером, разумно было бы ограничить
использование микрокомпьютеров решением задач, требующих
относительно небольшого суммарного процессорного времени
и времени вывода информации.
Стоимость
Высокая окупаемость является, возможно, одним из самых
сильных аргументов в пользу использования
микрокомпьютеров для решения научных и технических задач. В
зависимости от объема памяти средняя стоимость микрокомпьютера
равна приблизительно 5 центам за байт, а для большого
компьютера - приблизительно 40 центам за байт. Это
восьмикратное преимущество обусловлено тем, что микрокомпьютер не
может решать несколько задач одновременно. Аналогичное
сравнение стоимости в зависимости от быстродействия дает
еще более впечатляющий результат. Если рассматривать
процессорное время, то быстродействие большого компьютера на
порядок выше, чем микрокомпьютера; в то же время
стоимость его выше на три порядка. К тому же, поскольку
микрокомпьютер не требует ни специально подготовленных
операторов, ни специального оборудования, общая стоимость его
работы в сравнении с большим компьютером может оказаться
еще ниже. В производстве микрокомпьютеров используют
относительно новые технологии, поэтому весьма вероятно, что
стоимость их в будущем будет продолжать снижаться. Это
дополняет список существенных экономических стимулов
использования микрокомпьютеров для решения вычислительных
задач.
Возможности применения
Основное различие между большими и малыми
компьютерами определяется количеством пользователей, которые могут
одновременно взаимодействовать с машиной. Режим
разделения времени большого компьютера позволяет использовать его
вычислительные ресурсы сотням пользователей одновременно.
С другой стороны, операционная система микрокомпьютера
рассчитана на работу одного пользователя в данное время. По
этой причине микрокомпьютеры часто называют
персональными компьютерами. Что касается языков программирования,
большинство больших компьютеров допускает использование
широкого круга общеупотребительных языков высокого уровня.
Микрокомпьютеры, с другой стороны, часто приспособлены
для работы лишь на одном языке высокого уровня. В
большинстве случаев таким языком является бейсик. Хотя обычно
12
микрокомпьютеры допускают программирование на различных
машинных языках, этот процесс различен для разных машин,
что создает определенные трудности для переносимости
программ. В настоящее время при решении большинства
научных и технических задач чаще всего пользуются языком
фортран. Растущая популярность микрокомпьютеров
стимулировала создание специальной версии этого языка. Несмотря на это,
сохраняется серьезная необходимость создания программ для
численных расчетов на языке бейсик. За последнее
десятилетие на языке фортран был создан ряд очень хороших
пакетов прикладных программ, пригодных для использования на
различных больших компьютерах. Для микрокомпьютеров
пока нет столь больших пакетов прикладных программ, однако
можно надеяться, что в ближайшем будущем такие пакеты
будут создаваться с возрастающей интенсивностью.
Рассматривая пригодность малых компьютеров для
решения научных и технических численных задач, следует
учитывать следующие четыре характеристики:
Быстродействие. Поскольку малые компьютеры работают на
порядок медленнее больших, их применение следует
ограничить задачами, которые могут быть решены с их помощью за
разумный промежуток времени.
Объем памяти. Поскольку объем памяти и длина слова у
малых компьютеров ограничены, их следует использовать при
решении лишь тех задач, которые не требуют большого
объема памяти.
Точность. Поскольку большинство малых компьютеров
используют слово длиной 16 бит, вычисления, требующие более
высокой точности, следует проводить на больших
компьютерах.
Количество операций ввода / вывода. Поскольку операции
ввода/вывода на малых компьютерах осуществляются
относительно медленно, их следует использовать для решения задач,
требующих сравнительно небольшого количества операций ввода
и вывода информации.
1.2 АРХИТЕКТУРА МИКРОКОМПЬЮТЕРА
Хотя подробное описание работы микрокомпьютера и не
входит в круг задач этой книги, читателю полезно представлять
себе основные принципы этой работы, В этих целях и
приводится следующий ниже материал. Читатель, желающий глубже
13
познакомиться с этими вопросами, может обратиться к
литературе, приведенной в конце этой главы.
На рис. 1.1 показана схема центрального процессора (ЦП)
микрокомпьютера. Роль каждого элемента, указанного на этой
схеме, обсуждается ниже.
Микропроцессор
■~I
ЦП-упрадлен.
и командный
код
Внутренняя шина
Управление
адресной
шины
ААУ
Упра бление
шины
данных
Адресная шина
Управляющая
шина
Постоянная
память
Шина данных
Оперативная
память
Устройст$о
ббода/быбода
Рис. 1.1
Часы
Часы (таймер) представляют собой импульсный генератор,
предназначенный для выработки последовательностей
импульсов. Поскольку точное задание временных промежутков
чрезвычайно важно для работы микрокомпьютера, часы играют
14
жизненно важную роль. Вырабатываемые импульсы
используют также для координации работы всех элементов
микрокомпьютера. Быстродействие часов определяет общее
быстродействие всего микрокомпьютера с точностью до ограничений,
накладываемых элементами системы.
Арифметико-логическое устройство
Арифметико-логическое устройство (АЛУ) - это устройство
микропроцессора, осуществляющее арифметические и
логические операции. Для выполнения этих задач АЛУ использует
большое количество различных логических элементов.
Устройство управления
Это устройство является центром управления всего
микропроцессора. Его задачами являются получение команд из
памяти компьютера, их интерпретация, контроль за их
исполнением и посылка результатов в соответствующие устройства.
Устройство управления имеет собственную небольшую память,
содержащую набор команд, используемых микропроцессором.
Устройство управления, кроме того, хранит адрес той ячейки
главной памяти, откуда будет получена следующая команда, а
также устанавливает коды, определяющие текущую работу ЦП.
Для выполнения команды необходимо несколько импульсов,
генерируемых часами. Это обусловлено тем, что команда
должна быть извлечена из памяти, декодирована и, наконец,
исполнена. Операции извлечения, декодирования и исполнения
требуют одного или нескольких импульсов каждая, их
называют машинным циклом, а последовательность операций -
командным циклом.
Шины
В микропроцессоре информационные магистрали между
различными функциональными элементами называют шинами.
Внутренние шины используют для передачи информации
между внутренними элементами, такими, как устройство
управления и АЛУ. Шина данных обеспечивает передачу
информации, осуществляющую связь микропроцессора с внешними
устройствами. Адресная шина является односторонней линией
передачи информации из микропроцессора во внешние
устройства, такие, как память или устройство ввода/вывода.
Большинство производителей компьютеров выпускают свои
модификации шин. Поэтому на заре эпохи малых
компьютеров элементы различных микрокомпьютерных систем не
допускали состыковки.
15
Запоминающие устройства
Основная часть информации в микрокомпьютере хранится
в памяти. Запоминающие устройства делятся на подструктуры,
называемые ячейками памяти, в каждой из которых может
хранится одно компьютерное "слово", состоящее из
последовательности двоичных цифр. Каждая ячейка однозначно
идентифицируется с помощью ее адреса. В большинстве
микропроцессоров слово содержит восемь или шестнадцать двоичных
знаков, а 8-битовое слово часто называют байтом. В обычных
цифровых компьютерах используют два типа памяти. Первый
тип применяют, когда содержание памяти нужно иметь
постоянным, его называют постоянной памятью. Обычное
использование постоянной памяти связано с хранением общеупотреб-
ляемых команд, таких, как система языка бейсик. Существуют
такие специальные разновидности постоянной памяти, как
программируемая постоянная память, которая может быть
запрограммирована только один раз, после чего становится
постоянной, а также стираемая перепрограммируемая постоянная
память, которая может быть перепрограммирована снова и
снова после стирания предыдущей информации с помощью
ультрафиолетового излучения.
Другой тип памяти используют, когда хранящуюся
информацию необходимо часто менять. Этот тип памяти называют
оперативной памятью. Из такой памяти можно как считывать
информацию, так и записывать ее туда. Оперативная память
может быть энергозависимой (когда ее содержимое пропадает
при выключении компьютера) или энергонезависимой (в
противном случае).
Устройства ввода/вывода и интерфейсы
В силу своей универсальности микропроцессор может быть
соединен с разнообразными внешними устройствами. Обычно
таковыми являются дисплей, панель управления, АЦПУ,
дисковод, принтер. Интерфейс является буферным устройством,
обеспечивающим передачу информации с соответствующей
скоростью и в определенной форме. Интерфейс должен
обеспечить правильное взаимодействие микропроцессора и
внешнего устройства. Это необходимо, поскольку человек и
компьютер работают с разной скоростью. Другая важная роль
интерфейса заключается в обеспечении возможности взаимодействия
компьютера с другими компьютерами в целях создания
коллективной сети. Чтобы понять работу интерфейса, следует
вспомнить, что информация в малых компьютерах хранится в
виде слов длиной от 8 до 16 бит. Чтобы передать все слово
одновременно, необходимо использовать 8 или 16 линий пере-
16
дачи. Соответствующие интерфейсы называют параллельными.
Очевидно, что они дают выигрыш в скорости; однако при
передаче информации на большие расстояния они становятся
чересчур громоздкими и дорогими. Этот недостаток заставляет
в некоторых ситуациях использовать последовательные
интерфейсы, которые обеспечивают одновременную передачу лишь
одного бита информации. Общий характер связей между
разными типами компьютеров и внешних устройств
стимулировал выработку специальных стандартов для интерфейсов.
1.3 МИКРОКОМПЬЮТЕР КАК ИНСТРУМЕНТ
ДЛЯ РЕШЕНИЯ ЧИСЛЕННЫХ ЗАДАЧ
Девять категорий численных задач, перечисленных в табл. 1.2,
являются наиболее частыми при анализе различных научных
и технических проблем. Эти задачи расклассифицированы со-
Таблица 1.2. Численные задачи и их пригодность
для решения с помощью микрокомпьютера
Численная задача Требуемое
машинное
время
Требуемый Требуемая Требуемое Пригодность
объем па-точность количество для решения на
мяти вычислений операций микрокомпью-
ввода/выво- тере
да
Отыскание корней Малое
алгебраических и
трансцендентных
уравнений
Решение систем Малое
алгебраических
уравнений
Решение задач на Среднее
собственные
значения
Подбор формул по Малое
кривым
Интерполяция и Малое
аппроксимация
Численное интегри-Малое
рование и
дифференцирование
Обыкновенные Малое
дифференциальные
уравнения
Диффренциальные Среднее
уравнения в
частных производных
Оптимизация Большое
Малый Средняя Малое
Хорошая
Средний Средняя Малое
Удовлетворительная
Средний Средняя Среднее
Удовлетворительная
Малый Малая Малое Хорошая
Малый Малая Малое Хорошая
Малый Малая Малое Хорошая
Малый Малая Среднее Хорошая
Большой Средняя Большое Плохая
Малый Средняя Малое Щюхая
17
гласно рекомендациям, приведенным в разделе 1.2. Из
таблицы видно, что малые компьютеры пригодны для решения
задач семи из этих девяти категорий. Эти семь типов
численных задач и составляют предмет обсуждения последующих
глав. Соответствующие программы написаны на языке бейсик,
так как именно он является универсальным языком
программирования для малых компьютеров.
Глава
Корни
алгебраических
и трансцендентных
уравнений
В научных исследованиях и инженерном проектировании
часто приходиться решать алгебраические уравнения. Задачи
этого типа, решаемые на малом компьютере, могут возникать
сами по себе или же составлять часть более сложных
исследований. В любом случае скорость и эффективность, с которой
получают решение, сильно влияют на применимость
соответствующего вычислительного процесса. Выбор подходящего
алгоритма для решения алгебраической системы зависит от класса
рассматриваемой задачи. Алгебраические задачи могут быть
классифицированы, во-первых, по числу решаемых уравнений,
а затем по типу и количеству ожидаемых ответов. На рис. 2.1
дана схема классификации алгебраических задач. В случае
одного уравнения задачу называют линейной, алгебраической или
трансцендентной, причем первая имеет одно решение,
вторая - п решений, а в третьей число решений заранее не
известно. В случае нескольких уравнений задачу называют
линейной или нелинейной в зависимости от математической
природы входящих уравнений.
Решение линейного уравнения с одним неизвестным -
достаточно простая процедура, и в этой главе она не
обсуждается. Цель главы - обсудить различные методы решения первых
типов задач, т.е. отыскания корней трансцендентных и
алгебраических уравнений. Решение систем нескольких уравнений
рассмотрено в гл. 3.
2.1 КОРНИ НЕЛИНЕЙНОГО УРАВНЕНИЯ
Обычно нелинейные уравнения делят на трансцендентные и
алгебраические. Хотя часто они решаются одними и теми же
методами, в данной главе методы их решения рассмотрены
19
Алгебраические и
транец ендентные
уравнения
Одно уравнение
Система уравнений
Линейное
(одно
решение)
Нелинейное
Линейная
(одно
решение)
Нелинейная
(несколько
решений)
Алгебраическое (п решений)
Трансцендент-
ное(неопреде-
ленное число
решений)
Рис. 2.1
по отдельности, так как решения алгебраических уравнений
обладают особыми свойствами. Этот раздел посвящен
трансцендентным уравнениям; алгебраическим уравнениям
посвящен следующий раздел.
Трансцендентными называют нелинейные уравнения,
содержащие тригонометрические функции или другие
специальные функции, например lgx или е*. Методы решения
нелинейных уравнений такого типа делятся на прямые и
итерационные. Первые позволяют найти решение непосредственно с
помощью формул и всегда обеспечивают получение точного
решения. Известным примером такого рода является формула
корней квадратного уравнения. В итерационных методах
процедура решения задается в виде многократного прменения
некоторого алгоритма. Полученное решение всегда является
приближенным, хотя может быть сколько угодно близким к
точному. Итерационные методы наиболее удобны для реализации
на ЭВМ и поэтому подробно рассмотрены в этой главе. В
каждом из излагаемых методов считается, что процесс
решения задачи состоит в отыскании действительных корней
(нулей) уравнения /(х)=0. Хотя подобные уравнения также могут
иметь комплексные корни, способы их отыскания здесь не
рассматриваются.
2.2 МЕТОД ПОЛОВИННОГО ДЕЛЕНИЯ
Блок-схема алгоритма метода половинного деления
представлена на рис. 2.2. Он состоит из следующих операций. Сначала
20
Вычисление функции
через ровные интервалы
значений х до смены зна-
на при переходе от f(xn)
Вычисление
хср и f(xcp)
Достаточно
ли мала величина
Рис. 2.2
вычисляют значения функций в точках, расположенных через
равные интервалы на оси х. Это делают до тех пор, пока не
будут найдены два последовательных значения функции f(xn)
и /(*n+i), имеющие противоположные знаки. (Напомним, если
функция непрерывна, изменение знака указывает на
существование корня.) Затем по формуле
вычисляют середину промежутка [хп, хп+1] и находят значение
функции Дхср). Если знак f(xcp) совпадает со знаком f(xn), то
в дальнейшем вместо f(xn) используют f(xcp). Если же f(xcp)
21
имеет знак, противоположный знаку /(•*„), т.е. ее знак
совпадает со знаком /(хЛ+1), то на /(*ср) заменяют это значение
функции. В результате интервал, в котором заключено
значение корня, сужается. Если значение /(хср) достаточно близко к
нулю, процесс заканчивают, в противном случае его
продолжают. На рис. 2.3 эта процедура показана графически. Хотя ме-
Рис. 2.3
тод половинного деления не обладает высокой
вычислительной эффективностью, при увеличении числа итераций он
обеспечивает получение все более точного приближенного
значения корня. После того как найден первый интервал, в
котором заключен корень, его ширина после N итераций убывает
в 2N раза.
2.3 МЕТОД ХОРД
В основе этого метода лежит линейная интерполяция ло двум
значениям функции, имеющим противоположные знаки. При
отыскании корня этот метод нередко обеспечивает более
быструю сходимость, чем предыдущий. Блок-схема алгоритма
метода хорд дана на рис. 2.4. Счет ведется следующим образом.
Сначала определяют значения функции в точках,
расположенных на оси х через равные интервалы. Это делают до тех
пор, пока не будет найдена пара последовательных значений
функции /(Хя) и f(xn+i), имеющих противоположные знаки.
Прямая, проведенная через эти две точки, пересекает ось х
при значении
22
Вычисление срункции
через равные интервалы
значении х
до смены знака при
переходе от f(xn) к f(xn+i)
Одинаковы ли
Цх*)ц f(xn)7
Достаточно ли
мала величина /f
Рис. 2.4
Это значение аргумента используют для определения значения
функции /(**), которое сравнивают со значениями функций
f(xn) и f(xn+i) и в дальнейшем применяют вместо того из
них, с которым оно совпадает по знаку. Если значение /(**)
недостаточно близко к нулю, всю процедуру повторяют до тех
пор, пока не будет достигнута необходимая степень
сходимости. На рис. 2.5 процесс решения показан графически.
23
Рис. 2.5
2.4 МЕТОД НЬЮТОНА
Метод последовательных приближений, разработанный
Ньютоном, используют наиболее часто среди всех итерационных
алгоритмов. Его популярность обусловлена тем, что в отличие от
двух предыдущих методов для определения интервала, в
котором заключен корень, не требуется находить значения
функции с противоположными знаками. Вместо интерполяции по
двум значениям функции экстраполяцию в методе Ньютона
осуществляют с помощью касательной к кривой в данной
точке. На рис. 2.6 показана блок-схема алгоритма этого метода, в
основе которбго лежит разложение функции f(x) в ряд
Тейлора
Члены, содержащие А во второй и более высоких степенях,
отбрасывают; используется соотношение *n + A=jcn+1.
Предполагается, что переход от х„ к хя+1 приближает значение
функции к нулю так, что /(*п+А) = 0. Тогда
xn+\=xn-f(xn)/f'(xn)-
Значение хп+1 соответствует точке, в которой касательная к
кривой в точке хп пересекает ось х. Так как кривая f(x)
отлична от прямой, то значение функции f(xn+1) скорее всего
не будет в точности равно нулю. Поэтому всю процедуру
повторяют, причем вместо хп используют хп+1. Счет
прекращается по достижении достаточно малого значения /(*п+1). На
рис. 2.7 процесс решения уравнения методом Ньютона
показан графически. Совершенно ясно, что быстрота сходимости в
24
Выбор подходящего
начального значения
Вычисление
Рис. 2.6
-•■х
Рис. 2.7
большой мере зависит от удачного выбора исходной точки.
Если в процессе итераций тангенс /'(*) угла наклонной
касательной обращается в нуль, то применение метода
усложняется. Можно также показать, что в случае бесконечно большого
/ "(х) метод также не является достаточно эффективным. Так
как условие кратности корней имеет вид f(x)=f'(x)=0, то в
этом случае метод Ньютона не обеспечивает сходимость.
Отметим, что иногда используют другой способ контроля
сходимости, состоящий в сравнении хп и хп+1.
2.5 МЕТОД СЕКУЩИХ
Один из недостатков метода Ньютона состоит в том, что,
пользуясь им, приходится дифференцировать функцию /(*).
Если нахождение производной затруднено, то можно
воспользоваться некоторым приближением, которое и составляет
основу метода секущих. Заменив производную /'(*„),
используемую в методе Ньютона
разностью последовательных значений функции, отнесенной к
разности значений аргумента
получим следующую итерационную формулу:
Схема алгоритма для этого метода та же, что и для метода
Ньютона (несколько иной вид имеет итерационная формула).
В сущности в методе секущих для отыскания корня
используют комбинацию интерполяции и экстраполяции. В своей
интерполяционной части этот метод эквивалентен методу хорд.
Как и в случае метода Ньютона, счет заканчивают, когда
последовательные значения х совпадают с некоторой
приемлемой точностью или когда значение функции f(x) становится
достаточно близким к нулю. В случае кратных корней при
использовании метода секущих возникают те же трудности, что
и при использовании метода Ньютона.
2.6 МЕТОД ПРОСТОЙ ИТЕРАЦИИ
Для применения этого метода уравнение /(лс)=О представляют
в следующем виде:
x=g(x).
26
Соответствующая итерационная формула имеет вид
Блок-схема алгоритма метода представлена на рис. 2.8.
Простота метода такой итерации делает его привлекательным, од-
Выдор подходящего
начального значения
Вычисление
и
достаточно ли
мала величина
Рис. 2.8
нако не следует забывать, что и этому методу присущи
недостатки, так что он не всегда обеспечивает сходимость. Поэтому
для любой программы, в которой используют этот алгоритм,
необходимо предусматривать контроль сходимости и
прекращать счет, если сходимость не обеспечивается.
27
ПРИМЕР
Требуется определить значение критической силы1
для стержня, один конец которого защемлен, а другой!
может перемещаться в вертикальном направлении, как1
показано на рисунке. Критическая сила в этом случае!
определяется уравнением I
I
tg \/P/{EI)L= УР/ЩГ,
^Ползун
\3аделт
где Р - критическая сила, при которой стержень теряет!
устойчивость, EI - изгибная жесткость стержня, I
L-ero длина. Введем обозначение jc= \/p/(EJ)L. Тогда
транс цендентное уравнение, которое предстоит решить,
принимает вид
jc-tgx=O.
Чтобы найти решение задачи, прежде всего нужно!
приближенно найти, где/ лежит корень. С помощью гра-'
фика зависимости tg(x) от х можно показать, что
первый ненулевой корень Лежит в третьей четверти. Чтобы
проиллюстрировать вычислительные возможности
различных методов, для отыскания корней в этой задаче)
мы используем два различных алгоритма.
Первый используемый метод - метод хорд.
Программа на бейсике, которая реализует это решение,
приведена ниже. Задачу отыскания корней программа
выполняет в два этапа. На первом шаге, для того чтобы найти)
набор значений функций разных знаков, интервал, в ко-'
тором происходит поиск, разделяют на десять одинако-1
28
I вых частей. Как только изменение знака найдено, для1
I выполнения второго шага, во время которого уточняют!
I значение корня, используют алгоритм, представленный I
| на рис. 2.4. I
1000 REM •••••••••••••••••••••••••••••••••
1010 REM * ЭТА ПРОГРАММА НАХОДИТ КОРЕНЬ
1020 REM ' ТРАНСЦЕНДЕНТНОГО УРАВНЕНИЯ
1030 REM *
1040 REM * 0 = X-TAN(X)'
1050 REM *
1060 REM * В ОБЛАСТИ
1070 REM *
1080 REM * PI < X < 1.5*PI
1090 REM *
1100 REM * МЕТОДОМ ХОРД
1110 REM **♦*•**•*****•***•**•*****•**••**
1120 \
ИЗО REM *********************************
1140 REM * ВЫЯСНЕНИЕ НАЛИЧИЯ КОРНЯ ПО
1150 REM * ИЗМЕНЕНИЮ ЗНАКА ФУНКЦИИ
1160 REM •••••••••••••••••••••••••••••••••
1170 \
1180 \
1190 Х1 = Р1
1200 Fl = X1-SIN(X1)/COS(X1)
1210 D = .05*PI
1220 FOR 1 = 1 ТО 10
1230 X2^Xl + D
1240 F2 = X2-SIN(X2)/COS(X2)
1250 IF F24FK0 GO TO 1390
1260 X1 = X2 \ F1 = F2
1270 NEXT I
1280 \
1290 PRINT "НЕТ ИЗМЕНЕНИЯ ЗНАКА"
1300 END
1310 \
1320 \
1330 REM *********************************
1340 REM * НАХОЖДЕНИЕ УТОЧНЕННОГО
1350 REM * ЗНАЧЕНИЯ КОРНЯ С ТОЧНОСТЬЮ
1360 REM • ABS(F)<1.00000E-04
1370 REM ••••••••••••••••••••••.••.•••••••
1380 \
1390 X = X1-F1*(X2-X1)/(F2-F1)
29
1400 F = X-SINT(X)/COS(X)
1410 IF ABS(F)<1.00000E-04 GO TO 1480
1420 IF F*Fl>0 GO TO 1450
1430 X1 = X \ F1 = F
1440 GO TO 1390
1450 X2 = X \ F2 = F
1460 GO TO 1390
1470 \
1480 PRINT "КОРЕНЬ : ";X
1490 END
Результат выполнения программы
КОРЕНЬ:4.49341
I Программа требует несколько секунд машинного!
I времени. Память, необходимая для выполнения про-1
I граммы, конечно, может быть уменьшена исключением I
I операторов REM. Недостаток метода заключается в том,1
I что первый шаг алгоритма должен найти изменение I
I знака функции, чтобы можно было приступить ко вто-1
I рому шагу. I
I Второй используемый метод - это метод ньютонов-1
I ских итераций. Ниже дана программа на бейсике, pea-1
I лизующая этот метод. Программа стартует с начального I
I приближения и в процессе выполнения улучшает это I
I значение до тех пор, пока не будет достигнуто значение I
I функции по модулю, меньшее 0,0001. I
1000 REM ••••••••••••••••••••••••••••••••
1010 REM * ЭТА ПРОГРАММА НАХОДИТ КОРЕНЬ
1020 REM * ТРАНСЦЕНДЕНТНОГО УРАВНЕНИЯ
1030 REM *
1040 REM * 0 = X - TAN(X)
1050 REM *
1060 REM * НА ПРОМЕЖУТКЕ
1070 REM *
1080 REM * PI < X < 1.5 * PI
1090 REM *
1100 REM * ПО МЕТОДУ ИТЕРАЦИЙ НЬЮТОНА
1110 REM ********************************
1040 \
1050 X = 43
30
1160 FOR I = 1 TO 30
1170 F = X-SIN(X)/COS(X)
1180 F1 = 1.0-1.0/COS(X)"2
1190 X = X-F/F1
1200 IF ABS(F)< 0.0001 GOTO 1250
1210 NEXT I
1220 PRINT ' НЕТ РЕШЕНИЯ ЗА 30 ИТЕРАЦИЙ '
1230 STOP
1240 \
1250 PRINT ' КОРЕНЬ';Х
1260 END
Результат выполнения программы
КОРЕНЬ 4.49341
I Программа требует несколько секунд машинного!
I времени. Преимущество этого метода состоит в том, что1
I он выполняется за один шаг и поэтому требует меньше I
I строк для реализации, чем метод хорд. Недостаток ме-1
I тода: плохой выбор начального приближения может I
I привести к потере сходимости алгоритма. Например, ее-1
I ли испытать начальные значения дс=4,0 или х=5,0, ме-1
I тод не будет сходиться. I
2.7 ОПРЕДЕЛЕНИЕ КОРНЕЙ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
Уравнения, содержащие суммы целых степеней х, называют
алгебраическими. Их общий вид
апхп + лй_ г хп~ 1 + ... + аг х + ао=О.
Свойства алгебраических уравнений
При отыскании корней алгебраических уравнений полезно
иметь в виду некоторые их свойства.
1. Алгебраическое уравнение порядка п имеет п корней,
которые могут быть действительными или комплексными.
2. Если все коэффициенты ai действительные, то все
комплексные корни образуют комплексно-сопряженные пары.
3. Число положительных действительных корней равно или
31
меньше (на целое число) числа перемен знаков в
последовательности коэффициентов а^
4. Число отрицательных действительных корней равно или
меньше (на целое число) числа перемен знаков в
последовательности коэффициентов ai при замене х на - х.
Известны прямые методы отыскания корней
алгебраических уравнений второй и третьей степеней, однако для
уравнений более высоких степеней приходится использовать
итерационные методы. В строго математическом смысле, найдя
какой-либо корень алгебраического уравнения х* итерационным
методом, можно понизить порядок этого уравнения, разделив
его на х- х* и получив уравнение порядка п -1. На первый
взгляд такая возможность кажется привлекательной, однако
пользоваться ею следует с осторожностью, так как даже
небольшая погрешность в значении первого найденного корня
может привести к накоплению больших ошибок в значениях
коэффициентов уравнения (п - 1)-й степени. Отметим, что эта
процедура нередко позволяет сделать разумные предположения
о других корнях, если несколько первых корней уже известны.
2.8 МЕТОД ЛИНА ДЛЯ КОМПЛЕКСНЫХ КОРНЕЙ
Для отыскания комплексных корней существует несколько
методов. Все они почти всегда связаны с выделением из
исходного алгебраического уравнения квадратичного множителя
x2+px+q. Широко применяемым методом этого типа является
метод Лина, В его основе лежит представление
алгебраического уравнения
хп + ап_1хп"1 + ... + ахх + ао=О
в виде
(х2 + рх + q)(xn ~ 2 + Ьп _ г хп ' 3 + ... + Ъъ х + Ь2) + Ьг х + йо = О,
где Ьх х + Ьо - линейный остаточный член, который мы
стремимся сделать равным нулю. Если это возможно, то исходное
алгебраическое уравнение делится на квадратичный множитель
без остатка. Прелположив, что ^ = ^=0. и сравнивая
соответствующие коэффициенты двух приведенных форм
алгебраического уравнения, получаем
Ъп_х =ап- х - р,
32
bn-2 =an-2 ~ Pbn- l -Q,
bn_j =an-j - pbn+ !_/ - qbn+2-j 1
p =■
Q =
Алгоритм итерационной процедуры решения иллюстрируется
рис. 2.9. Действует он следующим образом. Сначала задают ве-
2-522
Выбор начальных
Значений
Вычисление
Вычисление нобь/х
значений puq по значениям
Достаточно ^v. Да
ли малы изменения^Ъ *4 Стоп
Рис. 2.9
33
роятные значения р и ду которые вместе с заданными
коэффициентами at используют для вычисления Ьп_г. В свою
очередь значение Ъп_л служит для вычисления Ьп_2 и Т-Д- Д°
тех пор, пока не будут найдены все коэффициенты, включая
Ь2. При известных й3» *2 и а\ и ао из ДВУХ последних
уравнений можно найти уточненные значения р и qy обозначим их
р* и q*. Если их отличие от р и q достаточно мало, счет
прекращается. В противном случае всю процедуру повторяют с
использованием новых значений р и q. Как видим, процедура
решения сводится к решению двух уравнений с двумя
неизвестными методом простой итерации. Этот вопрос подробнее
рассмотрен в гл. 3.
В другом методе, также основанном на использовании
квадратичного множителя х2 + рх + q и называемом методом Бэр-
стоу, для решения двух уравнений с двумя неизвестными
используют метод Ньютона.
2.9 ОПРЕДЕЛЕНИЕ КОРНЕЙ ПОЛИНОМА МЕТОДОМ БЭРСТОУ
Метод Бэрстоу в основном заключается в следующем: для
коэффициентов множителя в виде квадратичного полинома,
определенного в предыдущем параграфе, выбирают начальное
приближение. Затем эти значения уточняют с помощью
корректировочного коэффициента:
р = р + Ар,
q = q + Aq.
Требуется, чтобы остаточные члены R(p, q) и 5(р, q)
обращались в нуль в процессе вычислений. Если эти функции
разложить в ряд Тейлора, то в результате получим:
S(p + Ap,q + Aq) =S(p, q) + — Ap+ — Aq + члены ^°п^
Ьр bq ВЫСОКИХ ПОрЯДКОВ,
Ap,q + Aq) =R(p,q) + — Ар + — Aq + члены более
Ьр bq ' ВЫСОКИХ ПОрЯДКОВ.
Если предположить, что при уточнении р и q остаточные
члены близки к нулю, то левые части этих уравнений обратятся
в нуль. Если эти условия выполнены и корректировочные
коэффициенты настолько малы, что членами высших порядков
можно пренебречь, нам остается решить систему из двух
уравнений с двумя неизвестными. Получаем
34
Э/\ Э«з bo Э/\
о _ d D _ С
Эя bq . bp bp
Ар = Aq = .
bR bS _ bS_ _bR_ ' bR_ jbS_ _ _dS_ _дЛ_
dp bq bp bq bp bq bp bo
При нахождении частных производных R и S по р и q, надо
помнить, что R и S являются функциями Ьь которые в свою
очередь зависят от р и q. Поэтому необходимо получить
последовательность частных производных, подобную
последовательности Ьь полученной ранее. Например,
ЬЬ° -г - 1-
Ьр * v г
ЬЬ:
—■L=C/ = V, -PC,., -^Cf_2; i =2,3,...,w-3;
dp
bR_ =_b _ c
bp n~3 n~3 W"4'
— - г
bp n~3'
ъь0
bq
bb
L = d( = -bt_ j - pdt_ j - qdt_ 2; / = 2, 3,..., n - 3;
bq
bq --»n-4-^n-3-4«n-4 ,
Блок-схема этого метода представлена на рис. 2.10. По методу
Бэрстоу отыскание улучшенных значений р и q продолжается
до тех пор, пока не будет получено требуемое решение.
Решение считается точным, если R и S достаточно малы или, что
то же самое, р и q достаточно малы. Метод Бэрстоу
является улучшенным по сравнению с методом Лина, так как он
быстрее сходится, а иногда дает сходимость в тех случаях,
когда метод Лина расходится. Заметим, что этом метод сводится
35
Вы5ор начальных
Значений
Р" <?
.
Вычисление
Вычисление
др и д%
,
Достаточно
ли малы
приращения puq
Уточнение
р=р+др
Ла
Стоп
Рис. 2.10
к решению двух уравнений с двумя неизвестными по методу
итераций Ньютона - Рафсона. Эта тема будет детально
рассмотрена в гл. 3.
I ПРИМЕР I
12.2 I
I Пусть надо определить все корни полинома
I х5 + 4х4-9х3-14х+50;с- 600=0.
I
I Будем использовать метод Бэрстоу, так как надо опреде-1
I лить все корни. Ниже представлена программа на бей-1
I сике, вычисляющая эти корни. Программа вначале на-!
I ходит оценку для корней приведенного уравнения, а за-1
I тем выполняет окончательный интерполяционный цикл I
1для исходного полинома. Программа разработана для1
I полиномов четной и нечетной степени, в случае поли-1
I нома нечетной степени хотя бы один корень должен I
(быть вещественным. Для определения вещественного!
36
корня используют итерационный метод Ньютона ранее, I
чем выделяют множители в виде квадратичных трех-1
членов. В данной программе коэффициенты полинома!
вводят как элементы массива C1(N), вещественные час-1
ти найденных корней помещают в массив R1(N), al
мнимые-в R2(N). Программа также требует нескольких!
рабочих массивов A(N), B(N), C(N), D(N), P(N/2+l),l
Q(N/2l) |
1000 REM ***♦*******♦*♦*♦*♦*•♦♦♦♦•*♦•
1010 REM * ДАННАЯ ПРОГРАММА НАХОДИТ
1020 REM * ВСЕ КОРНИ ПОЛИНОМА С
1030 REM * ВЕЩЕСТВЕННЫМИ КОЭФФИЦИЕН-
1040 REM * ТАМИ ПО МЕТОДУ БЭРСТОУ
1050 REM *
1060 REM *
1070 REM •••♦**•**•*****•*•*******•**
1080 \
1090 DIM C1(5)A(5),B(5)
1100 DIM P1(3),Q1(3)
1110 DIM R1(5),R2(5)
1120 DIM C(5),D(5)
ИЗО \
1140 Cl(0)=4 \ Cl(l)= -9 \ Cl(2) = 14
1150 Cl(3)=50 \ Cl(4)= -600
1160 N=5
1170 \
1180 REM* ПРИМЕНИМ МЕТОД БЭРСТОУ *
1190 rem***************************
1200 \
1210 GOSUB 2000
1220 \
1230 REM*BbIBOfl РЕЗУЛЬТАТОВ НА ПЕЧАТЬ*
1240 \
1250 PRINT "КОРНИ ИМЕЮТ ВИД"
1260 PRINT "= = = = = = = = = = = = = = = = = = = = = = = = = = = = ="
1270 PRINT "ВЕЩЕСТВЕННЫЕ МНИМЫЕ"
1280 PRINT "ЧАСТИ ЧАСТИ"
1290 PRINT "= = = = = = = = = = = = = = = = = = = = = = = = = = = = ="
1300 FOR 1 = 0 TON-1
1310 PRINT R1(I),R2(I)
1320 NEXT I
1330 PRINT "= = = = = = = = = = = = = = = = = = = = = = = = = = = = ="
1340 STOP
1350 \
1360 \
2000 REM •••*♦**•*♦***♦♦**•*****♦•*****♦♦*•
2010 REM
2020 REM
2030 REM
2040 REM
2050 REM
2060 REM
37
ДАННАЯ ПОДПРОГРАММА ИСПОЛЬЗУЕТ
МЕТОД БЭРСТОУ ДЛЯ ОПРЕДЕЛЕНИЯ
ВСЕХ КОРНЕЙ, ВКЛЮЧАЯ МНИМЫЕ
ЧАСТИ ДЛЯ ПОЛИНОМА
С ВЕЩЕСТВЕННЫМИ КОЭФФИЦИЕНТАМИ.
ПОЛИНОМ ИМЕЕТ ВИД
- 2)
C1(N-2)*
ПАРАМЕТРЫ
N-ПОРЯДОК ПОЛИНОМА
С1 - МАССИВ,СОДЕРЖАЩИЙ КОЭФФИЦИ-
ЕНТЫ ПОЛИНОМА
A,B,C,D - РАБОЧИЕ МАССИВЫ
РАЗМЕРНОСТИ N
R1,R2 - ВЕКТОРА,СОДЕРЖАЩИЕ
МНИМЫЕ И ВЕЩЕСТВЕННЫЕ ЧАСТИ
ОПРЕДЕЛЯЕМЫХ КОРНЕЙ РАЗМЕРНОСТЬ N
P1,Q1 - РАБОЧИЕ МАССИВЫ
РАЗМЕРНОСТИ (N/2 + 1)
ПОДПРОГРАММА ОБРАЩАЕТСЯ К
ДВУМ ВСПОМОГАТЕЛЬНЫМ,СОДЕРЖАЩИМ
ИТЕРАЦИОННЫЙ МЕТОД НЬЮТОНА
2070 REM
2080 REM
2090 REM
2100 REM
2110 REM
2120 REM
2130 REM
2140 REM
2150 REM
2160 REM
2170 REM
2180 REM
2190 REM
2200 REM
2210 REM
2220 REM
2230 REM
2240 REM
2250 REM
2260 REM
2270 REM
2280 REM
2660 REM ••••••••••••••<
2670 \
2680 M = N \ P = 0 \ Q = 0
2690 L=INT((N + l)/2)
2700 \
2710 FOR 1 = 0 TO N-l
2720 A(I) = C1(I)
2730 NEXT I
2740 \
2750 REM
2760 REM
2770 REM
2780 REM •••••••••••••••••••••••••••••••••••
2800 FOR J = 0 TOL-2
2810 GOSUB 3520
2820 P1(J) = P
2830 Q1(J) = Q
2840 M = M-2
2850 IF M = 2 THEN GO TO 3100
2860 FOR K=0 TOM-1
2870 A(K) = B(K)
2880 NEXT К
2890 IF M = 3 THEN GO TO 2980
2900 NEXT J
2910 \
2920 REM ••••••••••••••••••••••••••••••••••
2930 REM • ЭТА ЧАСТЬ ПРОГРАММЫ НАХОДИТ
2940 REM * ЕДИНСТВЕННЫЙ ВЕЩЕСТВЕННЫЙ КО-
2950 REM • РЕНЬ ПОЛИНОМА НЕЧЕТНОЙ СТЕПЕНИ
2970 REM ••••••••••••••••••••••••••••••••••
2980 Х= -В(0)
2990 GOSUB 3950
3000 Pl(L-2)=A(0) + X
СНАЧАЛА НАЙДЕМ КОРНИ УСЕЧЕННОГО
ПОЛИНОМА
38
ЗОЮ Ql(L-2)= -A(2)/X
3020 GO TO 3220
3030 \
3040 REM •••••••••••••••••••••••••••••••••
3050 REM • В ЭТОЙ ЧАСТИ ОПРЕДЕЛЯЕТСЯ
3060 REM • ПОСЛЕДНЯЯ ПАРА КОРНЕЙ ЧЕТНОГО .
3070 REM • ПОЛИНОМА
3080 REM •••••••••••••••••••••••••••••••••
3090 \
3100 Pl(L-l) = B(0)
3110 Q1(L-1) = B(1)
3120 L=L+1
3130 \
3140 REM •••••••••••••••••••••••••••••••••
3150 REM * В ЭТОЙ ЧАСТИ УТОЧНЯЮТСЯ ПРЕ-
3160 REM * ДЫДУЩИЕ ЗНАЧЕНИЯ КОРНЕЙ, ОПРЕ-
3170 REM * ДЕЛЕННЫЕ МЕТОДОМ ИТЕРАЦИЙ НА-
3180 REM * ЧАЛЬНОГО ПОЛИНОМА
3190 REM *
3200 REM *********************************
3220 \
3230 FOR K=0 TO N-1
3240 А(К) = С1(К)
3250 NEXT К
3260 IF M = 4 THEN GO TO 3310
3270 M = N
3280 GOSUB 3950
3290 P1(N-1) = X
3300 R2(N-l) = 0
3310 M = N
3320 FOR J = 0 TOL-2
3330 P = P1(J)
3340 Q = Q1(J)
3350 GOSUB 3520
3360 D = P*P-4*Q
3370 IF D<0 GO TO 3430
3380 Rl(2* J) = ( - P + SQR(D))/2
3390 Rl(2* J +1) = ( - P - SQR(D))/2
3400 R2(2*J) = 0
3410 R2(2*J+l) = 0
3420 GO TO 3470
3430 R1(2M)= -P/2
3440 R1(2M + 1) = -P/2
3450 R2(2*J) = SQR(-D)/2
3460 R2(2*J+1) = - SQR( - D)/2
3470 NEXT J
3480 \
3490 RETURN
3500 \
3510 \
3520 REM •••••••••••••••••••••••••••••
3530 REM * ПОДПРОГРАММА ОПРЕДЕЛЯЕТ
3540 REM • КОЭФФИЦИЕНТЫ ПОЛИНОМА
3550 REM * ПОРЯДКА М
3570 REM *
39
3580 REM •••••••••••••••••••••••••••••
3590 \
3600 B(0)=A(0)-P
3610 B(l)=A(l)-P*B(0)-Q
3620 C(0)=-l
3630 C(l)=-B(0) + P
3640 D(0) = 0
3650 D(l)= -1
3660 FOR 1 = 2 TO M-3
3670 B(I)=A(I) - P*B(I - 1) - Q*B(I - 2)
3680 C(I)= - B(I - 1) - P*C(I - 1) - Q*C(I - 2)
3690 D(I) = C(I-1)
3700 NEXT I
3710 R=A(M - 2) - P*B(M - 3) - Q*B(M - 4)
3720 S=A(M - 1) - Q*B(M - 3)
3730 R3= - B(M - 3) - P*S(M - 3) - Q*C(M - 4)
3740 R4= - B(M - 3) - P*S(M - 3) - Q*C(M - 4)
3750 R3= - B(M - 4) - P*D(M - 3) - Q*D(M - 4)
3760 Sl=-Q*C(M-3)
3770 S2= - B(M - 3) - Q*D(M - 3)
3780 D1 = R4*S2-S1*R3
3790 D2 = (S*R3-R*S2)/D1
3800 D3=(R*S1 - S*R4)/D1
3810 IF ABS(D2)>1.00000E-03*ABS(P) GO TO 3860
3820 IF ABS(D3)>1.00000E-03*ABS(Q) GO TO 3860
3830 P = P + D2
3840 Q = Q + D3
3850 RETURN
3860 10 = 10+1
3870 IF 10 > 100 THEN GO TO 3910
3880 P = P + D2
3890 Q = Q + D3
3910 PRINT " НЕТ РЕШЕНИЯ ПОСЛЕ 100 ИТЕРАЦИЙ"
3920 RETURN
3930 \
3940 \
3950 REM **************************
3960 REM * ПОДПРОГРАММА УТОЧНЯЕТ
3970 REM * ОДИН КОРЕНЬ ПОЛИНОМА
3980 REM * ИТЕРАЦИОННЫМ МЕТОДОМ
3990 REM * НЬЮТОНА
4000 REM *
4010 REM **♦*♦****•••*♦♦**♦♦***♦***
4020 \
4030 \
4040 10 = 0
4050 \
4060 F=X"M+A(M-1)
4070 D4 = M*X"(M-1)
4080 FOR 1 = 0 ТОМ-2
4090 F=F+A(I)*X"(M-1-I)
4100 D4 = D4+A(I)*(M - 1 - 1)*Хл(М - 2 - I)
4110 NEXT I
4120 \
4130 D5= -F/D4
40
4140 IF ABS(D5)>1.00000E-04*ABS(X) TIH:N GO TO 4170
4150 X = X + D5
4160 RETURN
4170 10 = 10 + 1
4180 IF 10 > 100 GO TO 4210
4190 X = X + D5
4200 GO TO 4060
4210 PRINT " БОЛЕЕ 100 ИТЕРАЦИЙ"
4220 RETURN
4230 END
КОРНИ ИМЕЮТ ВИД
ВЕЩЕСТВЕННЫЕ МНИМЫЕ
ЧАСТИ ЧАСТИ
=========================
8.36907 0
-16.8625 0
- 3.65434 2.53766
- 3.65434 - 2.53766
-5 0
2.10 СООБРАЖЕНИЯ О ВЫБОРЕ АЛГОРИТМА
ДЛЯ МАЛОГО КОМПЬЮТЕРА
Хотя общие правила, подсказывающие пользователю выбор
наилучшего метода для отыскания корней определенного
уравнения, сформулировать невозможно, существует несколько
основных рекомендаций.
1. Учитывать природу задачи и ее корней. Если решаемое
уравнение трансцендентное, число возможных решений,
вообще говоря, неизвестно. Приближенное расположение
корней также неизвестно, что делает решение методом
Ньютона довольно затруднительным. По этой причине
предпочтительней использовать метод половинного деления,
дополненный методом хорд. Если, наоборот, о природе корня
или корней что-либо известно, метод итераций Ньютона
обычно обеспечивает более быструю сходимость к
требуемому решению. Следует иметь в виду, что для метода
Ньютона возникают такие трудные для обработки ситуации,
когда или наклон прямой обращается в нуль, или функция
не является непрерывной. При таких условиях лучше
работают другие методы. Зачастую существенное
представление о подходящем начальном приближении для итераций
может дать грубый набросок графика трансцендентной
функции. Если функцию не так просто продифференцировать,
то возможные преимущества метода Ньютона можно отча-
41
сти сохранить, используя приближение для производной из
метода секущих.
Если решается алгебраическое уравнение, при выборе
разрешающего алгоритма пользователь имеет гораздо
больше информации. Например, всегда известно, сколько
корней имеется, и довольно часто известно, сколько из них
вещественных положительных и сколько вещественных
отрицательных. Эту информацию обычно используют для
выбора начального приближения для итераций. Для
оценки наименьшего корня полинома используют такой прием:
слагаемые со степенями высоких порядков отбрасывают и
оставляют лишь квадратичные члены. Наименьший корень
квадратного трехчлена служит хорошей оценкой для
наименьшего (по модулю) корня полинома. Подобный метод
может быть использован и для отыскания наибольшего (по
модулю) корня полинома. Если в полиноме отброшены все
члены с малыми степенями, то наибольший корень
сохранившегося квадратного трехчлена может служить хорошей
оценкой наибольшего корня полинома. Если
предполагается, что некоторые корни комплексны, то лучше
использовать методы типа метода Лина или метода Бэрстоу,
поскольку они представят комплексные корни без
необходимости комплексных вычислений.
2. Учитывать требуемую точность. Методы высокого порядка,
такие, как метод Ньютона, обычно дают точность более
высокую, чем метод половинного деления или метод хорд.
Тем не менее существуют ситуации, когда конкуренция
между точностью и общностью применения заведомо
оправдывает выбор метода малого порядка. Следует также
иметь в виду, что метод, использующий редукцию
полинома для отыскания более чем одного корня, при
повышении уровня редукции приводит к результатам все менее и
менее точным. Поэтому в методах типа метода Лина или
метода Бэрстоу всегда требуется заключительная итерация,
которая уточняет значение корня, используя полный
исходный полином. Иллюстрацией этому служит пример 2.2.
3. Учитывать затрачиваемое время. При выборе алгоритма
следует иметь в виду, что верхнюю границу числа
итераций, необходимую для уменьшения интервала
неопределенности, легко предсказать. С другой стороны, в методе
Ньютона число итераций непредсказуемо. Тем не менее метод
Ньютона, когда он сходится, обычно ведет к цели гораздо
быстрее. Для задач, в которых существенное значение
имеет время вычисления значений функции и ее производной,
предпочтительнее метод ньютоновских итераций.
4. Учитывать требуемую компьютерную память. Метод
Бэрстоу, представленный в примере 2.2, при нахождении кор-
42
ней полинома порядка N использует гораздо больше места
в памяти компьютера, чем этого требуется в методе типа
метода Ньютона. В этой программе пространство,
требуемое для массивов, порядка 8N. В то же время этот метод
находит все корни, как комплексные, так и вещественные,
и поэтому, если в памяти компьютера имеется достаточно
места, он предпочтителен в более широком числе
приложений.
Глава
Решение систем
линейных уравнений
С подобной задачей инженер сталкивается, пожалуй, чаще
всего в своей практике. В общем случае система линейных
уравнений имеет вид
ап хх + а12 х2 + . . . + cilnxn = сг,
Чтобы система имела единственное решение, входящие в
нее п уравнений должны быть линейно независимы.
Необходимым и достаточным условием этого является условие
неравенства нулю определителя данной системы. Алгоритмы
решения задач такого типа подразделяются на прямые и
итерационные. Возможность систематизировать прямые методы для
такой задачи делает их весьма популярными. В данном
разделе сначала излагаются прямые, а затем итерационные методы.
3.1 МЕТОД ИСКЛЮЧЕНИЯ ГАУССА
Наиболее распространенные прямые методы основаны на
приведении системы уравнений к «треугольному» виду. При этом
одно из уравнений содержит только одну неизвестную, а в
каждом следующем добавляется еще по одной неизвестной.
При счете вручную приведение к треугольному виду
достигается сложением и вычитанием уравнений после умножения их
на соответствующие постоянные множители. Выполняя эту
процедуру вручную, нетрудно ошибиться, . однако с ее
помощью можно построить удобный алгоритм числового
решения на ЭВМ. Одним из используемых для этого методов яв-
44
ляется метод Гаусса. Применяя его, сначала нормируют
первое уравнение, для этого его коэффициенты делят на аи.
Затем первое уравнение умножают на первые коэффициенты ап
всех других уравнений и последовательно вычитают из
остальных уравнений. В результате первая переменная будет
исключена из всех уравнений, кроме первого. На следующем этапе
решения такая же процедура применяется к остальным п - 1
уравнениям. В результате из оставшихся п - 2 уравнений
исключается вторая неизвестная. Всю процедуру повторяют до тех
пор, пока после п шагов вся система не будет приведена к
треугольному виду. Математически эту процедуру можно
описать следующим образом.
На к-м шаге процесса исключения новые нормированные
коэффициенты к-го уравнения имеют вид
bk,j = ak,i/ak,k>
а новые коэффициенты в следующих уравнениях принимают
вид
bU = a4~ai,kbkJ>
Выполняя эту процедуру, следует помнить, что коэффициенты
нижестоящих уравнений aitj меняются на каждом шаге.
Например, коэффициенты Ьц 'на следующем шаге превращаются
в коэффициенты aitj. Проиллюстрируем применение
описанной процедуры на следующем простом примере.
Пусть методом исключения Гаусса требуется решить
систему уравнений
х\ "*" Х2 *3 "" Х4 ~ z>
Хл ~~ Х-у ~" Хъ т Ха ^ U,
2 хг + х2 - хъ + 2дс4 = 9,
3 х^ "Н ДС2 "Ь 2дс^ "~ х^ = I.
Для удобства обозначим уравнения буквами и будем
выписывать только коэффициенты при неизвестных и свободные
члены уравнений. Тогда исходная система примет вид
Аг 111-12
А2 1 -1 -1 1 О
Аъ 2 1-12 9
А4 3 12-17
Исключая члены, содержащие хь получим
ВХ=АХ1\ 1 11-12
В2=А2-В1 0 -2 -2 2 -2
В3=А3~2В1 0-1-345
В4=А4-ЗВ1 0-2-121
45
После исключения членов с х2 имеем
#1
Сг
Сг
с.
Исключение
Вх
Сг
D3
D4
=В21(-2)
=В3 + С2
=В4 + 2С2
членов с
= С3/(-2)
= C,-D3
Дойдя до последнего
Bi
Сг
D3
1
0
0
0
хъ дает
1
0
0
0
1
1
0
0
1
1
0
0
ряда, получим
1
0
0
1
1
0
1
1
-2
1
1
1
1
0
1
1
1
-1
-1
3
0
-1
-1
-3/2
3/2
-1
_1
-3/2
2
1
6
3
2
1
-3
6
2
1
-3
E4=2DJ3 0 0 0 14
Возвращаясь к форме уравнений, получим
1 ■" **2 3 "~ 4 ~~ »
откуда, подставляя значение х4 в 3-е уравнение, х3 - во 2-е и
т.д., находим решение системы уравнений
На этом примере хорошо видно, что желательно сделать
нулевыми все элементы матрицы коэффициентов, стоящие
вне главной диагонали. Последнюю процедуру называют
приведением к диагональному виду, она представляет собой
усовершенствованную разновидность метода приведения к
треугольному виду.
3.2 МЕТОД ИСКЛЮЧЕНИЯ ГАУССА - ЖОРДАНА
Этот метод дает алгоритм приведения системы линейных
уравнений к диагональному виду. Единственным его
формальным отличием от предыдущего будет то, что вместе i>k
подставляются i=fc k. Назовем к-й ряд ведущим. В методе
Гаусса преобразования затрагивали только уравнения, стоящие
ниже ведущего ряда. В методе же Гаусса - Жордана
преобразуются уравнения, стоящие и под ведущим рядом, и над ним.
46
Чтобы показать, как это делается, решим предыдущую задачу
методом Гаусса - Жордана. Исходный массив имеет вид
Ах
А2
А3
Л4
1
1
2
3
Исключив члены, содержащие .
Вг
в2
в3
в*
До сих пор
усса. После
С
С
С;
С
=AJ
=А2-
=А3-
=А4 -
1
-Вх
-2Вг
- 3#i
1
0
0
0
1
-1
1
1
1
-1
-1
xh получаем
1
_2
-1
-2
процедура была такой же
исключения х2
1=В1
г=В2
>=в3
г=В4
Теперь хорошо
-с2
/(-2)
+ 2С2
получаем
1
0
0
0
0
1
0
0
видны отличия от
члены с х3, найдем
А
А
А
А
=с2
-(0)А
-D3
= С3/(-2)
=с3
-D3
Наконец, исключив х4 из
получим
Е
Е
Е
i=A
2=А
з=А
+ (0)£4
-(1/2)£4
+ (3/2)£4
1
0
0
0
все>
1
0
0
0
1
0
0
1
_2
-3
-1
, как в
0
1
-2
1
метода
0
0
1
0
с уравнений,
0
1
0
0
0
1
__|
1
2
-1
-1
2
4
2
2
0
9
7
2
-2
5
1
случае метода Га-
0
_1
3
0
1
1
6
3
Гаусса. Исключив
0
1/2
-3/2
3/2
кроме
0
0
0
1
4
-3
6
\ последнего,
1
2
3
£4= DJ (3/2) 0 0 0 14
Совершенно очевидно, что этот метод облегчает получение
решения. Его недостатком является увеличение объема
вычислений.
Применение обоих описанных методов усложняется, если
какой-либо из элементов ведущего ряда равен нулю. В
последнем случае ведущий ряд нельзя нормировать. Однако,
изменив порядок, в котором расположены уравнения системы, эту
трудность можно обойти. Можно показать, что наибольшая
точность достигается тогда, когда ведущий элемент имеет
наибольшее значение. Поэтому строку с нулевым или малым
ведущим элементом надо заменить на ту из стоящих под ней
строк, в которой в том же столбце стоит элемент, имеющий
наибольшее значение.
47
I ПРИМЕР
I 3.1
Пусть требуется решить следующую систему из
четырех линейных уравнений:
- 2,0 хг + 1,1 х2 - 2,0 хъ - 1,8 х4 = 1,0,
3,2 *! + 2,1 х2 + 3,2*3 + 2,2 х4 = 1,0,
3,4 хх + 2,3 х2 + 4,1 х3 + 3,2 х4 = 6,0,
2,6 ^ + 1,1 х2 - 3,2 х3 + 2,4 х4 = - 7А
Используем метод исключения Гаусса - Жордана с
частичным выбором ведущего элемента. Ниже дана
программа на бейсике для решения этой задачи.
Программа состоит из двух частей. В первой части массив А,
состоящий из 4 строк и 5 столбцов, заполняется
коэффициентами матрицы и правых частей исходной
системы уравнений. Объявляется также рабочий массив Ву
по размерам эквивалентный А. Подпрограмма,
начинающаяся со строки 2000, реализует процедуру исключения!
Гаусса - Жордана с частичным выбором ведущего эле-1
мента. Результатом процедуры исключения является!
массив А, состоящий из единичной матрицы в первых!
п столбцах и значений неизвестных в п + 1 столбце. I
ЭТА ПРОГРАММА НАХОДИТ
РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ
АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
ПО МЕТОДУ ГАУССА - ЖОРДАНА
С ЧАСТИЧНЫМ ВЫБОРОМ
ГЛАВНОГО ЭЛЕМЕНТА.
ЗАПОЛНЕНИЕ МАССИВА
1000 REM
1010 REM
1020 REM
1030 REM
1040 REM
1050 REM
1060 REM
1070 REM
1080 REM
1090 REM
1100 \
1110 \
1120 REM
ИЗО \
1140 DIM A(5,6),B(5,6)
1150 N1 = 4 \ N2 = 5
1160 FOR J = l TO N1
1170 FOR 1 = 1 ТО N2
1180 READ A(J,I)
1190 NEXT I
1200 NEXT J
1210 DATA - 2.0,1.1, - 2.0. - 1.8,1
1220 DATA 3.2,2.1,3.2,2.2,1
1230 DATA 3.4,2.3,4.1,3.2,6
1240 DATA 2.6,1.1,-3.2,2.4,-7
1250 REM **********************
48
ПОСЛЕ ВЫЗОВА ПОДПРОГРАММЫ
РЕАЛИЗУЮЩЕЙ МЕТОД
ГАУССА - ЖОРДАНА РЕЗУЛЬТАТЫ
СОДЕРЖАТСЯ В ПОСЛЕДНЕМ
СТОЛБЦЕ МАТРИЦЫ "А".
ПЕЧАТЬ РЕЗУЛЬТАТОВ
РЕЗУЛЬТАТЫ:1
1260 REM
1270 REM
1280 REM
1290 REM
1300 REM
1310 REM •••••••
1320 GOSUB 2000
1330 \
1340 \
1350 REM •
1360 \
1370 PRINT
1380 PRINT
1390 PRINT ' '
1400 FOR J = l TO N1
1410 PRINT 'X(';J;') = ';A(J,N2)
1420 NEXT J
1430 PRINT ' '
1440 PRINT
1450 \
1460 STOP
1470 \
1480 \
2000 REM ******************
2010 REM
ЭТА ПОДПРОГРАММА
ПРИМЕНЯЕТ К МАТРИЦЕ
МЕТОД ИСКЛЮЧЕНИЯ
ГАУССА-ЖОРДАНА
С ИСПОЛЬЗОВАНИЕМ
ЧАСТИЧНОГО ВЫБОРА
ГЛАВНОГО ЭЛЕМЕНТА
2020 REM
2030 REM
2040 REM
2050 REM
2060 REM
2070 REM
2080 REM
2090 REM
2100 REM
2110 REM
2120 REM
2130 REM
2140 REM
2150 REM
2160 REM
2170 REM
2180 REM
2190 REM
2200 REM
2210 REM
2220 REM
2230 REM
2240 REM
2250 REM
2260 REM
2270 REM
2280 REM
2290 REM
2300 REM
2310 REM
ПАРАМЕТРЫ:
А - ИСХОДНАЯ
РАСШИРЕННАЯ
МАТРИЦА РАЗМЕРОМ
(N1 + 1*N2 + 1)
В - РАБОЧАЯ МАТРИЦА
ТОГО ЖЕ РАЗМЕРА
ЧТО И МАТРИЦА А.
N1 - ЧИСЛО СТРОК В
МАТРИЦЕ А.
N2 - ЧИСЛО СТОЛБЦОВ В
МАТРИЦЕ А.
49
2320 \
2330 \
2340 REM •• ПОЭТАПНОЕ РЕШЕНИЕ
2350 REM ** ЗАДАЧИ
2360 \
2370 FOR K=l ТО N1
2380 \
2390 \
2400 REM •• ПОИСК ГЛАВНОГО ЭЛЕМЕНТА ••
2410 \
2420 Р=А(К,К) \ L1 = K
2430 FOR L = K+1 TO N1
2440 IF ABS(A(L,K))<ABS(P) THEN GO TO 2470
2450 P=A(L,K)
2460 L1 = L
2470 NEXT L
2480 \
2490 \
2500 REM ** ПЕРЕСТАНОВКА СТРОК ДЛЯ
2510 REM •• ВЫДЕЛЕНИЯ ГЛАВНОГО ЭЛЕМЕНТА
2520 \
2530 FOR L2 = l TO N2
2540 T=A(K,L2)
2550 A(K,L2)=A(L1,L2)
2560 A(L1,L2)=T
2570 NEXT L2
2580 \
2590 \
2600 REM ** НОРМАЛИЗАЦИЯ СТРОКИ ••
2610 \
2620 FOR J = l TO N2
2630 B(K,J)=A(K,J)/P
2640 NEXT J
2650 \
2660 REM •• ВЫПОЛНЕНИЕ ШАГА ИСКЛЮЧЕНИЯ
2670 REM •• ГАУССА - ЖОРДАНА
2680 \
2690 FOR 1 = 1 ТО N1
2700 IF I = K GO TO 2740
2710 FOR J = l TO N2
2720 B(I,J)=A(I,J) - A(I,K)*B(K,J)
2730 NEXT J
2740 NEXT I
2750 \
2760 \
2770 REM •• ВОССТАНОВЛЕНИЕ МАТРИЦЫ А
2780 REM ** ПО МАТРИЦЕ В
2790 \
2800 FOR 1 = 1 TO N1
2810 FOR J=l TO N2
2820 A(I,J) = B(I,J)
2830 NEXT J
2840 NEXT I
2850 NEXT К
2860 RETURN
50
I Результат выполнения программы следующий:
РЕЗУЛЬТАТЫ:
Х( 1 )= -5.20996
Х( 2 )= 1.42625
Х( 3 )= 1.6491
Х( 4 )= 4.27255
I Программа требует для выполнения менее 4 с.
3.3 ОТЫСКАНИЕ ОБРАТНОЙ МАТРИЦЫ МЕТОДОМ ИСКЛЮЧЕНИЯ
ГАУССА - ЖОРДАНА
Метод исключения Гаусса - Жордана дает систематический
способ преобразования матрицы в единичную. Точно такой же
процесс нужен для отыскания матрицы, обратной к данной.
Для реализации этого процесса пользователь должен
дополнить исходную матрицу единичной матрицей. Тогда в конце
процесса исключения, когда исходная матрица преобразуется в
единичную, дополняющая часть, которая сначала была
единичной, превращается в обратную к исходной матрице.
Обратимся в примеру, приведенному в тексте выше, и используем
процедуру Гаусса - Жордана для иллюстрации процесса
обращения. Сначала исходную матрицу записывают вместе с
дополняющей ее единичной матрицей:
А,
А2
Аъ
А*
1
1
2
3
После исключения
В1=А1Ц
В2=А2-В1
В3 =А3 -2#!
В4=А4-ЗВХ
1
0
0
0
После исключения
Сх =Вг - С2
С2=В2/(-2)
с3 =в3 + с2
С4 =В4 + 2С2
1
0
0
0
1
-1
1
1
1
-1
-1
2
членов с
1
_2
-1
0
1
_2
-3
-1
членов с
0
1
0
0
0
1
-2
1
-1
1
2
-1
1
0
0
0
х^ получим i
-1
2
4
2
1
-2
-3
0
1
0
0
0
0
1
0
пассив
0
1
0
0
х2 массив примет
0
-1
3
0
1/2
1/2
-3/2
-2
1/2
-1/2
-1/2
-1
0
0
1
0
вид
0
0
1
0
0
0
0
1
0
0
0
1
0
0
0
1
51
Исключив члены с х3, запишем
О 1/2 1/2 О О
1/2 -1/4 -3/4 1/2 О
-3/2 3/4 1/4 -1/2 О
3/2 -11/4 -5/4 1/2 1
Наконец, после исключения членов с х4 во всех рядах,
кроме последнего, массив примет вид
A =Ci - 0D3
A =C2 -A
A=C3/(-2)
£) =(7 _ /)3
1
0
0
0
0
1
0
0
0
0
1
0
Ei -A
E2=D:
Еъ -D-i
E4=DA
! + 0-£"4
,/(3/2)
1
г4 о
г4 о
0
0
1
0
0
0
0
1
0
0
0
0
1
1/2
2/3
-2
-11/6
1/2
-1/3
-1
-5/6
0
1/3
0
1/3
0
-1/3
1
2/3
Правая часть массива содержит теперь обратную к
исходной матрицу. Это можно легко проверить, умножив эту
матрицу на исходную матрицу и убедившись, что в результате
возникнет единичная матрица. Тогда
1/2
2/3
2
11/6
1/2
-1/3
-1
-5/6
0
1/3
0
1/3
0
-1/3
0
2/3
1
1
2
3
1
-1
1
1
1
-1
-1
2
1
1
2
- 1
—
1
0
0
0
0
1
0
0
0
0
1
0
0
о
0
1
Как и в случае решения системы уравнений, точность
процесса можно сделать максимальной, используя перестановку
строк для выбора максимального по модулю ведущего
элемента.
ПРИМЕР
3.2
Пусть надо найти матрицу, обратную к матрице cl
коэффициентами из примера 3.1: I
2,0 1,1 -2,0 -1,8
3,2 2,1 3,2 2,2
3,4 2,3 4,1 3,2
_2,6 1,1 -3,2 2,4
Используемый метод - это метод исключения
Гаусса-Жордана с частичной перестановкой при выборе
ведущего элемента. Ниже дана программа на бейсике,
которая решает эту задачу. Программа использует ту же|
подпрограмму Гаусса - Жордана, что и в примере 3.1.'
Массив Л, состоящий из 4 строк и 8 столбцов, загружа-
52
I ется с матрицей коэффициентов и дополняется единич-1
I ной матрицей с правой стороны: I
1000 REM ••••••••••••••••••••••••••••••••
1010 REM • ЭТА ПРОГРАММА НАХОДИТ
1020 REM * МАТРИЦУ ОБРАТНУЮ К А
1030 REM * ПРИ ПОМОЩИ МЕТОДА
1040 REM * ГАУССА - ЖОРДАНА С
1050 REM • ЧАСТИЧНЫМ ВЫБОРОМ
1060 REM • ГЛАВНОГО ЭЛЕМЕНТА
1070 REM ********************************
1080 \
1090 \
1100 DIM A(5,9),B(5,9),GS(5)
1110 N1=4 \ N2 = 8
1120 \
ИЗО REM •• ВВОД МАССИВА ••
1140 FOR J = l TO N1
1150 FOR 1 = 1 ТО N2
1160 READ A(J,I)
1170 NEXT I
1180 NEXT J
1190 DATA -2,1.1,-2,-1.8,1,0,0,0
1200 DATA 3.2,2.1,3.2,2.2,0,1,0,0
1210 DATA 3.4,2.3,4.1,3.2,0,0,1,0
1220 DATA 2.6,1.1, - 3.2,2.4,0,0,0,1
1230 \
1240 \
1250 REM •• ОБРАЩЕНИЕ К П/П ГАУССА - ЖОРДАНА
1260 GOSUB 2000
1270 REM •• ПОСЛЕ ВОЗВРАТА ИЗ ПОДПРОГРАММЫ
1280 REM •• ОБРАТНАЯ МАТРИЦА
1290 REM ** СОДЕРЖИТСЯ В ПРАВОЙ
1300 REM ** ЧАСТИ РАСШИРЕННОЙ
1310 REM •• МАТРИЦЫ А
1320 REM **
1330 \
1340 \
1350 REM •• ВЫВОД РЕЗУЛЬТАТОВ
1360 \
1370 PRINT ' '
1380 PRINT ' ОБРАТНАЯ МАТРИЦА
1 3QH PRINT ' '
1400 GOSUB 4000
141П PRINT ' - -'
1420 PRINT
1430 \
1440 STOP
1450 \
1460 \
2000 REM •*••*•***•*•••••*•****•********
2010 REM •
2020 REM • ЭТА ПОДПРОГРАММА
2030 REM * ПРИМЕНЯЕТ К МАТРИЦЕ А
53
2040 REM • МЕТОД ИСКЛЮЧЕНИЯ
2050 REM • ГАУССА - ЖОРДАНА
2060 REM * С ИСПОЛЬЗОВАНИЕМ
2070 REM * ЧАСТИЧНОГО ВЫБОРА
2080 REM * ГЛАВНОГО ЭЛЕМЕНТА.
2090 REM *
2100 REM * ПАРАМЕТРЫ:
2110 REM •
2120 REM • А - ИСХОДНАЯ
2130 REM • РАСШИРЕННАЯ
2140 REM * МАТРИЦА РАЗМЕРОМ
2150 REM * (N1 + TN2 + 1)
2160 REM *
2170 REM • В - РАБОЧАЯ МАТРИЦА
2180 REM • ТОГО ЖЕ РАЗМЕРА
2190 REM * ЧТО И МАТРИЦА А.
2200 REM *
2210 REM • N1 - ЧИСЛО СТРОК
2220 REM • В МАТРИЦЕ А.
2230 REM *
2240 REM * N2 - ЧИСЛО СТОЛБЦОВ
2250 REM * В МАТРИЦЕ А.
2260 REM *
2270 REM *
2280 REM •
2290 REM *
2300 REM *
2310 REM *******************************
2320 \
2330 \
2340 REM •• ПОЭТАПНОЕ РЕШЕНИЕ
2350 REM ** ЗАДАЧИ
2360 \
2370 FOR K=l ТО N1
2380 \
2390 \
2400 REM •• ПОИСК ГЛАВНОГО ЭЛЕМЕНТА **
2410 \
2420 Р=А(К,К) \ L1 = K
2430 FOR L = K+1 TO N1
2440 IF ABS(P)>ABS(A(L,K)) THEN GO TO 2470
2450 P = A(L,K)
2460 L1 = L
2470 NEXT L
2480 \
2490 \
2500 REM •* ПЕРЕСТАНОВКА СТРОК ДЛЯ
2510 REM ** ВЫБОРА ГЛАВНОГО ЭЛЕМЕНТА
2520 \
2530 FOR L2 = l TO N2
2540 T=A(K,L2)
2550 A(K,L2)=A(L1,L2)
2560 A(L1,L2) = T
2570 NEXT L2
2580 \
2590 \
2600 REM •• НОРМАЛИЗАЦИЯ СТРОКИ ••
2610 \
2620 FOR J=l TO N2
2630 B(K,J)=A(K,J)/P
2640 NEXT J
2650 \
2660 REM •• ВЫПОЛНЕНИЕ ШАГА ИСКЛЮЧЕНИЯ
2670 REM •• ГАУССА - ЖОРДАНА
2680 \
2690 FOR 1 = 1 ТО N1
2700 IF I = K GO TO 2740
2710 FOR J = l TO N2
2720 B(I,J) = A(I,J) - A(I,K)'B(K,J)
2730 NEXT J
2740 NEXT I
2750 \
2760 \
2770 REM •• ВОССТАНОВЛЕНИЕ МАТРИЦЫ
2780 REM •• А ПО МАТРИЦЕ В
2790 \
2800 FOR 1 = 1 TO N1
2810 FOR J = l TO N2
2820 A(I,J) = B(I,J)
2830 NEXT J
2840 NEXT I
2850 NEXT К
2860 RETURN
2870 \
2880 \
4000 REM •••••••
4010 REM * ЭТА ПОДПРОГРАММА
4020 REM * ПЕЧАТАЕТ РЕЗУЛЬТАТЫ
4030 REM ••••••••••••••••••••••••
4040 \
4050 \
4060 FOR J = l TO 4
4070 FOR 1 = 1 TO 4
4080 F(I)=A(J,I + 4)
4090 NEXT I
4100 GOSUB 4170
4110 PRINT G$(1);TAB(11);GS(2);TAB(21);GS(3);TAB(31);G$(4)
4120 NEXT J
4130 \
4140 RETURN
4150 \
4160 \
4170 REM •••••••••••••••••••••••••••••
4180 REM * ЭТА ПОДПРОГРАММА
4190 REM * ВЫБИРАЕТ СПОСОБ
4200 REM * ЗАПИСИ РЕЗУЛЬТАТОВ ДЛЯ
4210 REM • БОЛЬШЕЙ НАГЛЯДНОСТИ
4220 REM •••••••••••••••••••••••••••••
4230 \
4240 FOR 1 = 1 ТО 4
55
4250 IF ABS(F(I))>.01 THEN GO TO 4290
4260 G$(I) = STRS(F(I)) \ L1 = LEN(GS(I))
4270 G$(I) = SEGS(GS(I),1,2) + SEGS(GS(I),L1 -4
4280 GO TO 4310
4290 G$(I) = STRS(F(I))
4300 G$(I) = SEGS(GS(I),1,8)
4310 NEXT I
4320 RETURN
Результат выполнения программы следующий:
ОБРАТНАЯ МАТРИЦА
-.230437 1.13271 -.951535 .0575733
.414853 .0407692 .188283 .0227238
-.043156 4.6Е-03 .0931867 -.161167
1.3Е-03 -1.23916 1.06878 .128991
Программа требует для выполнения несколько
секунд.
011
02 1
031
04 1
"12
022
032
042
01 3
023
033
043
014
024
034
044
015
025
035
04 5
3.4 МЕТОД ХОЛЕССКОГО ДЛЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
Метод ХолесскогО; известный также как метод Кроута, более
экономичен по обращению к оперативной памяти и по
машинному времени, чем метод Гаусса - Жордана, и поэтому
более предпочтителен к использованию на малом компьютере.
В основе метода Холесского лежит тот факт, что
расширенная матрица
Л =
представляющая систему уравнений, может быть редуцирована
к эквивалентной верхней треугольной системе вида
1 М12 "13 "l4 "15
0 1 "2 3 "24 "2 5
0 0 1 U34 Ы35
0 0 0 1 и45
Если этот вид найден, решение системы уравнений находят
обратной подстановкой начиная с последнего уравнения.
Первый способ добиться этой верхней треугольной формы - это
использовать гауссово исключение. Другой способ - найти такую
преобразующую матрицу, которая, будучи умножена на
матрицу U, преобразует ее в исходную матрицу А. Можно показать,
U =
56
что преобразующая матрица окажется нижней треугольной
матрицей вида
в
пи
/и
/2 1
/3 1
/4 1
результате
0
/2 2
/3 2
/4 2
0
0
/зз
/4 3
/2 1
/3 1
/4 1
получим
[Ц
0
0
О
/44
011 012
02 1 02 2
031 032
04 1
04 2
О
/2 2
/3 2
/4 2
[U] =
~1
О
О
О
013
02 3
0зз
04 3
О
О
/зз
/4 3
И],
"12
1
О
О
014
02 4
034
044
О
О
О
/44
"13
"23
1
О
015
02 5
03 5
04 5
"14 "15
"24 "25
"34 "35
1 "4 5
Соотношения для отыскания элементов матриц L и U
могут быть найдены путем перемножения этих матриц и
сравнения членов с обеих сторон равенства. Например,
hi = an> i=1> 2> • • •» п
дает первый столбец L. Зная его, первую строку U можно
найти так:
и\) = a\j/hb J = 2> 3> • • •» п + !•
Затем находят второй столбец L и вторую строку U:
1П =
" 12
12\ и2Ъ i = 2> 3» • • •> П'
М2У = (a2j - '21 Wl/)/ Z22» / = 3, 4, . . , /1 + 1.
Потом находят третий столбец L и третью строку U, затем
четвертый столбец L и четвертую строку U и так далее.
Процесс продолжается, пока на найдены все строки и столбцы.
Поскольку каждый шаг использует только информацию,
полученную ранее, требуемая память может быть эффективно
организована наложением как U, так и L на матрицу Л. Это
можно сделать, если не привносить нули L и U. В таком случае
первый столбец L устанавливается автоматически без
дополнительных соглашений. Остальные соотношения,
устанавливаемые по соглашению, имеют следующий вид.
57
1. Для первой строки
ау = ау/ап, j = 2, 3, . . ., п + 1.
2. Для т-го столбца и m-й строки (т = 2, 3,
а) для очередного lim столбца
aim-aim-jLl aikakm> i = m п-'
б) для очередной umj строки
т-\
ат]~Л, amkakj
атт
После того как матрица U стала известна, значения
решений Xj могут быть найдены обратной подстановкой:
хп = ап,
п
xi =ain+i~ S aikxk, / = w-l,..., 1.
k=i+i
Поскольку при вычислении столбцов такая процедура
содержит деление на атт важно, чтобы эти элементы не были
равны нулю. В действительности можно показать, что
наилучшая точность обеспечивается тем, что значения атт -
наибольшие по модулю из возможных. Это предполагает частичную
перестановку, подобную той, что была использована в методе
Гаусса - Жордана.
Если матрица А симметричная, то число вычислительных
операций и объем памяти, необходимые для нахождения
решения по методу Холесского, могут быть еще в большей
степени уменьшены.
I ПРИМЕР I
I3-3- I
I Пусть в целях сравнения требуется решить те же1
I линейные уравнения, что и в примере 3.1: I
I - 2,0 хг + 1,1 х2 - 2,0 хъ - 1,8 х4 = 1,0, I
I 3,2 хг + 2,1 х2 + 3,2 х3 + 2,2 х4 = 1,0, I
I 3,4 хх + 2,3 х2 + 4,1 х3 + 3,2 хА = 6,0, I
I 2,6 хх + 1,1 х2 - 3,2 хъ + 2,4 х4 = - 7,0. I
| Используется метод Холесского с частичной перестанов-1
58
кой для выбора ведущего элемента. Ниже дана про-1
грамма на бейсике для решения этой задачи. Как и1
раньше, массив Л, состоящий из 4 строк и 5 столбцов,!
заполняется элементами матрицы и правыми частями!
заданной выше системы уравнений. Заметим, что в!
этом методе не требуется рабочего массива В того же!
размера, что и А. Подпрограмма, начинающаяся на!
строке 3000, реализует метод Холесского с частичной пе-1
рестановкой для выбора главного элемента. Конец этой!
подпрограммы посвящен отысканию значений х( с ис-1
пользованием обратной подстановки. I
1000 REM ••**••*************•*"****"•
1010 REM *
1020 REM * ЭТА ПРОГРАММА НАХОДИТ
1030 REM * РЕШЕНИЕ СИСТЕМЫ
1040 REM * АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
1050 REM * ПО МЕТОДУ ХОЛЕССКОГО
1060 REM * С ИСПОЛЬЗОВАНИЕМ
1070 REM * ЧАСТИЧНОГО ВЫБОРА
1080 REM * ГЛАВНОГО ЭЛЕМЕНТА
1090 REM *
1100 REM ******************************
1110 \
1120 REM •• ВВОД МАССИВА ••
ИЗО \
1140 DIM A(5,6),X(6)
1150 N1=4 \ N2=5
1160 FOR J=l TO N1
1170 FOR 1 = 1 ТО N2
1180 READ A(J,I)
1190 NEXT I
1200 NEXT J
1210 DATA - 2.0,1.1, - 2.0, - 1.8,1
1220 DATA 3.2,2.1,3.2,2.2,1
1230 DATA 3.4,2.3,4.1,3.2,6
1240 DATA 2.6,1.1, - 3.2,2.4, - 7
1250 \
1260 \
1270 REM •• ПРИМЕНЕНИЕ
1280 REM •• МЕТОДА ХОЛЕССКОГО
1290 \
1300 GOSUB 3000
1310 \
1320 \
1330 REM ** ПЕЧАТЬ РЕЗУЛЬТАТОВ ••
1340 \
1350 PRINT ' '
1360 PRINT ' РЕЗУЛЬТАТЫ:'
1V70 PRINT * »
1380 FOR J=l TO N1
1390 PRINT 'X(';J;') = ';X(J)
1400 NEXT J
59
1410 PRINT
1420 PRINT
1430 \
1440 STOP
1450 \
1460 \
1470 \
3000 REM •
3010 REM
3020 REM
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM
3160 REM
3170 REM
3180 REM
3190 REM
3200 REM
3210 REM
3220 REM
3230 REM
3240 REM
3250 REM
3260 REM
3270 REM
3280 REM
3290 REM
3300 REM
3310 REM
3320 REM
3330 REM
3340 REM
3350 REM
3360 REM
3370 \
3380 \
3390 REM
ЭТА ПОДПРОГРАММА
ДЛЯ РЕШЕНИЯ СИСТЕМЫ
ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ
УРАВНЕНИЙ ПРИМЕНЯЕТ
МЕТОД ХОЛЕССКОГО
С ИСПОЛЬЗОВАНИЕМ
ЧАСТИЧНОГО ВЫБОРА
ГЛАВНОГО ЭЛЕМЕНТА
ПАРАМЕТРЫ:
А - МАТРИЦА СИСТЕМЫ
РАЗМЕРОМ
l*N2 + 2)
X - ВЕКТОР РАЗМЕРОМ
(N2 + 1),
В КОТОРОМ
СОДЕРЖАТСЯ
РЕЗУЛЬТАТЫ
ПОСЛЕ ЗАВЕРШЕНИЯ
РАБОТЫ
ПОДПРОГРАММЫ
N1 - ЧИСЛО УРАВНЕНИЙ
В СИСТЕМЕ
N2 - ЧИСЛО НЕИЗВЕСТНЫХ
В СИСТЕМЕ
ВЫБОР
3400 REM ** ГЛАВНОГО ЭЛЕМЕНТА
3410 \
3420 FOR K=l ТО N1
3430 \
3440 \
3450 REM •• ПОИСК ГЛАВНОГО ЭЛЕМЕНТА
3460 \
3470 Р=А(К,К) \ L1 = K
60
3480 FOR L = K+1 TO N1
3490 IF ABS(P) > ABS(A(L,K)) THEN GO TO 3520
3500 P=A(L,K)
3510 L1 = L
3520 NEXT L
3530 IF LI = К THEN GO TO 3640
3540 \
3550 \
3560 REM •• ПЕРЕСТАНОВКА
3570 REM •• СТРОК
3580 \
3590 FOR L2 = l TO N2
3600 T=A(K,L2)
3610 A(K,L2) = A(L1,L2)
3620 A(L1,L2)=T
3630 NEXT L2
3640 NEXT К
3650 \
3660 \
3670 REM •• ВЫЧИСЛЕНИЕ ПЕРВОЙ СТРОКИ **
3680 \
3690 FOR J = 2 TO N2
3700 A(1,J)=A(1,J)/A(1,1)
3710 NEXT J
3720 \
3730 \
3740 REM •• ВЫЧИСЛЕНИЕ ОСТАЛЬНЫХ СТРОК
3750 \
3760 FOR L = 2 TO N1
3770 \
3780 \
3790 REM •• ВЫЧИСЛЕНИЕ L-ТОГО СТОЛБЦА ••
3800 \
3810 FOR I = L TO N1
3820 S = 0
3830 FOR K=l TO L-l
3840 S = S + A(I,K)*A(K,L)
3850 NEXT К
3860 A(I,L) = A(I,L)-S
3870 NEXT I
3880 \
3890 \
3900 REM •• ВЫЧИСЛЕНИЕ L-ТОИ СТРОКИ ••
3910 \
3920 FOR J = L + 1 TO N2
3930 S = 0
3940 FOR K=l TO L-l
3950 S = S+A(L,K)*A(K,J)
3960 NEXT К
3970 A(L,J) = (A(L,J)-S)/A(L,L)
3980 NEXT J
3990 NEXT L
4000 \
4010 \
4020 REM •• ПОЛУЧЕНИЕ ЗНАЧЕНИЙ X(I)
61
4030 REM •• ОБРАТНОЙ ПОДСТАНОВКОЙ
4040 \
4050 X(N1)=A(N1,N2)
4060 FOR M = l TO N1-1
4070 I = N1-M
4080 S = 0
4090 FOR J = I + 1 TO N1
4100 S = S + A(I,J)*X(J)
4110 NEXT J
4120 X(I)=A(I,N2)-S
4130 NEXT M
4140 RETURN
Результат выполнения программы следующий
РЕЗУЛЬТАТЫ:
Х(
Х(
Х(
Х(
1
2
3
4
) =
) =
) =
) =
- 5.20993
1.42622
1.6491
4.27255
I Программа в два раза быстрее, чем в методе Гаус-1
Ica-Жордана, использованного в примере 3.1. Компью-1
I тер с памятью для пользователя 48 К может с по-1
I мощью этой программы выполнять действия с система-1
I ми до 78 уравнений. I
3.5 ИТЕРАЦИОННЫЕ МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ
УРАВНЕНИЙ
Хотя с помощью прямых методов решения можно получать
достаточно эффективно, в применении к разреженным
матрицам все же более эффективны непрямые методы.
Разреженные матрицы возникают в системах, где большинство
уравнений содержит лишь небольшое число неизвестных. Для таких
систем размеры требуемой памяти для итеративного решения
на ЭВМ гораздо меньшие, чем потребовалось бы для прямого
метода. Таким образом, итерационные методы решения
представляют интерес для микро-ЭВМ как по причинам
вычислительной эффективности, так и по требованиям к памяти.
Обсудим несколько итерационных методов для систем линейных
уравнений.
Итерационные схемы для систем линейных уравнений
основаны на приведении их к виду, где каждая из п перемен-
62
ных стоит одна в левой части одного из п уравнений, т.е. к
виду
Х2 = hnxn + hn-\ хп-\ + • • • + ьглх\ + ьг&
хп = *и,лхп + Ьпп _ г хп_ г + . . . + Ьп2х2 + Ьп1 хг + irt0.
Итерационными методами, использующими этот вид,
являются метод Якоби, метод Гаусса - Зейделя и метод
последовательной верхней релаксации. Эти методы основаны на
последовательном уточнении первоначального приближения для
решения. Чем ближе первоначальное приближение к истинному
решению, тем меньшим оказывается число итераций,
требуемое для достижения решения любым из этих методов.
3.6 МЕТОД ЯКОБИ
В методе Якоби начальное приближение используют для
вычисления новых значений переменных хь . . ., хп с
помощью уравнений, приведенных выше. Если все новые
значения достаточно близки к начальным, процесс завершается.
Если же нет, новые значения замещают предыдущие и процесс
повторяют до тех пор, пока не будет достигнута сходимость,
или пока не станет ясно, что процесс не сходится. Этот метод
иногда называют методом одновременного замещения. Его
основной недостаток заключается в том, что, прежде чем
выполнить очередной шаг замещения, нужно получить полный
дублирующий массив значений решения. Это требование не
только неэффективно с точки зрения использования памяти ЭВМ,
оно к тому же замедляет сходимость к решению. По этим
причинам чаще используют два других итерационных метода.
3.7 МЕТОД ГАУССА - ЗЕЙДЕЛЯ
Медленная сходимость в методе одновременного замещения
обусловлена тем, что уточненное значение в нем не
используют, пока не пересчитаны все неизвестные (и пока
выполняется замещение). В методе Гаусса - Зейделя, известном также
как метод последовательного замещения или процедура Либ-
мана, уточнения используют по мере их получения, так что
уточнение для хг сразу применяют для вычисления х2. Новые
значения хх и х2 используют затем при вычислении х3 и так
далее. Поскольку в данном методе новая информация исполь-
63
зуется по мере ее получения, это дает существенное
увеличение скорости сходимости, а также приводит к существенному
сбережению требуемой памяти ЭВМ.
3.8 МЕТОД ПОСЛЕДОВАТЕЛЬНОЙ ВЕРХНЕЙ РЕЛАКСАЦИИ
В основе метода релаксации лежит способ последовательного
уменьшения остатка для значения каждого неизвестного.
Остаток - это разность между текущим значением неизвестного и
точным решением. Метод верхней релаксации основан на
линейной экстраполяции между двумя шагами последовательного
замещения. В этом смысле метод последовательной верхней
релаксации можно рассматривать как развитие метода
Гаусса - Зейделя. В методе верхней релаксации новыми
вычисленными значениями каждой переменной являются
гДе х/п+1)- исправленное значение переменной по методу
Гаусса - Зейделя, aw- релаксационный множитель,
удовлетворяющий условию
1 < w < 2.
Если w = 1, эта техника сводится к методу Гаусса - Зейделя.
Выбор значения w влияет на скорость сходимости. Процедура
вычисления оптимального значения и> выходит за рамки
данной книги. Полезной альтернативой к вычислению и> является
выбор его конкретного значения на интервале от 1 до 2 и
наблюдение за сходимостью.
Основной недостаток этих трех итерационных методов
заключается в том, что они не всегда дают сходимость к
решению. Можно-показать, что вероятность сходимости
повышается, если итерируемые уравнения представляются в такой
форме, чтобы для разрешения относительно каждого неизвестного
использовались доминантные слагаемые. Это означает, что
коэффициент при неизвестном у данного слагаемого наибольший
по модулю по сравнению с другими уравнениями. Процесс
выбора доминантного слагаемого для итерационного метода во
многих отношениях подобен процессу выбора ведущего
элемента в прямых методах и может потребовать некоторых
действий с уравнениями, в том числе и их перестановки. К
счастью, для многих систем уравнений, возникающих в
приложениях, характерно следующее: если матпипа коэ4к±>ициентов
разрежена, то в ней и преобладают коэффициенты на диагонали
64
ПРИМЕР
3.4
I Пусть требуется найти решение системы уравнений Г
2 10 0 0 0"
12 10 0 0
0 12 10 0
1 2 1
0 0 12
0 0 0 1
0 0 0 0
х\
Х2
хг
х4
xs
хб
=
зд
5Д
5,1
5Д
5Д
2,9
Поскольку система разрежена, для ее решения ис-1
пользуем итерационный метод. Из системы уравнений!
видно, что для нее шаги Гаусса - Зейделя имеют вид: I
хг = (3,1 - *2)/2, I
xt = (5,1 -*/_!- *,-+1)/2, / = 2, 3, . . ., 5, I
*6 = (2,9-х5)/2. I
Эти соотношения включены в программу на бейсике,!
следующую ниже. Эта программа использует начальный!
выбор xt = 1, / = 1, 2, . . ., 6 и написана так, чтобы I
адаптироваться к различным выборам и> в формуле ме-1
тода верхней релаксации. Из программы видно, что!
размеры рабочей памяти, требуемой для реализации!
итерационного процесса, грубо говоря, в два раза боль-1
ше, чем размер матрицы коэффициентов. I
1000 REM
1010 REM
1020 REM
1030 REM
1040 REM
1050 REM
1060 REM
1070 REM
1080 REM
1090 REM
1100 \
1110 \
1120 REM
ИЗО \
1140 DIM X(7),Y(7)
1150 FOR 1 = 1 ТО 6
1160 X(I) = 1
1170 NEXT I
1180 \
1190 \
1200 REM •• НАЧАЛО ИТЕРАЦИОННОГО
ЭТА ПРОГРАММА НАХОДИТ
РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ
АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
ИТЕРАЦИОННЫМ МЕТОДОМ
С ИСПОЛЬЗОВАНИЕМ
МЕТОДА ВЕРХНЕЙ
РЕЛАКСАЦИИ
УСТАНОВКА НАЧАЛЬНЫХ ЗНАЧЕНИИ
3-522
65
1210 REM ** ПРОЦЕССА
1220 \
1230 N3 = 0
1240 W=l
1250 PRINT ' НАЧАЛЬНЫЕ ЗНАЧЕНИЯ/
1260 GOSUB 1690
1270 FOR 1 = 1 TO 6
1280 Y(I) = X(I)
1290 NEXT I
1300 N3=N3+1
1310 IF N3>50 THEN GO TO 1600
1320 Xl = (3.1-X(2))/2
1330 X(l) = X(l) + W*(X1 - X(l))
1340 FOR 1 = 2 TO 5
1350 XI = (5.1 - X(I - 1) - X(I +1))/2
1360 X(I) = X(I) + W(X1-X(I))
1370 NEXT I
1380 Xl = (2.9-X(5))/2
1390 X(6) = X(6) + W(X1-X(6))
1400 FOR 1 = 1 TO 6
1410 IF ABS(Y(I)-X(I))>1.00000E-O4 THEN GO TO 1270
1420 NEXT I
1430 \
1440 \
1450 REM •• СХОДИМОСТЬ ДОСТИГНУТА
1460 REM •• ПЕЧАТЬ РЕЗУЛЬТАТОВ
1470 \
1480 PRINT 'W = ';W
1490 PRINT 'СХОДИМОСТЬ ДОСТИГНУТА'
1500 PRINT 'ПОСЛЕ ':N3;' ИТЕРАЦИЙ'
1510 PRINT 'КОНЕЧНЫЕ ЗНАЧЕНИЯ:'
1520 GOSUB 1690
1530 STOP
1540 \
1550 \
1560 REM •• НЕТ СХОДИМОСТИ
1570 REM •• ПЕЧАТЬ РЕЗУЛЬТАТОВ
1580 \
1590 PRINT 'W = ';W
1600 PRINT 'НЕТ СХОДИМОСТИ'
1610 PRINT 'ПОСЛЕ 50-ТИ ИТЕРАЦИЙ'
1620 PRINT 'КОНЕЧНЫЕ ЗНАЧЕНИЯ:'
1630 GOSUB 1690
1640 STOP
1650 \
1660 \
1670 REM •• ПОДПРОГРАММА ПЕЧАТИ ••
1680 \
1АОЛ PRT\TT ' - - - '
i.\jy\J I tVll^l X ——————
1700 FOR 1 = 1 TO 6
1710 PRINT 'X(';I;') = ';X(I)
1720 NEXT I
1730 PRINT ' '
1740 PRINT \ PRINT \ PRINT
1750 RETURN
66
Результат выполнения программы
НАЧАЛЬНЫЕ ЗНАЧЕНИЯ:
Х( 1 )= 1
Х( 2 )= 1
Х( 3 )= 1
Х( 4 )= 1
Х( 5 )= 1
Х( 6 )= 1
W= 1
СХОДИМОСТЬ ДОСТИГНУТА
ПОСЛЕ 33 ИТТЕРАЦИЙ
КОНЕЧНЫЕ ЗНАЧЕНИЯ:
Х( 1 )= .785497
Х( 2 )= 1.52892
Х( 3 )= 1.25675
Х( 4 )= 1.0575
Х( 5 )= 1.72831
Х( 6 )= .585843
I Программа требует менее 10 с для выполнения 331
I итераций. Если релаксационный множитель w изменить!
I на 1,4, программа использует только 14 итераций и вре-1
| мя выполнения уменьшится до 5 с.
3.9 РЕШЕНИЕ СИСТЕМ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
В отличие от систем линейных уравнений для систем
нелинейных уравнений прямые методы решения неизвестны, и
поэтому всегда применяют итерационные методы. В наиболее
общем случае систему нелинейных уравнений можно
представить в виде
/i(*i> хь • • •> хп) = °»
/г(*1> хь • •> хп) = °>
/п(хь хь • • •» хп) = 0,
т.е. как равенство нулю п функций fi от п неизвестных xt.
Задача состоит в том, чтобы найти решение этой системы. В
следующих разделах мы рассмотрим общепринятые методы
решения и их ограничения.
67
ЗЛО ПРОСТАЯ ИТЕРАЦИЯ
Метод простой итерации для решения нелинейных уравнений
по существу является развитием метода простой итерации для
одного уравнения. Он основан на допущении, что систему
уравнений можно привести к виду
х\ =
*з>
Х2 = 8i\x\ у ХЪ *3> • • •> хп)>
* * * *
хп = 8ПКХ1 у Х2 » Х3 » • • •» хп)-
Алгоритм решения представлен на рис. 3.1, он состоит в
следующем. Используя исходные приближения */, + из уравнений
последовательно вычисляют новые значения Xj , при этом в
каждом последующем /-м уравнении все переменные xj(j < i)
заменяют на новые значения х- , вычисленные по
предыдущим уравнениям. Значения xi сравнивают с предыдущими
Выбор начальных
значений jo^
Вычисление новых
значений а:*
Замена всех
значенийх, на
Рис. 3.1
68
значениями xi и выясняют, достаточно ли мало различие
между ними. Если каждая переменная изменилась лишь на
достаточно малую величину, счет прекращают. Если же это
изменение слишком велико, процесс повторяют, причем
значения xt используют в качестве новых исходных значений
неизвестных.
Хотя этот метод прямо ведет к решению, у него есть свои
недостатки. Например, если исходные значения переменных
слишком сильно отличаются от истинного решения, то
процесс не сойдется. Область, в которой заданные исходные
значения сходятся к решению, называют областью сходимости.
Если исходные значения лежат за пределами этой области, то
решение получить не удастся. К сожалению, с увеличением
числа уравнений и, следовательно, числа переменных в
нелинейной алгебраической системе область сходимости
уменьшается и в случае очень больших систем сходимость
обеспечивается лишь при условии, что исходные значения переменных
очень близки к истинному решению. Хотя известны методы,
позволяющие улучшить сходимость при решении подобных
задач, ничто не может заменить здравого смысла при выборе
исходных значений переменных для начала итерационной
процедуры.
3.11 МЕТОД НЬЮТОНА
Это наиболее распространенный метод решения систем
нелинейных уравнений. Его популярность обусловлена тем, что он
обеспечивает более быструю сходимость, чем метод простой
итерации. В основе метода Ньютона лежит представление всех
п уравнений в виде рядов Тейлора:
ад
д
... + Ахп + члены более высоких порядков,
ОХ
fn(Xl + Д*ь ...,хп + Ахп) =/я(*ь .... хп)+ Ахг ^ + ...
9/и
... + Ахп + члены более высоких порядкоЕ.
дхп
В тех случаях, когда приращения переменных А х( таковы,
что функция /у. принимает значение, близкое к нулю, будем
считать, что левые части этих уравнений обращаются в нули.
Таким образом, задача сводится к отысканию такой
совокупности приращений Л xiy при которой достигается указанная цель.
69
Отбросив члены более высоких порядков, сведем задачу к ре
шению системы линейных уравнений
ЭХ!
ЭХ!
Ъ1±
Эх„
Ьхп
Ах2
Ахп
=
-А
-h
Выбор начальных
Значений xi
Формиробание матрицы
частных лроизбодных
и вектора-столбца
правой части
Ре имение системы
линейных уравнений
относительно AxL
достаточно
ли малы все
Замена ёсех значений хг
новыми значениями xt +Axt
70
Рис. 3.2
в которой матрицу частных производных и вектор-столбец
правой части можно вычислить для любого приближенного
решения. Найденные значения Л xt в дальнейшем используют
как поправки к исходному приближенному решению
*i = *i + Л хь
у = у 4- Л X
Если все корректирующие приращения становятся достаточно
малыми, счет прекращают. В противном случае новые
значения xt используют как приближенные значения корней и
процесс повторяют до тех пор, пока не будет найдено решение
или не станет ясно, что получить его не удастся. Схема
соответствующего алгоритма представлена на рис. 3.2. Следует
внимательно следить за сходимостью. Если значения корней
значительно отличаются друг от друга, то условие
Д xt ^ 0,0001, где / = 1, 2, . . ., л,
может оказаться слишком завышенным для корней х(,
имеющих большие значения. В таких случаях следует пользоваться
нормированными корректирующими приращениями
L < 0,001, где / =1,2,..., /г.
Хотя метод Ньютона имеет преимущества по сравнению с
другими итерационными методами, для него также существует
проблема сходимости. Грубо говоря, чем больше уравнений,
тем уже область сходимости.
ПРИМЕР
|3.5
I Требуется решить следующую систему четырех урав-1
I нений с четырьмя неизвестными: I
*13
lx2 + x3
h 2xxx2
+ 4x4=20,700,
+ x43=15,880,
x4=21,218,
I Зх2 + х3х4=21,100. '
I Воспользуемся методом Ньютона. Для этого найдем I
I сначала частные производные всех уравнений в началь-1
I ной точке. Полученной матрицей частных произвдных I
I будем пользоваться для вычисления поправочных коэф-1
j фициентов к принятым начальным значениям х^ По-1
71
правочные коэффициенты найдем, решив систему четы-1
рех линейных уравнений с четырьмя неизвестными. I
Решить рассматриваемую задачу можно с помощью!
приведенной ниже программы для ЭВМ, в которой ис-1
пользована подпрограмма из примера 3.1, используемая!
для решения систем линейных уравнений методом иск-1
лючения Гаусса. Зададим начальные значения перемен-1
ных I
| с которых начнем итерационный процесс. I
1000 REM ****•**•*•*♦•********♦•*♦*******
1010 REM *
1020 REM * ЭТА ПРОГРАММА НАХОДИТ
1030 REM * КОРНИ СИСТЕМЫ НЕЛИНЕЙНЫХ
1040 REM * АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
1050 REM * ПРИ ПОМОЩИ МЕТОДА
1060 REM * ИТЕРАЦИЙ НЬЮТОНА
1070 REM *
1080 REM **********♦♦**♦**"***♦******•**
1090 \
1100 \
1110 DIM A(5,6),B(5,6),X(5),GS(5)
1120 N2 = 5 \ N1=4
ИЗО \
1140 \
1150 REM ** УСТАНОВКА НАЧАЛЬНЫХ ПРИБЛИЖЕНИЙ
1160 \
1170 Х(1) = 1 \ Х(2) = 1 \ Х(3) = 1 \ Х(4) = 1
1180 \
1190 \
1200 PRINT ' '
1210 PRINT ' Х(1)';ТАВ(13);'Х(2)';ТАВ(23);'Х(3)';ТАВ(33);'Х(4)'
PRINT ' — '
1230 GOSUB 300fr
1240 REM •• ИТЕРАЦИИ
1250 \
1260 FOR 11 = 1 TO 50
1270 A(l,l) = l \ A(l,2) = 2 \
1280 A(l,4)=4 \ A(2,3) = 0 \ A(3,2) = 0
1290 A(3,4) = l \ A(4,l) = 0 \ A(4,2) = 3
1300 A(2,1) = 2*X(1) + 2*X(2)
1310 A(2,2) = 2*X(1)
1320 A(2,4) = 3*X(4)"2
1330 А(3,1) = 3*Х(1)Л2
1340 A(3,3) = 2*X(3)
1350 A(4,3) = X(4) \ A(4,4) = X(3)
1360 A(l,5)= -l*X(l)-2*X(2)-X(3)-4*X(4) + 20.7
1370 A(2,5) = 15.88 - Х(1)Л2 - 2*X(1)*X(2) - Х(4)Л3
1380 A(3,5) = 21.218 - Х(1)Л3 - Х(3)л2 - X(4)
1390 A(4,5)= -3*Х(1)л2-Х(3)*Х(4) + 21.1
1400 FOR 12 = 1 TO 4
72
1410
1420
1430
1440
1450
1460
1470
1480
1490
1500
1510
1520
1530
1540
1550
1560
1570
1580
1590
2000
2010
2020
2030
2040
2050
2060
2070
2080
2090
2100
2110
2120
2130
2140
2150
2160
2170
2180
2190
2200
2210
2220
2230
2240
2250
2260
2270
2280
2290
2300
2310
2320
2330
2340
2350
IF ABS(A(I2.5))> l.OOOOOE-05 THEN GO TO 1440
NEXT 12
GO TO 1560
GOSUB 2000
\
REM •• УСТАНОВКА ЗНАЧЕНИИ Х ••
FOR 12 = 1 TO 4
X(I2) = X(I2)+A(I2,5)
NEXT 12
GOSUB 3000
NEXT II
PRINT 'НЕТ СХОДИМОСТИ-
PRINT 'ПОСЛЕ 50-ТИ '
PRINT 'ИТЕРАЦИИ.'
STOP
PRINT 'СХОДИМОСТЬ ДОСТИГНУТА'
STOP
\
\
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
\
\
REM •• ПОШАГОВОЕ ВЫПОЛНЕНИЕ
REM •• ПРОЦЕДУРЫ
ЭТА ПОДПРОГРАММА
ПРИМЕНЯЕТ К МАТРИЦЕ А
МЕТОД ИСКЛЮЧЕНИЯ
ГАУССА - ЖОРДАНА
С ИСПОЛЬЗОВАНИЕМ
ЧАСТИЧНОГО ВЫБОРА
ГЛАВНОГО ЭЛЕМЕНТА
ПАРАМЕТРЫ:
А -
В -
N1 -
N2 -
ИСХОДНАЯ
РАСШИРЕННАЯ
МАТРИЦА
РАЗМЕРОМ
(N1 + 1 * N2 + 2)
РАБОЧАЯ
МАТРИЦА
ТОГО ЖЕ
РАЗМЕРА ЧТО
И МАТРИЦА А
ЧИСЛО СТРОК
В МАТРИЦЕ А
ЧИСЛО СТОЛБЦОВ
В МАТРИЦЕ А
73
2360 \
2370 FOR K=l TO N1
2380 \
2390 \
2400 REM •• ПОИСК ГЛАВНОГО ЭЛЕМЕНТА ••
2410 \
2420 Р = А(КД) \ L1 = K
2430 FOR L = K+1 TO N1
2440 IF ABS(A(L,K))<ABS(P) THEN GO TO 2470
2450 P = A(L,K)
2460 L1 = L
2470 NEXT L
2480 \
2490 \
2500 REM •• ПЕРЕСТАНОВКА
2510 REM •• СТРОК
2520 \
2530 FOR L2 = l TO N2
2540 T=A(K,L2)
2550 A(K,L2)=A(L1,L2)
2560 A(L1,L2)=T
2570 NEXT L2
2580 \
2590 \
2600 REM •• НОРМАЛИЗАЦИЯ СТРОКИ ••
2610 \
2620 FOR J = l TO N2
2630 B(K4)=A(KJ)/P
2640 NEXT J
2650 \
2660 REM •• ВЫПОЛНЕНИЕ ШАГА
2670 REM •• ИСКЛЮЧЕНИЯ ГАУССА - ЖОР ДАН А
2680 \
2690 FOR 1 = 1 ТО N1
2700 IF 1 = К GO ТО 2740
2710 FOR J=l TO N2
2720 B(I,J)=A(U)-A(I,K)*B(KJ)
2730 NEXT J
2740 NEXT I
2750 \
2760 \
2770 REM •• ВОССТАНОВЛЕНИЕ МАТРИЦЫ
2780 REM •• А ПО МАТРИЦЕ В
2790 \
2800 FOR 1 = 1 TO N1
2810 FOR J = l TO N2
2820 A(I,J) = B(I,J)
2830 NEXT J
2840 NEXT I
2850 NEXT К
2860 RETURN
2870 \
2880 \
3000 REM ••••••••••••••••••••••
3010 REM • ЭТА ПОДПРОГРАММА
3020 REM • ВЫВОДИТ РЕЗУЛЬТАТ
3030 REM ••••••••••••••••••••••
3040 \
3050 \
3060 GOSUB 3120
3070 PRINT GS(1);TAB(11);GS(2):TAB(21):GS(3):TAB(31):GS(4)
3080 \
3090 RETURN
3100 \
3110 \
3120 REM •••••••••••••••••••••••
3130 REM • ЭТА ПОДПРОГРАММА
3140 REM • ВЫБИРАЕТ СПОСОБ
3150 REM * ЗАПИСИ ЧИСЕЛ ДЛЯ
3160 REM • БОЛЬШЕЙ НАГЛЯДНОСТИ
3170 REM •••••••••••••••••••••••
3180 \
3190 FOR 1 = 1 ТО 4
3200 IF ABS(X(I)) > .01 THEN GO TO 3240
3210 GS(I) = STRS(X(I) \ L1 = LEN(GS(I))
3220 GS(I) = SEGS(GS(I)9fcl,2) + SEGS(GS(I)%Ll -4.L1)
3230 GO TO 3260
3240 GS(I) = STRS(X(I))
3250 GS(I) = SEGS(GS(I),1,8)
3260 NEXT I
3270 RETURN
X(l)
1
2.75037
- 1.23049
- 7.901
1.69746
31.0521
20.0391
12.3722
7.27356
4.09969
2.49428
2.41461
2.20039
2.70514
2.05534
.684365
.474443
.831564
1.35677
1.4107
1.34144
1.36005
1.35547
1.35624
1.35609
X(2)
1
4.6763
12.3157
3.31064
24.5218
2.98867
- 104.144
- 62.5152
- 37.6434
- 22.0627
- 12.0632
- 5.82739
- .839485
1.97872
9.02604
12.0586
15.6602
17.9552
18.8589
18.767
18.63S4
18.6659
18.6562
18.6578
18.6575
X(3)
1
7.89579
9.89419
7.46126
- 83.1454
-40.1092
- 43.4155
- 35.1635
- 23.8468
- 14.4678
- 7.94898
- 3.8945
- 2.61343
- 1.19655
- 6.42102
-5.51212
- 4.82069
- 4.8648
-4.79111
- 4.67224
- 4.70385
- 4.69344
- 4.6953
- 4.69495
- 4.69502
X(4)
1
.175311
- 3.14879
3.62962
13.2761
5.94497
63.0912
42.1303
28.14
18.7984
12.5703
8.45866
5.698
3.80849
1.7534
.35266
- 1.56856
- 2.79431
- 3.39588
- 3.39314
- 3.30109
- 3.32461
- 3.31816
- 3.3192
-3.319
75
1.35612 18.6575 -4.695 -3.31904
1.35611 18.6575 -4.69501 -3.31903
СХОДИМОСТЬ ДОСТИГНУТА
3.12 МЕТОД ВОЗМУЩЕНИЯ ПАРАМЕТРОВ
Этот метод представляет собой алгоритм, позволяющий с
помощью итераций получить решение системы нелинейных
уравнений. Его эффективность не зависит от «удачного»
выбора начального приближения. Суть этого метода состоит в
следующем. Сначала наряду с системой уравнений
//*/) = 0, где / = 1, 2, . . ., л, / = 1, 2, . . ., п,
рассмотрим другую систему
$(*,.) = 0, где / = 1, 2, . . ., л, ;=1, 2, . . ., л,
решение которой известно. Затем, «деформируя» уравнения
gi = 0, превратим их в уравнения /. = 0 с помощью конечного
числа N последовательных малых приращений параметров
£.(*)(*.) = gfk - i)(Xi) + [fj{Xi) . gj(k - i)(X/)] (k/N)9 где
к = 1, 2, . . ., N.
Решения х/°) исходной системы уравнений gf°\xt) можно
использовать как исходные значения переменных для
итерационного решения системы g/1^-). Так как эта система мало
отличается от предыдущей, весьма вероятно, что сходимость
будет обеспечена. В процессе счета решение xfk ~ *) используют
как исходное для получения решения xfk\ В конце счета,
когда к становится равным N, решаемая система уравнений
становится эквивалентной исходной системе. Так как для
превращения системы уравнений, решение которой известно, в
решаемую систему может потребоваться большое число шагов (10
или даже 100), то применение этого метода может быть
связано с большими затратами машинного времени. Однако
положительную роль играет то обстоятельство, что при малых
значениях шагов сходимость на каждом шаге может быть
достигнута всего несколькими итерациями.
Известно, что метод возмущения параметров особенно
удобен для решения систем уравнений, встречающихся при
синтезе механических систем. При этом исходную систему
уравнений gy(°) = 0 можно получить используя любой механизм
рассматриваемого типа.
76
3.13 СООБРАЖЕНИЯ ПО ПОВОДУ ВЫБОРА АЛГОРИТМА
ДЛЯ МАЛОГО КОМПЬЮТЕРА
Хотя общие правила, которые служили бы пользователю
указанием при выборе наилучшего алгоритма для отыскания
решен я определенных систем уравнений, сформулировать
невозможно, существует все же несколько основных рекомендаций.
1. Учитывать природу задачи и ее решений. Если решаемая
система уравнений линейная, пользователю следует
убедиться, что имеется одно и только одно решение. Для
большинства систем разумных размеров лучше всего
использовать прямой метод, такой, как метод Холесского.
Этот метод гарантирует решение при условии, что
уравнении системы линейно независимы. Если система
линейных уравнений разреженная, решение может быть
найдено с помощью итеративного подхода, такого, как
метод последовательной верхней релаксации. Этот метод
предполагает, что пользователь знает нечто о решении,
поскольку свойство системы быстро сходиться к решению
сильно зависит от близости первоначального выбора к
истинному решению. Если у пользователя нет информации,
помогающей выбрать начальные значения для итераций,
наверное, лучше выбрать прямой метод.
Если решаемая система нелинейная, у нее может быть
более чем одно решение. Для большинства нелинейных
систем уравнений наилучшей техникой для
использования является метод итераций Ньютона. Недостаток
метода заключается в том, что в нем требуется найти частные
производные по переменным от функций, задающих
уравнения. Другие итерационные методы используют
только тогда, когда эти производные найти невозможно. В
случае метода итераций Ньютона сходимость к решению
зависит от того, насколько первоначальное приближение
близко к истинному решению. Область, где имеет место
сходимость, называется областью сходимости. Размер
области сходимости уменьшается с увеличением числа
уравнений. Метод возмущения параметров часто помогает
найти решение тогда, когда область сходимости
становится совсем маленькой, однако в некоторых случаях даже
этот метод не гарантирует сходимости. В таких ситуациях
пользователю остается одно: пробовать различные
начальные приближения и надеяться, что одно из них приведет
к сходящемуся решению.
2. Учитывать объем памяти компьютера и время, нужное
для выполнения сечета. Очень часто необходимое для
вычислений время вступает в противоречие с объемом
требуемой компьютерной памяти. От этого зависит, какой
метод решения системы уравнений следует выбрать на
77
малом компьютере. Например, для линейных систем
итерационные методы обычно требуют гораздо меньших
объемов памяти, чем прямые. С другой стороны, если о
решении мало что известно, достижение сходимости
итерационным методом может потребовать очень долгого
времени или же сходимость не будет получена вообще.
3. Учитывать промежуточные результаты. Хотя в процессе
вывода данных на экран дисплея или на принтер
итерационное решение может несколько замедлиться, эта
промежуточная на пути получения решения информация все
же сообщает о главном: успешен выбранный метод или
нет, сходится решение или не сходится. Для некоторых
типов задач, решаемых итерационным способом, решение
может оказаться в большей степени осциллирующим,
чем сходящимся. Это можно быстро установить
визуальным наблюдением за промежуточными итерационными
значениями. В таком случае надо применить другой
набор начальных значений или, может быть, даже
изменить способ решения.
4. Учитывать требуемую точность. Следует уделить
внимание введению критерия сходимости любого итерационного
процесса. Например, в методе итераций Ньютона лучше
всего оценивать сходимость, наблюдая за относительными
значениями поправок, сделанных к итерационным
значениям. Так, если индивидуальные значения корней -
величины очень разные по порядку, в большей степени
следует следить за нормализованной поправкой, нежели за
самой поправкой.
Глава
Задачи
на собственные
значения
Анализ некоторых типов научных и технических задач
зачастую приводит к однородным системам алгебраических
уравнений, которые имеют не единственное решение только при
определенных значениях входящего в систему параметра. Эти
специальные значения называют характеристическими или
собственными числами (значениями). Решение системы,
соответствующее каждому конкретному собственному значению,
называют собственным вектором. Задача нахождения
собственных значений возникает в самых разных случаях. Например,
при рассмотрении тензора напряжений собственные значения
задают главные нормальные напряжения, а собственные
векторы определяют ориентации, соответствующие этим
нормальным напряжениям. При анализе динамических систем
собственные значения определяют частоты колебаний, а
собственные векторы характеризуют их форму. При анализе
конструкций собственные значения используют для определения
критических нагрузок изгиба или других видов нестабильности.
Выбор наилучшего численного метода нахождения
собственных значений и собственных векторов для конкретной
задачи зависит от ряда факторов: природы уравнений, числа и
характера отыскиваемых собственных чисел. При
использовании малых компьютеров выбор численного метода зависит
также от быстродействия, точности и объема памяти
используемого устройства. Существуют, вообще говоря, две категории
алгоритмов решения задачи на собственные значения.
Итерационные методы очень просты в применении и хорошо
приспособлены для отыскания наименьших и наибольших
собственных значений. Методы преобразования чуть более сложны
в применении, зато позволяют находить все собственные
значения и собственные векторы.
79
Целью настоящей главы является обсуждение общих
методов решения задачи на собственные значения. Предварительно
полезно дать обзор основ теории матриц и векторов, на
которую эти методы опираются.
4.1 ФУНДАМЕНТАЛЬНЫЕ ПОЛОЖЕНИЯ
ЗАДАЧИ НА СОБСТВЕННЫЕ ЗНАЧЕНИЯ
Общая формулировка задачи на собственные значения имеет
вид
ЛХ= Хх,
где Л - п х л-матрица. В этом уравнении искомыми являются
п скалярных величин Лип собственных векторов X,
соответствующих каждому из этих собственных значений
Предполагая, что читатель знаком с основами матричной
алгебры и теории собственных значений, мы тем не менее,
прежде чем рассматривать численные методы решения задачи,
напомним ряд фундаментальных принципов.
Основы теории матриц
1. Матрицу Л называют симметричной, если tf/y=tfy/ (/, ;=1,
2, ..., п). Это означает симметрию относительно диагонали
акк (к=1, 2, ..., п). Приведем пример симметричной
матрицы:
\ 4 5'
4 3 7
5 7 2
2. Матрицу А называют трехдиагональной, если равны нулю
все ее элементы, за исключением тех, что расположены на
главной диагонали, а также непосредственно выше и ниже
главной диагонали. Общий вид трехдиагональной матрицы
таков:
О
* *
* *
*
Трехдиагональные матрицы имеют большое значение,
поскольку некоторые методы преобразования приводят
матрицу общего вида именно к этой специальной форме.
80
3. Матрицу А называют ортогональной, если
ATA = If
где ЛТ обозначает транспонированную матрицу, а / -
единичная матрица. Обращение ортогональной матрицы
эквивалентно ее транспонированию.
4. Две матрицы А и В называют подобными, если существует
неособая матрица Р, такая, что
Основы теории собственных значений
1. Все п собственных значений любой вещественной
симметричной лхл-матрицы вещественны. Этот факт важен, в
частности, потому, что значительную часть матриц,
порожденных инженерными задачами, составляют симметричные
матрицы.
2. Собственные векторы, отвечающие различным собственным
значениям симметричной матрицы, ортогональны. Набор
из п линейно независимых собственных векторов образует
базис в рассматриваемом пространстве. Это означает, что
если имеется линейно независимый набор собственных
векторов
*' = 1, ..., п,
то произвольный вектор Y из данного пространства может
быть разложен по этим собственным векторам:
Y= I а{Х[.
i— 1
3. Подобные матрицы имеют одинаковые собственные
значения. В самом деле, подобие матриц А и В означает
Если
то
Р-1АХ=ЛР~1Х.
Полагая Х=РУ, получим
P~lAPY=AY
и BY=AY.
Таким образом, подобные матрицы не только имеют
одинаковые собственные значения, но и их собственные
векторы связаны соотношением X=PY.
81
4. Собственный вектор матрицы, умноженной на
произвольное число, снова есть собственный вектор этой матрицы.
Все собственные векторы обычно нормируют, деля каждый
элемент собственного вектора либо на наибольший
элемент, либо на сумму квадратов элементов.
4.2 ИТЕРАЦИОННЫЕ МЕТОДЫ РЕШЕНИЯ
Возможно, наиболее очевидный метод отыскания собственных
чисел связан с записью задачи на собственные значения в
виде
(Л- Л/)Х=0.
Эта система имеет ненулевое решение только если
определитель матрицы (Л - ЛI) равен нулю. Этот определитель
представляет собой полином степени п по Jt, а корни этого
полинома являются собственными значениями. Таким образом,
любой из методов, рассмотренных в гл. 2, может быть
использован для отыскания этих корней. К сожалению, задача на
собственные значения зачастую имеет кратные корни. Поскольку
в этом случае итерационные методы гл. 2 работают плохо,
используем для определения собственных значений другие
итерационные процедуры.
Нахождение наибольшего собственного значения
методом итераций
Основной итерационный метод отыскания наибольшего по
модулю собственного значения задачи
проиллюстрирован на рис. 4.1. Процедуру начинают с
пробного нормированного вектора Х(°\ Этот вектор слева умножают
на матрицу Л, что дает вектор X. Затем вектор X
представляют в виде произведения нормированного вектора Х^1) и
константы (собственного значения). Если вектор А^1) совпадает с
вектором Х(°), процедура может быть окончена. Если не
совпадает, то новый нормированный вектор используют как
начальный вектор и процедуру повторяют. Если процесс сходится,
постоянный множитель даст правильное значение наибольшего
собственного значения, а нормированный вектор окажется
соответствующим собственным вектором. Скорость сходимости
этой итерационной процедуры зависит от выбора начального
вектора Х(0): если Х(0) выбран близким к истинному
собственному вектору, то процесс сходится быстро. Скорость
сходимости зависит также от отношения двух наибольших
собственных значений. Если это отношение близко к единице, то
сходимость медленная.
82
Выбор нормированного
собственного вектора
Х1О)
Вычисление
ах'п» = хх<п*1>
Нормирование х <"
и определение А
Достаточно ли*^. Да
мала разность >——*4 с/770/7
Рис. 4.1
Нахождение наименьшего собственного значения
методом итераций
При решении некоторых технических задач более
существенным является нахождение не наибольшего, а наименьшего
по модулю собственного значения. Наименьшее собственное
значение можно найти, домножив исходную систему на
обратную матрицу. Тогда
а-1ах=Аа~1х.
Затем, умножая обе части равенства на 1//L, получим
Возникла, очевидно, другая задача на собственные значения с
матрицей А'1 и собственными значениями 1/Л.
Наибольшему значению 1/ /L соответствует наименьшее значение Л . Тем
самым описанная выше итерационная схема в приложении к
новой системе позволяет найти наименьшее собственное
значение.
83
Нахождение промежуточных собственных значений
методом итераций
Если найдено наибольшее собственное значение, следующее
за ним наибольшее собственное значение можно найти,
заменяя исходную матрицу матрицей, заведомо имеющей те же
собственные значения, что и исходная, за исключением
наибольшего. Процедуру удаления известного наибольшего
собственного значения называют дефляцией. Для симметричной
исходной матрицы А с известным наибольшим собственным
значением Jl i и собственным вектором Х^ можно
использовать принцип ортогональности собственных векторов. Именно:
ГО при
XiTXj=l при /=/.
Образуем новую матрицу А*:
A*^A-JLlX1XlT
- и рассмотрим для А* задачу на собственные значения
А*Х(=А&.
Очевидно, что
A*Xi=AXi-SL1X1X1TXi.
Если /=1, в силу соотношения ортогональности правая часть
этого равенства обращается в
АХг - Л гХь
что, в свою очередь, равно нулю по определению собственного
значения матрицы А. Таким образом, при переходе от
матрицы А к матрице А* собственное значение Л j переходит в
нуль, а все остальные собственные значения сохраняются.
Тогда собственные значения матрицы А* суть 0, ft 2, Я з>-••> Л w a
соответствующие собственные векторы - Х^ Х2, ..., Хп. Тем
самым наибольшее собственное значение A i исключено, и к
матрице А* можно применить стандартный итерационный
метод для нахождения следующего по величине собственного
значения Л 2. После нахождения ft 2 и Х2 процедуру можно
повторить, используя новую матрицу А**у построенную по А*,
Л2 и Х2. Хотя вышеописанная процедура может показаться
весьма многообещающей, она имеет существенные недостатки.
При выполнении каждого шага все ошибки в нахождении
собственного вектора переносятся дальше, на следующий
собственный вектор, что приводит к растущей погрешности. По
этой причине использование этого метода сомнительно для
нахождения более чем трех собственных значений начиная с
наибольшего или наименьшего. Если необходимо найти боль-
84
шее число собственных значений, лучше использовать методы
преобразования подобия. Прежде чем рассматривать эти
методы, приведем пример использования метода итераций.
ПРИМЕР
4.1
I Исследуется состояние напряжения в трехмерном I
I случае (см. рисунок). Для этого элементарного блока!
I
мат
жца напряжений имеет вид
106 Н/м2.
30 • Ю6 Па
10.
5.
6.
5.
20.
4.
6.
4.
30.
10-Ю6 Па
I При использовании теории максимального напряжения I
I разрушения необходимо знать наибольшее возможное I
I напряжение. Это напряжение соответствует наибольшему I
(собственному значению матрицы напряжений. Для erol
I отыскания используем метод итераций. Следующая I
I компьютерная программа, реализующая итерационную I
I процедуру, обеспечивает проведение итераций до тех I
I пор, пока поправки к собственному значению не станут I
I меньше 0,01%. Программа использует подпрограммы I
I перемножения матриц и нормировки собственных век-1
I торов. I
1000 REM
1010 REM
1020 REM
1030 REM
1040 REM
1050 REM
1060 REM **********************
1070 \
1080 \
1090 DIM A(4,4),X(4),R(4) \ N = 3
ЭТА ПРОГРАММА НАХОДИТ
НАИБОЛЬШЕЕ СОБСТВЕННОЕ
ЗНАЧЕНИЕ ВЕЩЕСТВЕННОЙ
СИММЕТРИЧНОЙ МАТРИЦЫ
МЕТОДОМ ИТЕРАЦИЙ
85
1100 \
1110 REM ••• ЗАГРУЗКА МАТРИЦЫ •••
1120 А(1,1) = 1.00000Е + 07
ИЗО А(1,2) = 5.00000Е + 06
1140 А(1,3) = 6.00000Е + 06
1150 А(2Д) = А(1,2)
1160 А(2,2) = 2.00000Е + 07
1170 А(2,3) = 4.00000Е + 06
1180 А(3,1)=А(1,3)
1190 А(3,2)=А(2,3)
1200 А(3,3) = 3.00000Е + 07
1210 \
1220 REM ••• ВЫБОР НАЧАЛЬНОГО ЗНАЧЕНИЯ
1230 REM '•• НОРМИРОВАННОГО СОБСТВЕННОГО
1240 REM ••• ВЕКТОРА.
1250 Х(1) = 1 \ Х(2) = 0
1260 \
1270 GOSUB 3000
1280 \
1290 REM ••• ПЕЧАТЬ РЕЗУЛЬТАТОВ •••
1300 \
1310 PRINT "СОБСТВЕННОЕ ЗНАЧЕНИЕ ";Х1;" (N/M 2)"
1320 PRINT
1330 PRINT "СОБСТВЕННЫЙ ВЕКТОР"
1340 FOR 1 = 1 ТО 3
1350 PRINT "X(";I;") = ";X(I)
1360 NEXT I
1370 PRINT
1380 PRINT "ЧИСЛО ИТЕРАЦИЙ"
1390 PRINT К
1400 STOP
1410 \
1420 \
3000 REM •••••••••••• *******
3010 REM
3020 REM
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM
3160 REM
3170 REM
3180 REM
3190 REM
3200 REM
3210 REM
ЭТА ПОДПРОГРАММА
НАХОДИТ НАИБОЛЬШЕЕ
СОБСТВЕННОЕ ЗНАЧЕНИЕ
ВЕЩЕСТВЕННОЙ
СИММЕТРИЧНОЙ МАТРИЦЫ.
СООТВЕТСТВУЮЩИЙ
СОБСТВЕННЫЙ ВЕКТОР
ТАКЖЕ ВЫЧИСЛЯЕТСЯ.
ПРОЦЕСС ВЫЧИСЛЕНИЯ
ПРЕКРАЩАЕТСЯ, КОГДА
ИЗМЕНЕНИЕ
СОБСТВЕННОГО ЗНАЧЕНИЯ
ОКАЗЫВАЕТСЯ МЕНЬШЕ
0.01 % ИЛИ ПОСЛЕ
50 ИТЕРАЦИЙ.
ИСПОЛЬЗУЕТСЯ МЕТОД
ИТЕРАЦИЙ.
86
3220 REM • ПАРАМЕТРЫ:
3230 REM •
3240 REM • N
3250 REM •
3260 REM •
3270 REM •
3280 REM •
3290 REM *
3300 REM •
3310 REM •
3320 REM *
3330 REM • R
3340 REM •
3360 REM •
3370 REM •
3380 REM •
3390 REM • XI
3400 REM •
3410 REM •
3420 REM *
3430 REM *
3440 REM •
3450 REM • К
3460 REM •
3470 REM •
3480 REM *
3490 REM •
3500 REM •
3510 REM •
3520 REM *
3530 REM *
3540 REM ••••••••••••••••••••••••
3550 \
3560 X2 = 0
3570 \
3580 FOR K=l TO 50
3590 \
3600 REM ••• УМНОЖЕНИЕ МАТРИЦЫ
3610 REM ••• НА ВЕКТОР "Xм
3620 FOR J = l TO N
3630 S = 0
3640 FOR 1 = 1 TO N
3650 S = S+A(U)*X(I)
3660 NEXT I
3670 R(J) = S
3680 NEXT J
3690 \
3700 FOR Jl = l TO N
3710 X(J1) = R(J1)
3720 NEXT Jl
3730 \
3740 REM *** НОРМИРОВКА
3750 REM ••• ВЕКТОРА
3760 REM ••• ПРИ ПОМОЩИ
3770 REM ••• НАИБОЛЬШЕГО
- ЧИСЛО СТРОК И
СТОЛБЦОВ В
МАТРИЦЕ
- ИСХОДНАЯ
МАТРИЦА
РАЗМЕРОМ
(N+1.N41)
- РАБОЧАЯ
МАТРИЦА ТОГО
ЖЕ РАЗМЕРА,
ЧТО И ИАИ
- СОБСТВЕННОЕ
ЗНАЧЕНИЕ
- СОБСТВЕННЫЙ
ВЕКТОР
- ЧИСЛО
ИТЕРАЦИЙ,
ПОТРЕБОВАВШИХСЯ ДЛЯ
ТОГО, ЧТОБЫ
ДОСТИГНУТЬ
РЕШЕНИЯ.
"А"
87
3780 REM ••• ЭЛЕМЕНТА
3790 \
3800 REM • ПОИСК НАИБОЛЬШЕГО ЭЛЕМЕНТА.'
3810 ХЗ = Х(1)
3820 FOR 1 = 1 ТО N
3830 IF X(I) < ХЗ THEN GO TO 3850
3840 X3 = X(I)
3850 NEXT I
3860 \
3870 REM * НОРМИРОВКА ВЕКТОРА *
3880 FOR 1 = 1 TO N
3890 X(I) = X(I)/X3
3900 NEXT I
3910 \
3920 X1 = X3
3930 IF ABS(X2 - X1)/ABS(X1) < 1.00000E - 04 THEN GO TO 3960
3940 X2 = X1
3950 NEXT К
3960 RETURN
Результат расчета по этой программе таков:
СОБСТВЕННОЕ ЗНАЧЕНИЕ - - 3.37122Е + 07 (N/M 2)
СОБСТВЕННЫЙ ВЕКТОР
Х( 1 )= .340906
Х( 2 )= .416364
Х( 3 )= 1
ЧИСЛО ИТЕРАЦИЙ
14
Расчет по этой программе на компьютере требует
несколько секунд машинного времени. Компьютер с
памятью 48 К может реализовать эту программу для
матрицы размером 80x80. Отметим, что могут быть
исследованы матрицы и больших размеров, если
пользователь будет хранить в памяти компьютера матрицу Л в1
более рациональной форме. Это возможно, поскольку!
симметричная матрица общего вида имеет лишь!
п(п - 1)/2 назависимых элементов. Платой за такую эко-1
номию памяти станет несколько более сложная про-1
I грамма и большее время расчета. I
4.3 ВЫЧИСЛЕНИЕ СОБСТВЕННЫХ ЗНАЧЕНИЙ
МЕТОДАМИ ПРЕОБРАЗОВАНИЙ
В основе методов перобразования подобия матрицы лежит
стремление получить матрицу более простого вида, но с
прежними собственными значениями. Оптимальным упрощением
является приведение матрицы к диагональному виду; в этом
88
случае ее собственные значения просто совпадают с
диагональными элементами. К сожалению, большинство методов
преобразования не позволяют получить матрицу диагонального
вида. В общем случае мы будем удовлетворены, если матрицу
удастся преобразовать к трехдиагональной форме.
Метод Якоби
Метод Якоби предназначен для приведения матрицы к
диагональному виду путем систематического исключения внедиа-
гональных элементов. К сожалению, для приведения к чисто
диагональному виду этот процесс требует бесконечного числа
шагов, поскольку получение нуля в какой-либо матричной
позиции часто приводит к возникновению ненулевого элемента в
другой позиции, где прежде был нуль. Практически метод
Якоби можно рассматривать как итерационную процедуру,
которая в кон це концов приводит к матрице, достаточно
близкой к диагональной, и тем самым может быть прервана после
конечного числа шагов. Для вещественной симметричной
матрицы А соответствующие преобразования выполняются с
помощью ортогональных матриц, задающих вращения
плоскости. Схема вычислений проиллюстрирована на рис. 4.2 и
выполняется следующим образом. Новую матрицу Ах строят по
исходной матрице А преобразованием А1=Р1АР1Т.
Ортогональную матрицу Рг выбирают так, чтобы получить нулевой вне-
диагональный элемент у Av Затем по матрице Ах строят
матрицу А2 с помощью другой матрицы преобразования Р2>
выбранной так, чтобы другой внедиагональныи элемент матрицы
А2 был равен нулю. Процесс продолжается таким образом,
чтобы на каждом шаге наибольший по модулю
внедиагональныи элемент обращался в нуль. Процедура продолжается до
тех пор, пока наибольший по модулю внедиагональныи
элемент не окажется настолько малым по сравнению с
диагональными элементами, что его можно будет полагать равным
нулю. Матрицы преобразования для этого процесса на каждом
шаге строят следующим образом. Если aki - наибольший по
модулю элемент матрицы Ат _ 1? то матрица преобразования
Рт задается своими матричными элементами:
остальные ^у=0.
Матрица Ат отличается от Ат _ ^ только £-ми и /-ми
строками и столбцами. Чтобы элемент akfm>> оказался равным нулю,
величину в выбирают так, чтобы
tg2 e =2akfm - 1)/(акк(т- Ч - atfm ' %
89
где -^
4
Тогда ортогональная матрица Рт имеет вид
Аг-й
столбец
COS0
/-и
столбец
.sin0
. cos0
к-я строка
1-я строка
Такое преобразование изменяет лишь к-е и /-е столбцы и
строки матрицы Л, и выражения для новых элементов этих
столбцов и строк можно найти из соотношений:
aik(<m) = aki(m)= aifim " 1} cos e + aifm ' !) sin 6 при
.f>n) =
.f
= - а.к(т- l) sin э
а.к
C0S2
- 1) cos е при /^Л,/:
1) cos 0 sin в + Л//(т - 1) sin2^ .
sin2 9 - 2akfm "!) cos 8 sin 0 + a,/m -!) cos2 6 ;
. a^(m - l))cos g sin 0 + а^т - 1)(COS2 9 - sin2 6 ).
Величины cos 0 и sin 9 можно найти из соотношений
x/y
sien = *—r .
(x/y)
Тогда
cosO = *
sin в = sign -
Обозначив Pf последнюю в процессе матрицу вращения,
получим
(Pf...P2P{) A0(PlTP2T...PfT )=диагональная матрица.
90
Взять [R]=[I]
Найти максимальный
по модулю Знедиагональныи
элемент матрицы [А]
Достаточно
ли мал этот элемент?*
Прео5разо$ать матрицу [А]
так, чтобы обратить этот
элемент 6 нуль
Преобразовать матрицу [Я]
Рис. 4.2
Собственные векторы матрицы Ао суть столбцы матрицы R/.
Если требуется найти собственные векторы, то на каждой
стадии процесса, домножая на матрицу /у, будем получать Rt.
Исходная матрица Яг совпадает с единичной. Таким образом,
у матрицы R меняются только k-й и 1-й столбцы:
- «sin e + rtfm - «cos e.
Прежде чем рассматривать другие методы преобразования,
приведем пример использования метода Якоби.
91
ПРИМЕР
4.2
I Предположим, что нужно найти все собственные зна-1
I чения в случае, рассмотренном в примере 4.1. Пусть)
I требуется также найти собственные векторы, соответству-'
I ющие этим собственным значениям. Такая необходи-
I мость может возникнуть при использовании какой-либо I
I теории разрушения, отличной от теории максимального j
I напряжения разрушения. Поскольку необходимо найти'
I все собственные значения, используем метод Якоби.
I Программа на языке бейсик, решающая эту задачу,
I приведена ниже. Она содержит подпрограмму, реализую-
I щую метод Якоби.
1000 REM
1010 REM
1020 REM
1030 REM
1040 REM
1050 REM
1060 REM
1070 \
1080 \
1090 DIM A(4,4),R(4,4)
1100 DIM GS(4),F(4)
1110 N = 3
1120 \
11W K_« __ »
IIJ\J bj- ——————
1140 M
ЭТА ПРОГРАММА
ВЫЧИСЛЯЕТ СОБСТВЕННЫЕ
ЧИСЛА ВЕЩЕСТВЕННОЙ
СИММЕТРИЧНОЙ МАТРИЦЫ
МЕТОДОМ ЯКОБИ
1150 A(1,1) = 1.00000E + 07
1160 A(l,2) = 5.00000E + 06
1170 A(l,3) = 6.00000E + 06
1180 А(2Д)=А(1,2)
1190 A(2,2) = 2.0OOO0E + 07
1200 A(2,3)=4.00000E + 06
1210 A(3,1) = A(1,3)
1220 A(3,2) = A(2,3)
1230 A(3,3) = 3.0OOOOE + 07
1240 \
1250 REM •• ЕДИНИЧНАЯ МАТРИЦА R
1260 FOR J = l TO 3
1270 FOR 1 = 1 TO 3
1280 R(I,J) = 0
1290 NEXT I
1300 NEXT J
1310 R(l,l) = l \ R(2,2) = l \ R(3,3) = l
1320 \
1330 PRINT "ДО ИТЕРАЦИИ"
1340 GOSUB 5000
1350 PRINT \ PRINT \ PRINT
1360 GOSUB 3000
92
ЭТА ПОДПРОГРАММА ДИАГОЫАЛИ-
ЗУЕТ СИММЕТРИЧНУЮ МАТРИЦУ
МЕТОДОМ ЯКОБИ.
В РЕЗУЛЬТАТЕ ПОЛУЧАЕМ ВСЕ
СОБСТВЕННЫЕ ЧИСЛА И
СОБСТВЕННЫЕ ВЕКТОРЫ МАТРИЦЫ.
ПРОЦЕДУРА ПРЕКРАЩАЕТСЯ КОГДА
НАИБОЛЬШИЙ ВНЕДИАГОНАЛЬНЫЙ
ЭЛЕМЕНТ СТАНЕТ МЕНЬШЕ 0.0001
ОТ СРЕДНЕГО ДИАГОНАЛЬНОГО
ЭЛЕМЕНТА
ПАРАМЕТРЫ:
N
1370 PRINT "ПОСЛЕ ИТЕРАЦИИ"
1380 GOSUB 5000
1390 STOP
1400 \
1410 \
3000 REM
ЗОЮ REM
3020 REM
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3130 REM
3140 REM
3150 REM
3160 REM
3170 REM
3180 REM
3220 REM
3230 REM
3240 REM
3250 REM
3260 REM
3270 REM
3280 REM
3290 REM
3300 REM
3350 REM
3360 REM
3370 REM
3380 REM
3390 REM
3400 REM
3440 REM
3450 REM
3460 REM
3470 REM
3480 REM
3490 REM
3500 REM
3530 \
3540 \
3550 REM
3560 REM
3570 \
3580 A1=ABS(A(1,2)) \ Rl =
3590 FOR R=l TON-1
3600 FOR C = R+1 TO N
3610 IF ABS(A(R,C))< =A1 GO TO 3630
3620 R1 = R \ C1 = C \ A1=ABS(A(R,C))
3630 NEXT С
3640 NEXT R
R
- ЧИСЛО СТРОК И
СТОЛБЦОВ МАТРИЦЫ
- ИСХОДНАЯ МАТРИЦА
РАЗМЕРНОСТИ (N + 1,N + 1)
- РАБОЧИЙ МАССИВ ТОЙ ЖЕ
РАЗМЕРНОСТИ, ЧТО И "А"
В НАЧАЛЕ ЭТО ЕДИНИЧНАЯ
МАТРИЦА
В ИТОГЕ СОБСТВЕННЫЕ ЧИСЛА
СУТЬ ДИАГОНАЛЬНЫЕ ЭЛЕМЕНТЫ
МАТРИЦЫ "А", А СОБСТВЕННЫЕ
ВЕКТОРЫ СУТЬ СТОЛБЦЫ
МАТРИЦЫ пК\
ПОИСК НАИБОЛЬШЕГО
ВНЕДИАГОНАЛЬНОГО ЭЛЕМЕНТА
\ С1 = 2
93
3650 \
3660 \
3670 REM ••• НАХОЖДНЕНИЕ СРЕДЕГО
3680 REM ••• ДИАГОНАЛЬНЫХ ЭЛЕМЕНТОВ
3700 \
3710 Sl = 0
3720 FOR 1 = 1 ТО N
3730 S1 = S1+ABS(A(I,I))
3740 NEXT I
3750 A2 = S1/N
3760 \
3770 \
3780 \
3790 IF AK1.00000E-WA2 THEN 4280
3800 \
3810 \
3820 REM ••• ПРЕОБРАЗОВАНИЕ МАТРИЦЫ
3860 \
3880 \
3890 X = 2*A(R1,C1)
3900 Y=A(R1,R1)-A(C1,C1)
3910 S2 = (X/Y)/ABS(X/Y)
3920 Z=SQR(X*X+Y*Y)
3930 C = SQR((Z+Y)/(2*Z))
3940 S = S2*SQR((Z - Y)/(2*Z))
3950 \
3960 \
3970 REM ••• ВЫЧИСЛЕНИЕ НОВЫХ МАТРИЧНЫХ ЭЛЕМЕНТОВ
3990 \
4000 FOR 1 = 1 ТО N
4010 IF I = R1 GO TO 4080
4020 IF I = C1 GO TO 4080
4030 B=A(I,R1)*C+A(I,C1)*S
4040 A(I,C1)= -A(I,R1)*S+A(I,C1)*C
4050 A(C1,I)=A(I,C1)
4060 A(I,R1) = B
4070 A(R1,I) = B
4080 NEXT I
4090 B=A(R1,R1)*C*C + 2*A(R1,C1)*C*S+A(C1,C1)*S'S
4100 Z= (A(C1,C1) - A(R1,R1))*C*S+A(R1,C1)*(C*C - S'S)
4110 A(C1,C1)=A(R1,R1)*S*S - 2*A(R1,C1)*C*S + A(C1,C1)*C*C
4120 A(R1,R1) = B
4130 A(R1,C1) = Z \ A(C1,R1) = Z
4140 \
4150 \
4160 REM ••• R-МАТРИЦА СОБСТВЕННЫХ
4170 REM ••• ВЕКТОРОВ
4190 \
4200 FOR 1 = 1 TO N
4210 B = R(I,R1)*C + R(I,C1)*S
4220 R(I,C1)= -R(I,R1)*S2 + R(I,C1)*C
4230 R(I,R1) = B
4240 NEXT I
4250 \
4260 \
4270 GO TO 3000
4280 RETURN
4290 \
4300 \
5000 REM ••••••••••••••••••••••••••••••••••••••
5010 REM * ЭТА ПОДПРОГРАММА ВЫВОДИТ РЕЗУЛЬТАТ
5020 REM ••••••••••••••••••••••••••••••••••••••
5040 \
5050 REM ••• ПЕЧАТЬ ДВУХ МАТРИЦ А И R ***
5070 \ /
5080 PRINT MS
5090 PRINT
5100 PRINT и МАТРИЦА А "
5110 PRINT
5120 FOR J = l TO 3
5130 FOR 1 = 1 TO 3
5140 F(I)=A(J,I)
5150 NEXT I
5160 GOSUB 6000
5170 PRINT G$(1);TAB(15);GS(2);TAB(29);GS(3)
5180 NEXT J
5190 PRINT MS
5200 PRINT
5210 PRINT н МАТРИЦА R "
5220 PRINT
5230 FOR J=l TO N
5240 FOR 1 = 1 TO 3
5250 F(1) = R(J,I)
5260 NEXT I
5270 GOSUB 6000
5280 PRINT G$(1);TAB(14);GS(2);TAB(29);GS(3)
5290 NEXT J
5300 PRINT MS
5310 RETURN
5320 \
5330 \
6000 REM •••••••••••••••••••••••••••••••••••••••
6010 REM * ЭТА ПОДПРОГРАММА СЛУЖИТ ДЛЯ
6020 REM * КОММЕНТАРИЕВ ПРИ ПЕЧАТИ
6030 REM •• ********************************
6060 \
6070 \
6080 FOR 1 = 1 ТО N
6090 IF ABS(F(I)) > .01 THEN GO TO 6130
6100 G$(I) = STR$(F(I)) \ L1 = LEN(GS(I))
6110 G$(I) = SEG$(GS(I),1,2) + SEG$(GS(I),L1 -4ДЛ)
6120 GO TO 3260
6130 GS(I) = STR$(F(I))
6140 GS(I) = SEGS(G$(I),1,8)
6150 NEXT I
6160 RETURN
Результат расчета по этой программе таков:
95
ДО ИТЕРАЦИЙ
МАТРИЦА
1.00000Е
5.00000Е
6.00000Е
МАТРИЦА
1 0
0 1
0 0
А
5.00000Е
2.00000Е
4.00000Е
R
0
0
1
ПОСЛЕ ИТЕРАЦИЙ
МАТРИЦА
33709178.5
- .78963872
555.004529
МАТРИЦА
- .30017268
- .36643156
- .88069533
А
- .78963872
19149061.2
1.88710195
R
.196732957
.879640306
- .43304627
6.00000Е
4.00000Е
З.ОООООЕ
555.004529
1.88710195
714176 - .31
.933376937
- .30325045
- .19195482
В результате собственные значения суть
диагональные элементы матрицы Д а собственные векторы -
столбцы матрицы R. Расчет по этой программе на
компьютере требует менее 10 с машинного времени.
Компьютер с памятью 48 К может реализовать эту
программу для матрицы размером 50x50. Как отмечалось в1
примере 4.1, можно исследовать матрицы и больших]
размеров, если хранить матрицу Л в памяти компьюте-'
ра в более рациональном виде. Возможности этой
программы возрастают также в случае, когда не ставится!
задача найти собственные векторы. Программа содержит!
две специальные подпрограммы, позволяющие сформа-1
I тировать ответ в удобном для пользователя виде. I
Метод Гивена для симметричных матриц
Метод Гивена основан на преобразовании подобия того же
типа, что и метод Якоби. Однако схема метода Гивена
сохраняет полученный однажды нулевой элемент при всех
последующих преобразованиях. По этой причине метод подразумевает
лишь конечное число преобразований и, таким образом, требу-
96
ет меньше машинного времени, чем метод Якоби.
Единственным недостатком метода является то, что он приводит
симметричную матрицу не к диагональной, а к трехдиагональной
форме. Позднее, однако, мы убедимся, что трехдиагональная
форма достаточно удобна.
Для обработки яхп-матрицы методом Гивена требуется
сделать п - 2 главных шага. Каждый из этих главных шагов
может содержать несколько преобразований - в зависимости от
числа нулей, которые следует получить в данном столбце или
строке. На к-м шаге к нулю приводятся внетрехдиагональные
элементы к-й строки и к-то столбца; при этом нули,
полученные на предыдущих к - 1 шагах, сохраняются. Таким образом,
перед к-м шагом преобразованная матрица является
трехдиагональной в своих первых к - 1 строках и столбцах. Например,
последовательность преобразованных матриц для
симметричной системы 5x5 имеет вид
* * О О О
* * * о О
О***о
оо***
0 0 0**
(изначальная матрица),
(после первого главного шага,
состоящего из трех отдельных
преобразований),
(после второго шага, состоящего
из двух отдельных
преобразований) ,
(после третьего шага, состоящего
из одного преобразования; теперь
матрица имеет трехдиагональную
форму)
На каждом главном шаге меняются только элементы aVp
расположенные в заштрихованной области в нижнем правом углу
матрицы. Таким образом, на к-м шаге мы рассматриваем
матрицу порядка (п - к+1) в нижнем правом углу предыдущей
4-522
97
матрицы. Ясно, что по ходу выполнения схемы число
преобразований на каждом последующем шаге уменьшается. Полное
число преобразований, необходимых для приведения
симметричной матрицы к трехдиагональной форме, равно
(2 2)/2
( )/
Приведенный обзор метода Гивена наводит на мысль
получить метод, который давал бы возможность одновременно
обращать в нуль все внетрехдиагоналд>ные элементы целой
строки или столбца. Такой метод был разработан Хаусхолдером.
Метод Хаусхолдера для симметричных матриц
Поскольку метод Хаусхолдера одновременно обращает в
нуль внетрехдиагональные элементы целой строки или
столбца, он требует для приведения матрицы к трехдиагональной
форме примерно в два раза меньше вычислений. Несмотря на
более сложные преобразования, метод Хаусхолдера требует
меньше времени, чем метод Гивена, из-за сокращения числа
преобразований. Это преиущество, в частности, очевидно для
больших матриц. Хотя в методе Хаусхолдера вместо плоских
вращений используются эрмитовы ортогональные матрицы
преобразования, полученная этим методом трехдиагональная
матрица имеет те же собственные числа, что и
трехдиагональная матрица, полученная методом Гивена. Преобразования,
используемые на каждом из л-2 главных шагов метода
Хаусхолдера, таковы:
лк=ркАк-1РкТ> *=1> •••> п~2>
где А0=Л. Все матрицы преобразования имеют вид
где uik=0y /=1,2, ..., *,
Щк^Чь /=*+2, ..., л,
Здесь
Sk=[ £ п^х1г
и 2Kk2=Sk2+akMlSk.
Выбор знака в этих уравнениях определяется знаком
при этом величина uk+lk максимальна. Отметим, что методы
Гивена и Хаусхолдера можно применять и к несимметричным
матрицам. В результате получим не трехдиагональную
матрицу, а матрицу специального вида, называемого формой Гессен-
берга. Матрица в форме Гессенберга является почти
треугольной.
98
Если матрица имеет вид
*
*
*
*
*
*
cet
*
*
*
*
*
*
*
*
*
*
*
чбер
*
*
*
*
*
*
0
*
*
*
*
*
>говс
0
*
*
*
*
*
0
0
*
*
*
*
т.
0
0
*
*
*
*
0
0
0
*
*
*
Если
0
0
0
*
*
*
0
0
0
0
*
*
IN
0
0
0
0
*
*
ее называют верхне-гессенберговой.
Эти две специальные формы чрезвычайно полезны в
качестве промежуточной ступени в процессе отыскания всех
собственных векторов матрицы общего вида. Методы Гивена и Ха-
усхолдера не являются единственными способами приведения
матрицы общего вида к форме Гессенберга. Прямой метод
такого приведения для матрицы общего вида мы рассмотрим в
разделе 4.5, а сейчас завершим обсуждение способов отыскания
собственных чисел симметричной трехдиагональной матрицы.
4.4 НАХОЖДЕНИЕ СОБСТВЕННЫХ ЧИСЕЛ
СИММЕТРИЧНОЙ ТРЕХДИАГОНАЛЬНОЙ МАТРИЦЫ
После приведения симметричной матрицы к трехдиагональной
форме методом Гивена или Хаусхолдера следует найти ее
собственные значения. Чтобы убедиться в пользе перехода к
трехдиагональной форме, запишем задачу на собственные
значения в виде
где А - симметричная трехдиагональная матрица.
Соответствующая система выглядит следующим образом:
ах - X
а2 - X О
=0
- X
99
Разлагая п х n-определитель, перейдем к системе из п подопре-
делителей размерности (п - 1) х (п - 1) каждый. Каждый из этих
подопределителей породит в свою очередь п - 1 определитель
размерности (п - 2) х (п - 2). Трехдиагональная форма матрицы
Л приводит к тому, что на каждом шаге только два
возникающих подопределителя отличны от нуля. Таким образом,
исходный определитель может быть выражен через
последовательность полиномов:
Полагая
1(О 1,
получим для г=2, ..., п последовательность полиномов,
известную как последовательность Штурма. Одно из свойств таких
последовательностей заключается в том, что корни полинома
fj{JL) перемежают корни полинома /}+i(/l). Тем самым, если
п(л)=а\ - Л. =0> т0 можно заведомо сказать, что число JL=ax
разделяет два корня полинома /2О?-)= (а2"" Л. )(а1~Л-) " *22- Эта
информация о расположении корней /зСЛ.) сильно упрощает
процедуру итерационного отыскания этих корней. В самом
деле, зная интервал, в котором расположены корни полинома,
можно для их отыскания использовать технику деления
пополам. По ходу процесса последовательно приходим к решению
последнего уравнения /п(Л)=0, которое дает п собственных
значений. Этот процесс можно проиллюстрировать, располагая
корни последовательности полиномов следующим образом:
Корень
многочлена f; (л)
Корни
многочлена f2 (л) ( |
i i
i i
Корни I I
многочлена f5(X)
-•-
Корни
многочлена fn ,(к) \ \ i I i i
ii • i i '
ill i i I
K°PHU ф'о1 о' о1 с.1»1
многочлена fn (X)
Другое свойство последовательности Штурма заключается в
том, что для любого Ьу такого, что /п(Ь)^0, число собственных
100
значений матрицы А, больших, чем Ъ, равно числу перемен
знака в последовательности
Обозначив V(b) это число перемен знака, получим, что число
собственных значений, расположенных между двумя
вещественными числами Ъ и с, равно V(b) - V(c).
4.5 НЕПОСРЕДСТВЕННОЕ ПРИВЕДЕНИЕ МАТРИЦЫ А
К ФОРМЕ ГЕССЕНБЕРГА
В процессе преобразования матрицы общего вида к форме
Гессенберга мы ищем матрицу преобразования N такую, что
где А - исходная матрица, а Я - верхне-гессенбергова матрица.
Умножая это выражение на матрицу N, получим
AN=NH.
При выборе матрицы N в специальной нижне-треугольной
форме матричное уравнение приобретает вид:
*
А
* * *
Не * * * *
* * * * *
*****
*****
1
О 1
о *
о *
о
1
* 1
* *
N
1
О 1
О * 1
0**1
0***
я
* * * *
* * * *
* * *
Аккуратный анализ этих матриц показывает, что требуется
найти п* неизвестных. Из них (я2+Зп-2)/2 являются
матричными элементами матрицы Я, а остальные (я2-Зя + 2)/2 суть
матричные элементы матрицы N. Эти неизвестные можно
найти приравнивая элементы обеих сторон уравнения. Такой
процесс можно реализовать с помощью методов исключения,
рассмотренных в гл. 3. Предлагаемая ниже техника была
предложена Уилкинсоном и подразумевает следующие этапы:
Этап 1
Вычисление для всех / от 1 до г величин
п /- 1
К к+ 1
2
к —2
nikhr
101
Для экономии объема памяти величины hir можно записывать
на место air.
Этап 2
Вычисление для всех / от г+1 до п величин
temnf =air + 2 aiknkr - S nikhkr.
k=r+i k=2
Затем следует выделить из величин temp,- максимальную по
модулю и зафиксировать ее номер /=/iarge.
Этап 3
Перемена местами строк с номерами г+1 и /Iarge (включая
величины ад и temp,) и последующая перемена местами
столбцов с номерами г+1 и /iarge. Целью этих перестановок
является перемещение наибольшего осевого элемента на
позицию Лг+1г перед переходом к следующему этапу. Смысл этой
процедуры (как и для системы алгебраических уравнений в
гл. 3) в том, чтобы обеспечить максимальную точность и быть
застрахованным от использования нулевых элементов. Можно
показать, что при перестановке двух строк собственные
значения матрицы не изменяются лишь в том случае, когда
соответствующие столбцы тоже переставляются.
Этап 4
Запись величины tempr+1 на место ar+lr. Это и станет
осевым элементом.
Этап 5
Вычисление для всех / от г+2 до п величины
и запись ее на место air. Таким образом, мы видим, что две
матрицы N и Н можно хранить в памяти компьютера на
месте исходной матрицы А, если сдвинуть матрицу N на один
столбец влево и помнить, что первый столбец матрицы N
почти весь состоит из нулей, а все диагональные элементы
матрицы N равны единице.
Приведенная выше схема исключения является удобным
методом приведения матрицы общего вида к форме Гессен-
берга. В примере 4.3 мы приведем подпрограмму,
реализующую эту процедуру, но сначала рассмотрим, как форма Гес-
сенберга позволяет находить собственные числа.
102
4.6 ДРУГИЕ МЕТОДЫ ВЫЧИСЛЕНИЯ СОБСТВЕННЫХ ЗНАЧЕНИЙ
В этом разделе мы обсуждаем два важных метода отыскания
собственных значений. Оба эти метода развивались на
протяжении последних 20 лет и представляют собой наиболее
эффективные методы численного решения задачи отыскания
всех собственных значений вещественной или комплексной
матрицы общего вида. Оба метода используют преобразования,
приводящие к последовательности подобных матриц,
сходящейся к матрице блочно-треугольного вида:
* *
* *
Здесь блоки Хт суть 2х2-матрицы на диагонали. Собственные
числа блоков Х^ совпадают с собственными числами исходной
п х /i-матрицы. Такая форма удобна, поскольку определители
второго порядка блоков Хт позволяют найти комплексные
собственные числа без использования комплексных элементов в
финальной матрице. Если все собственные числа исходной
матрицы вещественны, то финальная матрица имеет чисто
диагональную форму с искомыми собственными числами на
диагонали.
LR-метод
Так называемый LR-метод впервые был предложен Рутис-
хаузером в 1958 г. Этот метод основан на представлении
матрицы А в виде
где L - нижне-треугольная, a R - верхне-треугольная матрицы.
Используя преобразование подобия Ь'^АЦ получаем
A2=L~ lAL=L~ \LR) L=RL.
Отсюда
В ходе повторения процедуры Ls ^ремится к единичной мат-
103
рице /, a Rs стремится к As, которая, в свою очередь,
стремится к матрице блочно-диагонального вида. Этот метод прост
в применении, однако он может оказаться неустойчивым. По
этой причине чаще используют метод, обсуждаемый ниже.
QR-метод
Так называемый Qff-метод впервые был предложен
Фрэнсисом в 1961 г.; <2/?-алгоритм определяется соотношением
где Qm - ортогональная матрица, a Rm - верхне-треугольная
матрица. Процесс развивается следующим образом:
В пределе последовательность матриц А стремится к блочно-
диагональной матрице. Этот метод более сложен в
применении и требует больше машинного времени, чем L^-метод.
Тем не менее устойчивость, связанная с использованием
ортогональных матриц преобразования, делает Q/^-метод лучшим
из общих методов решения задачи на собственные значения.
Как впервые показал Фрэнсис, ускорение сходимости QR-
алгоритма может быть достигнуто сдвигом:
Здесь Qm - ортогональная матрица преобразования, Rm -
верхне-треугольная матрица, а кт - сдвиг. Можно показать, что
если исходная матрица Лх имеет верхне-гессенбергову форму, то
необходимый объем вычислений значительно уменьшается.
Поскольку матрица А общего вида с вещественными
коэффициентами может иметь комплексные собственные значения,
использование (^-процедуры может вызвать затруднения при
работе на малых компьютерах, так как они в основном не
приспо соблены для работы с комплексными числами. Эту
трудность можно преодолеть используя двухступенчатую
процедуру сдвига на кт1 и £т+1/, где кт и £т+1-либо два
вещественных числа, либо пара комплексно-сопряженных чисел.
Фрэнсис предложил очень хороший метод, позволяющий
избежать использования комплексной арифметики. Приведем
пример использования этой техники в рамках (XR-алгоритма.
ПРИМЕР I
I Пусть нужно найти все собственные значения раз- I
I мерности 6x6: I
104
2.3
1.4
2.5
3.8
2.4
1.8
4.3
2.4
6.5
5.7
5.4
1.7
5.6
5.7
4.2
2.9
3.7
3.9
3.2
8.4
7.1
1.6
6.2
4.6
1.4
3.4
4.7
2.5
3.9
5.7
2.2
5.2
9.3
7.9
1.8
5.9
I
I Найдем эти собственные значения с помощью двух-1
I ступенчатой процедуры, используя прямые методы раз-1
I дела 4.5 для приведения матрицы к верхне-гессенберго-1
I вой форме, а затем пользуясь Q^-алгоритмом для оты-1
I екания всех собственных чисел. I
I Приведенная ниже программа на языке бейсик реа-1
I лизует эту процедуру. Подпрограмма, начинающаяся со I
I строки 3000, осуществляет приведение матрицы к форме I
I Гессенберга, а подпрограмма, начинающаяся со строки I
15000, реализует (?Д-алгоритм. Эта подпрограмма была I
I переделана из алгоритма на языке алгол, предложенного I
I Мартином, Петерсом и Уилкинсоном. Поскольку под-1
I программа использует двухступенчатые (ХЯ-шаги, комп-1
I лексные собственные числа могут быть найдены без ис-1
I пользования комплексной арифметики. I
1000 REM *******♦♦***♦♦*♦**♦**♦*******♦♦***♦*♦♦♦****♦♦♦♦♦***♦
1010 REM * ЭТА ПРОГРАММА НАХОДИТ СОБСТВЕННЫЕ ЧИСЛА
МАТРИЦЫ *
1020 REM * ОБЩЕГО ВИДА ПРИВЕДЕНИЕМ К ГЕССЕНБЕРГОВОЙ
ФОРМЕ *
1030 REM * С ПОСЛЕДУЮЩИМ ПРИМЕНЕНИЕМ QR-АЛГОРИТМА
1040 REM ***************************************
1090 \
1110 DIM A(7,7),G$(7),F(7)
1120 DIM R1(7),R2(7) \ N=6
ИЗО \
1140 DATA 2.3,4.3,5.6,3.2,1.4,2.2
1150 DATA 1.4,2.4,5.7,8.4,3.4,5.2
1160 DATA 2.5,6.5,4.2,7.1,4.9,9.3
1170 DATA 3.8,5.7,2.9,1.6,2.5,7.9
1180 DATA 2.4,5.4,3.7,6.2,3.9,1.8
1190 DATA 1.8,1.7,3.9,4.6,5.7,5.9
1200 DATA 1,0,0,0,0,0
1210 \
1220 FOR 1 = 1 TO 6
1230 READ А(1,1)Л(1,2)Л(1,3)Д(1,4)А(и)А(1,6)
1240 NEXT I
1250 READ А(1,0)Д(2,0)Л(3,0)Л(4,0)Д(5,0)Л(6,0)
1260 \
105
1270 PRINT \ PRINT \ PRINT
1280 PRINT "ИСХОДНАЯ МАТРИЦА"
1290 GOSUB 7000
1300 GOSUB 3000
1310 PRINT \ PRINT \ PRINT
1320 PRINT "ВЕРХНЯЯ ГЕССЕНБЕРГОВА ФОРМА" \ GOSUB 7000
1330 GOSUB 5000
1340 PRINT \ PRINT \ PRINT
1350 PRINT "СОБСТВЕННЫЕ ЧИСЛА"
1370 M$ = M$ + M$+M$
1380 PRINT M$
1390 PRINT "ВЕЩЕСТВЕННАЯ ЧАСТЬ";" МНИМАЯ ЧАСТЬ"
1400 PRINT M$
1410 FOR 1=1 ТО N
1420 PRINT R1(I),R2(I)
1430 NEXT I
1440 PRINT M$
1445 CLOSE
1450 STOP
1460 \
1470 \
3000 REM ••••••••••••••••••••••••••••••••••••••••
3010 REM • ЭТА ПОДПРОГРАММА ПРИВОДИТ МАТРИЦУ ОБЩЕГО
ВИДА •
3020 REM • К ГЕССЕНБЕРГОВОЙ ФОРМЕ С ИСПОЛЬЗОВАНИЕМ
ПЕРЕСТАНОВОК ДЛЯ МИНИМИЗАЦИИ ОШИБКИ
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM •
3130 REM ••••••••••••••>
3260 \
3270 \
3280 \
3290 FOR R=l TO N
3300 FOR 1 = 1 ТО R
3310 SI=0
3320 IF R+1>N THEN
3330 FOR K=R+1 TO N
ПАРАМЕТРЫ:
A - ИСХОДНАЯ МАТРИЦА РАЗМЕРНОСТИ
(N+l,N+l),nPH ВОЗВРАТЕ СОДЕРЖАЩАЯ
ВЕРХНЮЮ ГЕССЕНБЕРГОВУ ФОРМУ.
N - ПОРЯДОК МАТРИЦЫ.
GO TO 3360
3340 S1 = S1+A(I,K)*A(K,R-1)
3350 NEXT К
3360 IF 2>I-1 THEN GO TO 3400
3370 FOR K=2 TO 1-1
3380 SI = SI - A(I,K - 1)*A(K,R)
3390 NEXT К
3400 A(I,R) = S1+A(I,R)
3410 NEXT I
3420 \
3430 \
3440 IF R+1>N THEN GO TO 3570
3450 FOR I = R+1 TO N
3460 Sl = 0
3470 IF R+1>N THEN GO TO 3510
3480 FOR K=R+1 TO N
3490 S1=S1+A(I,K)*A(K,R-1)
3500 NEXT К
3510 IF 2>R THEN GO TO 3550
3520 FOR K=2 TO R
3530 SI=SI - A(I,K - 1)»A(K,R)
3540 NEXT К
3550 A(0,I) = Sl+A(I,R)
3560 NEXT I
3570 \
3580 \
3590 REM •*• НАЙТИ ГЛАВНЫЙ
3600 REM **• ЭЛЕМЕНТ А(0,1)
3620 \
3630 IF R+1>N THEN GO TO 3950
3640 A3=ABS(A(0,R+l)) \ R3 = R1 + 1
3650 FOR I = R+1 TO N
3660 IF ABS(A(0,I))<A3 THEN GO TO 3680
3670 A3=ABS(A(0,I)) \ R3 = I
3680 NEXT I
3690 \
3700 \
3710 REM ••• КОГДА R3 = R+1 ПРОПУСТИТЬ
3720 REM ••* ПЕРЕСТАНОВКУ
3730 \
3740 IF R3 = R+1 THEN GO TO 3950
3750 \
3760 \
3770 REM ••• ПЕРЕСТАНОВКА
3780 REM •** СТОЛБЦОВ R+l И R3
3790 \
3800 FOR 1=0 TO N
3810 T3=A(I,R+1)
3820 A(I,R+1)=A(I,R3)
107
3830 A(I,R3)=T3
3840 NEXT I
3850 \
3860 \
3870 REM ••• ПЕРЕСТАНОВКА
3880 REM ••• СТРОК R+l И R3 ***
3890 FOR 1=1 TO N
3900 T3=A(R+1,I)
3910 A(R+1,I)=A(R3,I)
3920 A(R3,I)=T3
3930 NEXT I
3940 \
3950 A(R+l,R)=A(0,R+l)
3960 \
3970 IF R+2>N THEN GO TO 4010
3980 FOR I = R+2 TO N
3990 A(I,R)=A(0,I)/A(R+l,R)
4000 NEXT I
4010 NEXT R
4020 FOR J=l TO N-2
4030 FOR I=J+2 TO N
4040 A(IrJ)=0
4050 NEXT I
4060 NEXT J
4070 RETURN
4080 \
4090 \
5000 REM •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
5010 REM * ЭТА ПОДПРОГРАММА НАХОДИТ СОБСТВЕННЫЕ ЧИСЛА
ВЕЩЕСТВЕННОЙ *
5020 REM * МАТРИЦЫ В ВЕРХНЕЙ ГЕССЕНБЕРГОВОЙ ФОРМЕ С
ИСПОЛЬЗОВАНИЕМ *
5030 REM * АЛГОРИТМА ФРЭНСИСА ДЛЯ УСКОРЕНИЯ СХОДИМОСТИ.
*
5040 REM *
5050 REM * ПАРАМЕТРЫ:
5060 REM •
5070 REM * А - ИСХОДНАЯ МАТРИЦА (N+1,N+1)
5080 REM * N - ПОРЯДОК МАТРИЦЫ
5090 REM • R1 - ВЕКТОР (N+1) МНИМЫХ ЧАСТЕЙ СОБСТВЕННЫХ
ЧИСЕЛ
5100 REM • R2 - ВЕКТОР СООТВЕТСТВУЮЩИХ ВЕЩЕСТВЕННЫХ
ЧАСТЕЙ
5110 REM *
5120 REM * ПОДПРОГРАММА ПРЕКРАЩАЕТ РАБОТУ,ЕСЛИ ЗА 30
ИТЕРАЦИЙ
5130 REM * HE ДОСТИГНУТА НУЖНАЯ ТОЧНОСТЬ
5140 REM •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
5440 N3=N
5450 IF N3=0 THEN GO TO 6720
5460 11 = 0 \ N1 = N3-1 \ M3 = 1.00000E-05
5470 M3 = 1.00000E-ll
5560 FOR L=N3 TO 2 STEP -1
5570 IF ABS(A(L,L - 1)) < =M3«(ABS(A(L - 1,L - 1))+ABS(A(L,L))) THEN
GO TO
5580 NEXT L
5590 L=l
5600 X=A(N3,N3)
5610 IF L=N3 THEN GO TO 6480
5620 Y=A(N1,N1) \ R=A(N3,N1)»A(N1,N3)
5630 IF N1 = L THEN GO TO 6530
5640 IF 11 = 30 THEN GO TO 6710
5690 IF 11 = 10 THEN GO TO 5730
5700 IF 11 = 20 THEN GO TO 5730
5710 S = X+Y \ Y = X*Y-R
5720 GO TO 5750
5730 Y=ABS(A(N3,Nl))+ABS(A(Nl,N3-2))
5740 S = 1*Y \ Y=-Y"2
5750 11 = 11 + 1
5820 FOR M = N3-2 TO L STEP -1
5830 X=A(M,M) \ R=A(M + 1,M)
5840 Z=A(M + 1,M + 1)
5850 P=X*(X-S) + Y + R*A(M,M + 1)
5860 Q = R*(X + Z-S) \ R=R*A(M + 2,M + 1)
5870 W=ABS(P)+ABS(Q)+ABS(R)
5880 P = P/W \ Q=Q/W \ R=R/W
5890 IF M = L THEN GO TO 5920
5900 IF ABS(A(M,M - 1))*(ABS(Q)+ABS(R))< =M3*ABS(P)*(ABS(A(M - 1,
M-1))+ABS(X)+ABS(Z)) THEN GO TO 5920
5910 NEXT M
5920 FOR I = M + 2 TO N3
5930 А(1,1-2) = 0
5940 NEXT I
5950 FOR I = M + 3 TO N3
5960 A(I,I-3) = 0
5970 NEXT I
6040 FOR K=M TO N1
6050 IF K=M THEN GO TO 6120
6060 Р=А(КДС-1) \ Q=A(K+1,K-1)
6070 R=A(K+2,K-1)
6080 IF N1 = K THEN R=0
6090 X=ABS(P)+ABS(Q)+ABS(R)
6100 IF X = 0 THEN GO TO 6440
109
6110 Р=Р/Х \ Q=Q/X \ R=R/X
6120 S=SQR(P*P+Q*Q + R*R)
6130 IF P<0 THEN S=-S
6140 IF КОМ THEN A(K,K- 1)= - S*X
6150 IF LOM THEN A(K,K-1)= -A(KJC-l)
6160 P = P + S \ X=P/S \ Y = Q/S \ Z=R/S
6170 Q=Q/P \ R=R/P
6220 FOR J = K TO N3
6230 P=A(KrO + Q*A(K+lrT)
6240 IF N1 = K THEN GO TO 6270
6250 P = P+R*A(K+2rJ)
6260 A(K+2rT)=A(K+2rT)-P*Z
6270 A(K+lrJ)=A(K+lrT)-P*Y
6280 А(КД)=А(КГГ)-Р*Х
6290 NEXT J
6300 J=N3
6310 IF K+3<N3 THEN J=K+3
6360 FOR I = L TO J
6370 P = X*A(I,K)+Y*A(I,K+1)
6380 IF N1 = K THEN GO TO 6410
6390 P = P+Z*A(I,K+2)
6400 A(I,K+2)=A(I,K+2)-P*R
6410 A(I,K+1)=A(I,K+1)-P*Q
6420 A(I,K)=A(I,K)-P
6430 NEXT I
6440 NEXT К
6450 GO TO 5560
6490 R1(N3) = X \ Rl(N3) = 0 \ N3 = N1
6500 GO TO 5450
6540 P = (Y-X)/2 \ Q = P*P+R \ Y = SQR(ABS(Q))
6550 IF Q<0 THEN GO TO 6650
6580 IF P<0 THEN Y= - Y
6590 Y = P+Y
6600 R1(N1) = X+Y \ R1(N3) = X-R/Y
6610 R2(N1)=O \ R2(N3)=0
6620 GO TO 6690
6670 R1(N1) = X+P \ R1(N3) = X+P
6680 R2(N1)=Y \ R2(N3)= - Y
6690 N3 = N3-2
6700 GO TO 5450
6710 PRINT "НЕТ СХОДИМОСТИ ПОСЛЕ 30 ИТЕРАЦИЙ"
6720 RETURN
7060 М$ = " "
7070 N$ = n
7080 M$ = M$ + N$
7090 PRINT M$
7100 FOR J=l TO 6
7110 FOR 1 = 1 TO 6
110
7110 FOR 1 = 1 TO 6
7120 F(I)=A(J,I)
7130 NEXT I
7140 GOSUB 8000
7150 PRINT
G$(1);TAB(7);G$(2);TAB(14);G$(3);TAB(21);G$(4);TAB(28);G$(5);TAB(35);G$(6)
7160 NEXT J
7170 PRINT M$
7180 RETURN
8080 FOR 1 = 1 TO N
8090 IF ABS(F(I))>.01 THEN GO TO 8120
8100 G$(I) = STR$(F(I))
8101 L1 = LEN(G$(I))
8102 G$(I) = SEG$(G$(I),1,2) + SEG$(G$(I),L1-4,L1)
8110 GO TO 8140
8120 G$(I)=STR$(F(I))
8130 G$(I) = SEG$(G$(I),1,5)
8140 NEXT I
8150 RETURN
Результат расчета по этой программе таков:
ИСХОДНАЯ МАТРИЦА
2.3
1.4
25
3.8
2.4
1.8
4.3
2.4
6.5
5.7
5.4
1.7
5.6
5.7
4.2
2.9
3.7
3.9
3.2
8.4
7.1
1.6
6.2
4.6
1.4
3.4
4.9
2.5
3.9
5.7
2.2
5.2
9.3
7.9
1.8
5.9
ВЕРХНЯЯ ГЕССЕНБЕРГОВА ФОРМА
2.3 10.39 11.64 5.113 2.864 2.2
3.8 10.92 14.89 2.381 7.757 7.9
00 13.61 7.369 3.629 4.002 2.289
00 00 2.460 -2.27 2.291 1.989
00 00 00 -2.52 -.756 -3.40
00 00 00 00 3.605 2.734
СОБСТВЕННЫЕ ЧИСЛА
ВЕЩЕСТВЕННАЯ ЧАСТЬ МНИМАЯ ЧАСТЬ
25.5577 0
-5.64128 °
111
-.673767 1.58344
-.673767 -1.58344
.865541 3.44263
.865541 -3.44263
I Расчет по этой программе на компьютере требует не1
I менее 45 с машинного времени. На компьютере с па-1
I мятью 48 К можно обработать матрицу и больших раз-1
I меров; это, однако, потребует дополнительных затрат I
I машинного времени. Большой объем требуемого ма-1
I шинного времени является следствием относительной I
I сложности программы и используемого алгоритма. I
4.7 ВЫБОР АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ
НА СОБСТВЕННЫЕ ЗНАЧЕНИЯ
Выбор наиболее удобного алгоритма решения для данной
задачи на собственные значения определяется типом
собственных чисел, типом матрицы, числом искомых собственных
значений, а также наличием или отсутствием необходимости
отыскания собственных векторов. По мере усложнения задачи
число пригодных к использованию алгоритмов уменьшается.
Табл. 4.1 может помочь в выборе метода. Используя
приведенные методы для работы на малом компьютере, следует
помнить обо всех ограничениях, накладываемых малым
компьютером. Поэтому необходимо:
1. Учитывать природу задачи и ее решений. Если требуется
найти только одно собственное значение, лучше всего
использовать метод итераций. Если требуется найти все
собственные значения симметричной матрицы, наиболее
удобен метод Якоби или какой-либо другой метод
преобразования. Если требуется найти все собственные значения
матрицы общего вида, следует использовать Q^-алгоритм,
поскольку никакой другой метод не позволяет определять
комплексные собственные числа.
2. Учитывать объем памяти компьютера и требуемое
машинное время. Часто существует баланс между требуемым
машинным временем и объемом памяти компьютера,
который и определяет метод решения задачи на собственные
значения, оптимальный для работы на малом компьютере.
Примеры, приведенные в этой главе, показывают, что чем
сложнее метод, тем больший объем памяти компьютера
требуется и тем длиннее соответствующая программа. В то
же время, если не требуется найти собственные векторы,
необходимый объем памяти уменьшается. Во многих
ситуациях метод, рассмотренный в примере 4.2, может быть
112
Таблица 4.1. Выбор алгоритма решения задачи на собственные значения
Название алгоритма
(и его тип)
Отыскание корней
определителя (итерационный)
Итерационный метод
(итерационный)
Применяется к мат-Результат
рицам
Общего вида
Общего вида
Метод Якоби (преобразо- Симметричным
вания)
Метод Гивена (преобразо-Симметричным
вания)
Несимметричным
Метод Хаусхолдера (пре-Симметричным
образования)
LR-метод
(преобразования)
QR-мстод,
(преобразования)
Несимметричным
Общего вида
Общего вида
Собственные числа
Собственные числа
и векторы
Диагональная
матрица
Трехдиагональная
матрица
Гессенбергова
матрица
Трехдиагональная
матрица
Гессенбергова
матрица
Блочно-диагональ-
ная матрица
Блочно-диагональ-
ная матрица
Рекомендуется, когда
следует найти собственные числа:
Наибольшее
или Все Все
наименьшее 6 6
*
* *
* *
* *
* *
* *
* *
Примечания
Требуется найти корни
полинома общего вида
Лучшая точность для
наибольшего и наименьшего чисел
Теоретически требует
бесконечного числа шагов
Требуется найти корни
простого полинома
Требует дополнительных
методов
Требуется найти корни
простого полинома
Требует дополнительных
методов
Может оказаться
неустойчивым
Лучший общий метод
реализован с меньшими затратами машинного времени и
памяти, если удалить части программы, обеспечивающие
отыскание собственных векторов.
3. Учитывать промежуточные результаты. Даже если процесс
вывода информации на экран дисплея или принтер может
как-либо замедлить итерационную процедуру,
промежуточная информация о ходе решения зачастую оказывается
полезной, поскольку позволяет понять, сходится ли процесс.
4. Учитывать требуемую точность. При решении задачи на
собственные значения следует позаботиться о достижении
максимально возможной точности вычислений. Например,
в методе исключений, рассмотренном в разделе 4.5, для
нахождения наибольшего осевого элемента рекомендуется
использовать перестановку строк и столбцов.
Глава
Обыкновенные
дифференциальные
уравнения
Уравнение, содержащее одну или несколько производных,
называют дифференциальным. Поскольку большинство
физических законов науки и техники записаны в форме
дифференциальных уравнений, их решение является повседневной
необходимостью. Задачи моделирования, связанные с движением
массы или энергии, также неизбежно ведут к
дифференциальным уравнениям. К сожалению, число уравнений, которые
можно успешно решить аналитическими методами, очень
ограничено. Поэтому при рассмотрении научных и инженерных
задач особенно важен вопрос о решении дифференциальных
уравнений с помощью персонального компьютера.
В зависимости от числа независимых переменных и,
следовательно, типа входящих в них производных
дифференциальные уравнения делятся на две существенно различные
категории: обыкновенные, содержащие одну независимую переменную
и производные по ней, и уравнения в частных производных,
содержащие несколько независимых переменных и
производные по ним, которые называют частными. Эта глава
посвящена методам решения обыкновенных дифференциальных
уравнений. Решение дифференциальных уравнений в частных
производных здесь не рассматривается.
Предполагается, что читатель в основном знаком с теорией
дифференциальных уравнений. Тем, кто в этом не уверен, мы
рекомендуем предварительно познакомиться с ней.
5.1 ЗАДАЧА КОШИ И КРАЕВАЯ ЗАДАЧА
Чтобы решить обыкновенное дифференциальное уравнение,
необходимо знать значения зависимой переменной и (или) ее
производных при некоторых значениях независимой перемен-
115
ной. Если эти дополнительные условия заданы при одном
значении независимой переменной, то такую задачу называют
задачей с начальными условиями или задачей Коши. Если же
условия заданы при двух значениях независимой переменной,
задачу называют краевой. В задаче Коши дополнительные
условия называют начальными, а в краевой задаче - граничными.
Часто в задаче Коши в роли независимой переменной
выступает время. Примером может служить задача о свободных
колебаниях тела, подвешенного на пружине. Движение такого
тела описывается дифференциальным уравнением, в котором
независимой переменной является время t. Если
дополнительные условия заданы в виде значений перемещения и скорости
при /=0, то имеем задачу Коши. Для той же механической
системы можно сформулировать и краевую задачу. В этом
случае одно из условий должно состоять в задании
перемещения по истечении некоторого промежутка времени. В краевых
задачах в качестве независимой переменной часто выступает
длина. Известным примером такого рода является
дифференциальное уравнение, описывающее деформацию упругого
стержня. В этом случае граничные условия обычно задают на
обоих концах стержня. Хотя обе указанные задачи рассмотрены в
одной главе, при их решении применяют существенно разные
методы и вычислительные алгоритмы. Изложение начнем с
задачи Коши.
Задача Коши
Задачу Коши можно сформулировать следующим образом.
Пусть даны дифференциальное уравнение
dy/d *=/(*, у)
и начальное условие у(хо)=уо. Требуется найти функцию у(х),
удовлетворяющую как указанному уравнению, так и
начальному условию. Обычно числовое решение этой задачи получают,
вычисляя сначала значение производной, а затем задавая
малое приращение х и переходя к новой точке jc^jcq + A.
Положение новой точки определяют по наклону кривой,
вычисленному с помощью дифференциального уравнения. Таким
образом, график числового решения представляет собой
последовательность коротких прямолинейных отрезков, которыми
аппроксимируется истинная кривая y=f(x). Сам численный метод
определяет порядок действий при переходе от данной точки
кривой к следующей.
Числовое решение задачи Коши широко применяют в
различных областях науки и техники, поэтому в течение многих
лет оно было объектом пристального внимания и число
разработанных для него методов очень велико. Остановимся здесь
116
на следующих двух группах методов решения задачи Коши.
1. Одношаговые методы, в которых для нахождения
следующей точки на кривой у=/(х) требуется информация лишь
об одном предыдущем шаге. Одношаговыми являются
методы Эйлера и методы Рунге - Кутта.
2. Методы прогноза и коррекции (многошаговые), в которых
для отыскивания следующей точки кривой y=f(x)
требуется информация более чем об одной из предыдущих точек.
Чтобы получить достаточно точное числовое значение,
часто прибегают к итерации. К числу таких методов относятся
методы Милна, Адамса - Башфорта и Хемминга.
Погрешности
Прежде чем перейти к обсуждению конкретных методов
числового решения дифференциальных уравнений,
остановимся на источниках погрешностей, связанных с числовой
аппроксимацией. Таких источников три.
1. Погрешность округления обусловлена ограничениями на
представление чисел в используемой ЭВМ, так как для
любой из них число значащих цифр, запоминаемых и
используемых в вычислениях, ограниченно.
2. Погрешность усечения связана с тем, что для
аппроксимации функции вместо бесконечных рядов часто используют
лишь несколько первых их членов. Это обычный для
численных методов прием, являющийся источником
погрешностей, целиком обусловленных применяемым методом и
не зависящих от характеристик самой ЭВМ.
3. Погрешность распространения является результатом
накопления погрешностей, появившихся на предыдущих этапах
счета. Так как один приближенный метод не может дать
совершенно точных результатов, любая возникшая в ходе
вычислений погрешность сохраняется и на последующих
стадиях счета.
Указанные три источника погрешностей являются
причиной наблюдаемых ошибок двух типов:
1. Локальная ошибка - сумма погрешностей, вносимых в
вычислительный процесс на каждом шаге вычислений.
2. Глобальная ошибка - разность между вычисленным и
точным значением величины на каждом этапе реализации
числового алгоритма, определяющая суммарную
погрешность, накопившуюся с момента начала вычислений.
5.2 ОДНОШАГОВЫЕ МЕТОДЫ РЕШЕНИЯ ЗАДАЧИ КОШИ
Одношаговые методы предназначены для решения
дифференциальных уравнений первого порядка вида
/=/(*, У),
117
где / = d>>/djc при начальном условии у(хо)=уо. С помощью
этих методов вычисляют последовательные значения у,
соответствующие дискретным значениям независимой переменной
х.
Метод Эйлера
Это простейший метод решения задачи Коши,
позволяющий интегрировать диффренциальные уравнения первого
порядка. Его точность невелика, и поэтому на практике им
пользуются сравнительно редко. Однако на основе этого
метода легче понять алгоритм друшх, более эффективных методов.
Метод Эйлера основан на разложении у в ряд Тейлора в
окрестности х0:
Если А мало, то члены, содержащие А во второй или более
высоких степенях, являются малыми более высоких порядков
и ими можно пренебречь. Тогда
Значение /(х0) находим из дифференциального уравнения,
подставив в него начальное условие. Таким образом можно
получить приближенное значение зависимой переменной при
малом смещении А от начальной точки. Этот процесс можно
продолжить, используя соотношение
У|1+А/(*1!> J>ii), Л = 1> 2> ->
и делая сколь угодно много шагов. Графический метод Эйлера
показан на рис. 5.1. Ошибка метода имеет порядок А2, так как
Точное
решение
118
Рис. 5.1
члены, содержащие А во второй и более высоких степенях,
отбрасываются.
Модифицированный метод Эйлера
Хотя тангенс угла наклона касательной к истинной кривой
в исходной точке известен и равен у'(х0), он изменяется в
соответствии с изменением независимой переменной. Поэтому в
точке jcq+A наклон касательной уже не таков, каким он был в
точке х0. Следовательно, при сохранении начального наклона
касательной на всем интервале h в результаты вычислений
вносится погрешность. Точность метода Эйлера можно
существенно повысить, улучшив аппроксимацию производной. Это
можно сделать, например, используя среднее значение
производной в начале и конце интервала. В модифицированном
методе Эйлера сначала вычисляют значение функции в
следующей точке по методу Эйлера:
Его используют для вычисления приближенного значения
производной в конце интервала /(*n+i, y*n+i)- Вычислив среднее
между этим значением производной и ее значением в начале
интервала, найдем более точное значение уп+\.
Этот прием иллюстрируется на рис. 5.2. Принцип, на котором
основан модифицированный метод Эйлера, можно пояснить и
иначе. Для этого вернемся к разложению функции в ряд
Тейлора
V
"
^^
- 7mwH=f(a:n>yn)
h
2
h
2
Точное
S^ решение
•Уп+1
Уточнение
» У*п+1
Рис. 5.2
119
Кажется очевидным, что, сохранив член с А2 и отбросив
члены более высоких порядков, можно повысить точность.
Однако чтобы сохранить член с А2, надо знать вторую
производную у"(х0). Ее можно аппроксимировать конечной разностью:
и, ч д/ /0о+й)-/0о)
>(*•>= — = -h •
Подставив это выражение в ряд Тейлора с отброшенными
членами второго порядка, найдем
что совпадает с выражением, полученным ранее.
Этот метод является методом второго порядка, так как в
нем используют член ряда Тейлора, содержащий А2.
Погрешность на каждом шаге при использовании этого метода имеет
порядок Л3. За повышение точности приходится
расплачиваться дополнительными затратами машинного времени,
необходимыми для вычисления /п+1. Более высокая точность может
быть достигнута в том случае, когда пользователь готов
потратить машинное время на лучшую аппроксимацию
производной путем сохранения большего числа членов ряда
Тейлора. Эта же идея лежит в основе методов Рунге - Кутта.
Методы Рунге-Кутта
Чтобы удержать в ряде Тейлора член /г-го порядка,
необходимо каким-то образом вычислить п-ю производную зависимой
переменной. При использовании модифицированного метода
Эйлера для получения второй производной в
конечно-разностной форме достаточно было знать наклоны кривой на концах
рассматриваемого интервала. Для вычисления третьей
производной в конечно-разностном виде, необходимо иметь
значения второй производной по меньшей мере в двух точках. Для
этого необходимо дополнительно определить наклон кривой в
некоторой промежуточной точке интервала А, т.е. между хп и
xn+v Очевидно, чем выше порядок вычисляемой производной,
тем больше дополнительных вычислений требуется внутри
интервала. Метод Рунге - Кутта дает набор формул для расчета
координат внутренних точек, требуемых для реализации этой
идеи. Так как существует несколько способов расположения
внутренних точек и выбора относительных весов для
найденных производных, то метод Рунге - Кутта в сущности
объединяет целое семейство методов решения дифференциальных
уравнений первого порядка. Наиболее распространенным
является один из них, при котором удерживаются все члены,
включая А4. Это метод четвертого порядка точности, для
которого ошибка на шаге имеет порядок А5. Расчеты при исполь-
120
зовании этого классического метода производят по формуле
>^1=^ + (*о+^1
где *0=Л/(хп, Уп), Kl =
K3=hf(xn+h, уп+К2).
Метод Эйлера и его модификация по сути дела являются
методами Рунге - Кутта первого и второго порядка
соответственно. По сравнению с ними метод Рунге - Кутта имеет
важное преимущество, так как обеспечивает более высокую
точность, которая с лихвой оправдывает дополнительное
увеличение объема вычислений. Более высокая точность метода
Рунге - Кутта часто позволяет увеличить шаг интегрирования А.
Допустимая погрешность на шаге определяет его
максимальное значение. Чтобы обеспечить высокую эффективность
вычислительного процесса, величину А следует выбирать именно
из соображений максимально допустимой ошибки на шаге.
Такой выбор часто осуществляется автоматически и включается
как составная часть в алгоритм, построенный по методу
Рунге - Кутта.
Относительную точность одношаговых методов
продемонстрируем на следующем примере.
ПРИМЕР I
I Пусть требуется решить уравнение Г
I dy/dx=2x2+2y I
I при начальном условии у(0) = 1, на интервале 0 <: х £ 1 и I
1Л=0, 1. Это-линейное уравнение, имеющее точное ре-1
I шение I
I у=1,5<?х-х2-х-0,5, I
I которое поможет нам сравнить относительную точность, I
I обеспечиваемую разными методами. Результаты расчета!
I представлены в приведенной ниже таблице, из которой I
I хорошо видны преимущества метода Рунге-Кутта nol
I сравнению с обычным и модифицированным методами I
I Эйлера. I
хп Метод Модифицирован- Метод Рун- Точное решение
Эйлера ный ге - Кутта
метод Эйлера
1,0000
1,2221
1,4977
1,8432
121
0,0
0,1
0,2
0,3
1,0000
1,2000
1,4420
1,7384
1,0000
1,2210
1,4923
1,8284
1,0000
1,2221
1,4977
1,8432
0,4
0,5
0,6
0,7
0,8
0,9
1,0
2,1041
2,5569
3,1183
3,8139
4,6747
5,7376
7,0472
2,2466
2,7680
3,4176
4,2257
5,2288
6,4704
8,0032
2,2783
2,8274
3,5201
4,3927
5,4894
6,8643
8,5834
2,2783
2,8274
3,5202
4,3928
5,4895
6,8645
8,5836
Методы Рунге - Кутта
для системы дифференциальных уравнений
Любую из формул Рунге - Кутта можно использовать для
решения систем дифференциальных уравнений и,
следовательно, для решения диффренциальных уравнений более высоких
порядков, так как любое диффренциальное уравнение л-го
порядка можно свести к п дифференциальным уравнениям
первого порядка. Например, в дифференциальном уравнении
второго порядка
d2y/dx2=g(x, у, dy/dx)
можно принять z=dy/dx. Тогда dz/dx=d2y/dx2 и получаем два
уравнения первого порядка:
dz/dx=g(x, у, z), dy/dx=f(x, у, z),
где f(x,y,z) = z. Задача Коши в этом случае содержит два
начальных условия
У(хо)=Уо и 2(*o)=zo-
Формулы Рунге - Кутта для рассматриваемого случая имеют
вид
и
где К
Здесь
xtv yn9 zj,
m Ую zn)>
122
Модификация Гилла для метода Рунге - Кутта
При увеличении числа уравнений в системе метод
Рунге - Кутта уже не может быть использован в том виде, как он
был описан в предыдущем разделе, и нуждается в некоторой
модификации. Этот метод не минимизирует также влияния
ошибок округления на окончательный результат. Для того
чтобы преодолеть эти недостатки, Гилл разработал процедуру
вычислений, которая имеет следующие особенности.
1. Она требует минимального объема памяти.
2. Она дает максимальную достижимую точность в смысле
влияния ошибок округления.
3. Она может быть реализована в программе с небольшим
числом операторов.
Все это делает ее удобной для работы на микроЭВМ.
Процедуру Гилла применяют к системе из л + 1 уравнения первого
порядка, записанной в виде
>7'(*)=//(*> Уо(х)> Уг(х)>~>Уп(х))> /=0> *> 2> •••> п-
Значения у хранятся в двухиндексном массиве у/,/, в котором
начальные условия записывают так:
Ую=У1(хо)> /=0> !» 2> •••> п-
Для того чтобы начать вычисления по этому методу, следует
задать специальный набор коэффициентов:
*i=72 *i=2 ci=V2
а2=1-\Л72 *2=1 с2=1
«3=1+^77 *з=2 с3=1
a4=V6 *4=2 с4=72.
Массив Qij используют со следующими начальными
значениями:
<7/,/(*о)=о> *=0> !> 2» -э п.
Процедуру начинают с установки индекса у=1. Далее значения
вычисляют для /=0, 1, ..., п. Затем вычисляют значения
УиГУч -1 + [*/ (Чу - */ Яц- i)l
для /=0, 1, ..., п. Начиная с шага £/у- описанную выше
процедуру повторяют для у=2, 3 и 4. По мере вычислений значения
х меняются следующим образом:
123
В конце этого процесса, состоящего из четырех шагов,
значениями yt в точке дс=хо+А окажутся
У/(*6+*)=3>к, '=0, 1, 2, ..., л.
Новые начальные значения ую и qi0 определяются следующим
образом:
3to=JW ^о=^4 Для /=0> *> 2> •••> "•
Весь процесс начиная с шага /=1 повторяют для вычисления
следующих значений у-г
Стандартная процедура, позволяющая контролировать
точность по мере вычислений, состоит в выполнении двух шагов
Гилла размером А, необходимых для получения у/(х+2А)=>'/(1),
а затем одного шага Гилла размером 2А для вычисления
yi(x+2h)=yf2\ Поскольку вычисления с двумя шагами
меньшего размера должны дать большую точность, сравнение этих
двух результатов позволяет определить локальную ошибку
округления. Если разность двух значений меньше некоторого
наперед заданного числа е, результат считается достаточно
точным. Если разность больше заданного значения, точность
может быть повышена уменьшением шага вдвое и повторением
вычислений. Для этого процесса ошибка округления
Таким образом, если Error > 8, то А=А/2 и вычисления
повторяют, чтобы получить результат с более приемлемой
точностью, прежде чем переходить к следующему шагу. Это
уменьшение шага может быть повторено столько раз, сколько
необходимо для достижения желаемой степени точности. Метод
Гилла, если ошибка достаточно мала, часто дополняют
процедурой удвоения шага. Например, если Error < £/50, то А
заменяют на 2А. Такая процедура ускоряет процесс получения
решения.
Пример использования модификации Гилла для метода
Рунге - Кутта будет приведен несколько позже, а сначала
скажем об основных общих чертах всех одношаговых методов.
Общая характеристика одношаговых методов
Всем одношаговым методам присущи определенные общие
черты.
1. Чтобы получить информацию в новой точке, надо иметь
данные лишь в одной предыдущей точке. Это свойство
можно назвать "самостартованием".
124
2. В основе всех одношаговых методов лежит разложение
функции в ряд Тейлора, в котором сохраняются члены,
содержащие h в степени до к включительно. Целое число к
называют порядком метода. Погрешность на шаге имеет
порядок £ + 1.
3. Все одношаговые методы не требуют действительного
вычисления производных - вычисляют лишь саму функцию,
однако могут потребоваться ее значения в нескольких
промежуточных точках. Это влечет за собой, конечно,
дополнительные затраты времени и усилий.
4. Свойство "самостартования" позволяет легко менять
значение шага h.
Чтобы проиллюстрировать одношаговые процессы,
рассмотрим пример применения модификации Гилла метода Рун-
ге - Кутта.
I ПРИМЕР I
I" I
I Задачи об ударах и колебаниях, связанные с большим I
I количеством разнообразных источников возбуждения, ти-1
I пичны для авиапромышленности и транспорта. Для на-1
I дежной работы инструментов и измерительной аппара-1
I туры, а также для защиты человека на транспорте I
I очень важной задачей является уменьшение количества I
I ударов и снижение уровня вибрации. Обычно для этого I
I используют легко деформируемые гибкие опоры. Нали-1
I чие таких мягких опор приводит к тому, что собствен-1
I ная частота подвеса системы оказывается гораздо ниже I
I возбуждающей частоты. Такое решение эффективно в1
I случае постоянно действующих вибраций; однако при I
I возбуждении ударом из-за эластичности этих подвесок I
I могут возникнуть разрушительно большие отклонения. I
I Было отмечено, что этого не происходит в системах I
I подвески, использующих закаленные симметрично нели-'
I нейные пружины. Эти пружины становятся лишь твер-
I же, когда подвергаются относительно рабочего состояния
I деформациям. Пусть некоторое устройство состоит из те-
I ла массы /п, прикрепленного к жесткой стене при по-
I мощи линейной пружины с коэффициентом жесткости j
\k, демпфера с коэффициентом с и нелинейной пружи-'
I ны, которая создает возвращающую силу, пропорцио-
I нальную кубу отклонения с постоянным коэффициен-
I том £*. Эта "кубическая" пружина обусловливает сим-
I метричное нелинейное поведение системы, обеспечивая
I ее защиту от ударов и вибрации.
125
I Поскольку окончательное дифференциальное уравне-1
I ние движения системы оказывается нелинейным: I
тх + сх + кх + к*х3 = О
- смещение х9 как функция времени, не может быть I
найдено традиционными "точными" методами. Поэтому!
желательно решить это дифференциальное уравнение!
численно. I
Подготовим и запустим в ЭВМ программу, которая)
будет моделировать движение этой системы на проме-'
жутке времени от 0 до 1,0 с для следующих
физических параметров:
k=2fl Н/см, к* = 2,0 Н/см3,
с=0,15 Н-с/см, т = 1,0 кг
I и начальных условий, имеющих вид I
I *(0) = 10 см, I
jc(O) =0.
I Чтобы применить к решению задачи одношаговый!
I метод, дифференциальное уравнение второго порядка I
I необходимо преобразовать к системе дифференциальных I
I уравнений первого порядка. Эта система имеет вид I
• с_ _ _fc к^_ з
■^2 ~ -^2 -^ 1 -^ 1 •
т т т
I Чтобы ответ выражался в сантиметрах, масса должна I
I быть записана в соответствующей системе единиц: I
I /я = 0,01 Н-с2/см. I
I Программа на языке бейсик, которая решает постав-1
I ленную задачу, приведена ниже. Эта программа исполь-1
I зует метод Рунге - Кутта в модификации Гилла. В про-1
I грамме также использована описанная выше процедура I
I изменения размера шага, предназначенная для того,!
I чтобы затраты времени на получение окончательного I
I результата были минимальными для заданной точно-1
I сти. Дифференциальное уравнение задается специальной I
j подпрограммой, начинающейся с оператора 5000, а ре-1
126
I зультаты выводятся специальной подпрограммой, начи-
I нающейся с оператора 6000. Собственно процедура Гил-
I ла выполняется в подпрограмме, начинающейся с 4800-
I го оператора. Поскольку в программе используется срав-
I нение результатов, полученных при разных шагах, для
I хранения промежуточных результатов требуется не-
I сколько рабочих массивов.
1000 REM
1010 REM
1020 REM
1030 REM
1040 REM
1050 REM
1060 REM ••••••••••
1070 \
1080 \
1090 \
1100 DIM Y(2),D(2)
1110 X = 0 \ Xl = l
1120 Y(0) = 10 \ Y(l)
1130 H = .O2 \ N=1
1140 E=1.00000E-03
1150 \
1160 PRINT '
1170 PRINT " X
1180 PRINT '
1190 GOSUB 3000
1200 PRINT '
1210 STOP
1220 \
1230 \
3000 REM ••••••••••
3010 REM
3020 REM
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM
3160 REM
3170 REM
3180 REM
3190 REM
3200 REM
3210 REM
ЭТА ПРОГРАММА НАХОДИТ
РЕШЕНИЕ СИСТЕМЫ
ДИФФЕРЕНЦИАЛЬНЫХ
УРАВНЕНИЙ ПО МЕТОДУ
РУНГЕ-КУТТА
ЭТА ПОДПРОГРАММА
РЕШАЕТ СИСТЕМУ
ДИФФЕРЕНЦИАЛЬНЫХ
УРАВНЕНИЙ ПЕРВОГО
ПОРЯДКА ПО ЗАДАННОМУ
НАЧАЛЬНОМУ ПРИБЛИЖЕНИЮ
ИСПОЛЬЗУЕТСЯ МЕТОД
РУНГЕ - КУТТА 4
В МОДИФИКАЦИИ ГИЛЛА
РАЗМЕР ШАГА
АВТОМАТИЧЕСКИ
ПОДСТРАИВАЕТСЯ
УДВОЕНИЕМ ИЛИ ДЕЛЕНИЕМ
ПОПОЛАМ ДЛЯ
ПОДДЕРЖАНИЯ ЖЕЛАЕМОЙ
СТЕПЕНИ ТОЧНОСТИ
N - ЧИСЛО УРАВНЕНИЙ
127
3220 REM
3230 REM
3240 REM
3250 REM
3260 REM
3270 REM
3280 REM
3290 REM
3300 REM
3310 REM
3320 REM
3330 REM
3340 REM
3350 REM
3360 REM
3370 REM
3380 REM
3390 REM
3400 REM
3410 REM
3420 REM
3430 REM
3440 REM
3450 REM
3460 REM
3470 REM
3480 REM
3490 REM
3500 REM
3510 REM
3520 REM
3530 REM
3540 REM
3550 REM
3560 REM
3570 REM
3580 REM
3590 REM
3600 REM
3610 REM
3620 REM
3630 REM
3640 REM
3650 REM
3660 REM
3670 REM
3680 REM
3690 \
3700 REM
3710 REM
3720 REM
В СИСТЕМЕ.
X - НЕЗАВИСИМАЯ
ПЕРЕМЕННАЯ.
Y(I)- ВЕКТОР ЗНАЧЕНИЙ
ФУНКЦИИ.
XI - КОНЕЧНОЕ
ЗНАЧЕНИЕ
НЕЗАВИСИМОЙ
ПЕРЕМЕННОЙ.
D(I)- ВЕКТОР ЗНАЧЕНИЙ
ПРОИЗВОДНЫХ.
Н - НАЧАЛЬНЫЙ ШАГ
Е - ЗНАЧЕНИЕ
ПОГРЕШНОСТИ
ДЛЯ ПРОВЕРКИ
ОШИБОК
ОКРУГЛЕНИЯ.
5000 - ПОДПРОГРАММА
ЗАДАЮЩАЯ
ЗНАЧЕНИЯ
ПРОИЗВОДНЫХ
СОГЛАСНО
СИСТЕМЕ
УРАВНЕНИЙ.
6000 - ПОДПРОГРАММА
ДЛЯ ПЕЧАТИ
ВЫВОДИМОЙ
ИНФОРМАЦИИ.
ИНИЦИАЛИЗАЦИЯ
ПАРАМЕТРОВ И
ОБЪЯВЛЕНИЕ МАССИВОВ
3730 DIM A(5),B(5),C(5)
3740 DIM Q(10),Yl(3,10),Dl(3,10),Ql(3,10)
3750 А(1) = .5 \ А(4) = 1/6
3760 A(3) = 1 + SQR(.5)
128
3770 A(2) = 1-SQR(.5)
3780 B(l) = 2 \ B(2) = l
3790 B(3) = l \ В(4) = 2
3800 С(1) = .5 \ С(2) = А(2)
3810 С(3) = А(3) \ С(4) = .5
3820 Н1 = Н
3830 FOR 1 = 0 ТО N
3840 Q(I) = 0
3850 Yl(0.I) = Y(I)
3860 Ql(0,I) = Q(I)
3870 NEXT I
3880 GOSUB 5000 \ GOSUB 6000
3890 \
3900 REM •• К = 0 . ВЫПОЛНЕНИЕ 1-ГО ШАГА Н **
3910 К = 0
3920 GOSUB 4800
3930 \
3940 REM •• 1-ЫЙ ШАГ Н ВЫПОЛНЕН
3950 REM •• СОХРАНЕНИЕ РЕЗУЛЬТАТОВ
3960 К=1
3970 FOR 1 = 0 ТО N
3980 Y1(KJ) = Y(I)
3990 D1(KJ) = D(I)
4000 Q1(KJ) = Q(I)
4010 NEXT I
4020 \
4030 REM ** ВЫПОЛНЕНИЕ 2-ГО ШАГА Н. **
4040 GOSUB 4800
4050 \
4060 REM •• 2-ОЙ ШАГ Н ВЫПОЛНЕН
4070 REM •• СОХРАНЕНИЕ РЕЗУЛЬТАТОВ
4080 К=2
4090 FOR 1 = 0 ТО N
4100 Y1(KJ) = Y(I)
4110 D1(KJ) = D(I)
4120 Q1(KJ) = Q(I)
4130 Y(I) = Yl(0,I)
4140 Q(I) = Ql(0,I)
4150 NEXT I
4160 \
4170 REM •• ПЕРЕУСТАНОВКА ПАРАМЕТРОВ
4180 REM ** И ВЫПОЛНЕНИЕ ШАГА 2Н
4190 Х = Х-2*Н
4200 Н = Н + Н
4210 GOSUB 4800
4220 \
4230 REM •• ШАГ 2Н ВЫПОЛНЕН
4240 REM ** ВЫЧИСЛЕНИЕ ОШИБКИ
4250 Х = Х-Н \ S = 0 \ Н = Н/2
4260 FOR 1 = 0 ТО N
4270 S = S + ABS(Y(I) - Y1(2,I))/(N + 1)
4280 NEXT I
4290 \
4300 REM •• ЕСЛИ ОШИБКА СЛИШКОМ ВЕЛИКА,
4310 REM •• ДЕЛИМ Н ПОПОЛАМ И ПОВТОРЯЕМ ВЫЧИСЛЕНИЯ
5-522
129
4320 IF S/15 > E THEN GO TO 4580
4330 \
4340 REM •• ЕСЛИ ОШИБКА ДОСТАТОЧНО МАЛА
4350 REM •• ВЫВОДИМ ЗНАЧЕНИЯ ФУНКЦИИ И
4360 REM •• ПРОИЗВОДНОЙ С ШАГОМ Н И 2Н.
4370 FOR J=l TO 2
4380 FOR 1 = 0 ТО N
4390 Y(I) = Y1(J,I)
4400 D(I) = D1(J,I)
4410 NEXT I
4420 X = X + H
4430 GOSUB 6000
4440 NEXT J
4450 \
4460 REM •• ОСТАНОВКА ПОСЛЕ ПОСЛЕДНЕГО ШАГА ••
4470 IF X> =X1 THEN RETURN
4480 \
4490 REM •• ОШИБКА ОЧЕНЬ МАЛА
4500 REM •• УДВОЕНИЕ ШАГА
4510 REM •• ВПЛОТЬ ДО HI
4520 IF S/15 > Е/50 THEN GO TO 4650
4530 H = H*2
4540 IF H>H1 THEN H = H1
4550 GO TO 4650
4560 \
4570 REM ** РАЗБИЕНИЕ Н ПОПОЛАМ И ПОВТОРЕНИЕ
4575 REM •• ВЫЧИСЛЕНИЙ ••
4580 H = H/2
4590 FOR 1 = 0 ТО N
4600 Y(I) = Yl(0,I)
4610 Q(I) = Ql(0,I)
4620 NEXT I
4630 GO TO 3910
4640 \
4650 REM •• ВЫПОЛНЕНИЕ СЛЕДУЮЩИХ
4660 REM •• ШАГОВ
4670 FOR 1 = 0 TO N
4680 Yl(0,I) = Yl(2,I)
4690 Q1(O,I) = Q1(2,I)
4700 Y(I) = Yl(0,I)
4710 Q(I) = Ql(0,I)
4720 NEXT I
4730 \
4740 REM •• ПРОВЕРКА ТОГО, ЧТО ПОСЛЕДНИЕ
4750 REM •• ДВА ШАГА ДОСТИГЛИ
4760 REM •• ЗНАЧЕНИЯ XI.
4770 IF X + 2*H>X1 THEN Н = (Х1-Х)/2
4780 GO TO 3910
4790 \
4800 REM ••• ....•..•••
4810 REM • ЭТА ПОДПРОГРАММА
4820 REM • ВЫПОЛНЯЕТ
4830 REM • ПРОЦЕДУРУ ГИЛЛА.
4840 REM •••••••••••••••• — ••
4850 \
130
4860 FOR J = l TO 4
4870 FOR 1 = 0 TO N
4880 GOSUB 5000
4890 NEXT I
4900 FOR 1 = 0 TO N
4910 Y(I) = Y(I) + (A(J)*(H'D(I) - B(J)*Q(I)))
4920 Q(I) = Q(I) + 3'(A(J)*(H*D(I) - B(J)*Q(I))) - C(J)*H*D(I)
4930 NEXT I
4940 IF J = l THEN X = X + .5*H
4950 IF J = 3 THEN X = X + .5*H
4960 NEXT J
4970 RETURN
4980 \
5000 REM *********************
5010 REM * ЭТА ПОДПРОГРАММА
5020 REM * ЗАДАЕТ СИСТЕМУ
5030 REM • ДИФФЕРЕНЦИАЛЬНЫХ
5040 REM * УРАВНЕНИЙ.
5050 REM •••**•*•*******•*****
5060 \
5070 \
5080 Y2 = .O1 \ C2 = .15
5090 Y3 = 2 \ Y4 = .2
5100 \
5110 D(0) = Y(l)
5120 D(l)= - C2*Y(1)/Y2 - Y3*Y(0)/Y2 - Y4*Y(0)"3/Y2
5130 RETURN
5140 \
6000 REM ************************
6010 REM * ЭТА ПОДПРОГРАММА
6020 REM • ВЫВОДИТ
6030 REM • ЗНАЧЕНИЯ X И Y(I)
6040 REM * В ЗАДАННЫХ ТОЧКАХ
6050 REM ************************
6060 \
6070 \
6080 PRINT X;TAB(13);Y(0);TAB(26);Y(l)
6090 \
6100 RETURN
I Контрольное значение ошибки для этого примера взято I
I равным S =0,001. Выводимые программой результаты!
I показывают, как подстраивается приращение времени I
I для того, чтобы поддерживать желаемую точность наи-1
I более эффективным образом. Вывод программы приве-1
I ден ниже. I
О 10 0
2.50000Е - 03 9.93232 - 53.6344
5.00000Е - 03 9.73515 - 103.301
7.50000Е - 03 9.42045 - 147.442
.01 9.00345 - 185.003
131
.0125
.015
.0175
.02
.0225
.025
.0275
.03
.0325
.035
.04
.045
.05
.055
.06
.065
.07
.075
.08
.085
.09
.095
.1
.105
.11
.115
.12
.125
.13
.135
.14
.145
.15
.155
.165
.175
.185
.195
.205
.215
.225
.235
.245
.255
.265
.275
.285
.295
.305
.315
.335
.355
.375
.395
.415
8.50137
7.932
7.31261
6.65898
5.98491
5.30187
4.61905
3.94349
3.28033
2.63314
1.39498
.237781
- .83703
-1.82965
- 2.7384
- 3.55794
-4.279
-4.88931
- 5.37558
- 5.72618
- 5.93385
- 5.99788
-5.92511
- 5.72945
- 5.43018
-5.04951
- 4.61011
-4.13303
-3.6364
-3.13484
- 2.63944
- 2.15814
- 1.69628
- 1.2572
- .453904
.246327
.844334
1.34205
1.74085
2.04191
2.24738
2.36163
2.39193
2.34849
2.24371
2.0911
1.90409
1.69504
1.47463
1.25161
.823187
.445057
.133591
- .106378
- .276828
- 215.475
- 238.865
- 255.596
- 266.385
- 272.112
- 273.709
- 272.077
- 268.03
- 262.261
- 255.337
- 239.658
- 223.19
- 206.75
- 190.247
- 173.075
- 154.43
- 133.579
- 110.094
- 84.0204
- 55.9706
- 27.0691
1.22873
27.4132
50.2049
68.7601
82.7489
92.3091
97.9191
100.246
100.01
97.8871
94.4566
90.1782
85.3945
75.1884
64.8781
54.7568
44.8073
34.9696
25.2757
15.8897
7.07969
- .849435
- 7.63189
- 13.0982
- 17.1992
- 19.9972
-21.6354
- 22.3008
- 22.1914
- 20.3642
- 17.3173
- 13.7912
- 10.2226
- 6.87364
132
.435
.455
.475
.495
.515
.535
.555
.575
.594999
.614999
.634999
.654999
.674999
.694999
.714999
.734999
.754999
.774999
.794999
.814999
.834999
.854998
.874998
.894998
.914998
.934998
.954998
.974998
.994998
.997499
1
- .383935
- .436535
- .444969
- .420072
- .372285
- .31097
- .243987
- .177511
- .116035
- .0625122
- .0185669
.0152641
.039279
.0543727
.0618202
.0630913
.0596995
.0530862
.044541
.0351516
.0257818
.01707
- 3.91038
-1.43544
.501974
1.90085
2.80002
3.26613
3.3808
3.22951
2.89357
2.44518
1.94489
1.44069
.968243
.551727
.205246
- .0655464
- .261652
- .38895
- .456528
- .475229
- .456441
- .411177
9.44401Е-03 -.34941
3.14598Е-03 -.279659
- 1.73580Е -
- 5.23320Е -
-7.46487Е-
- 8.60561Е -
-8.85984Е-
- 8.83987Е -
- 8.80978Е
03 -.208784
03 -.141942
03 -.082678
03 -.0330963
03 5.90787Е-03
03 .0100355
- 03 .0139989
0,0
0,4 0,6
Время, с
133
Для выполнения этого расчета на компьютере требуется j
5 мин. Поскольку программа выполняет дополнитель-"
ные оценки для проверки точности, реально она
работает дольше, чем аналогичная программа без этой
возможности. Читатель также отметит, что в программу!
введен специальный контроль, гарантирующий заверше-"
ние вычислений на последнем желаемом значении
независимой переменной.
Ниже приведен график отклонений, построенный по!
этим данным. Из него видно, что частота колебаний за-1
висит от амплитуды. Такое поведение характерно для!
нелинейных систем, содержащих пружины, жесткость!
которых увеличивается при деформации. |
5.3 МЕТОДЫ ПРОГНОЗА И КОРРЕКЦИИ
В этих методах для вычисления положения новой точки
используют информацию о нескольких ранее полученных
точках. Для этого применяют две формулы, называемые
соответственно формулами прогноза и коррекции. Схемы алгоритмов
для всех таких методов примерно одинаковы, а сами методы
отличаются лишь формулами. На рис. 5.3 представлена схема
алгоритма метода прогноза и коррекции для решения
дифференциального уравнения вида
y'(x)=f(x, у).
Так как в рассматриваемых методах используют информацию
о нескольких ранее полученных точках, то в отличие от одно-
шаговых методов они не обладают свойством "самостартова-
ния". Поэтому, прежде чем применять метод прогноза и
коррекции, исходные данные приходится вычислять с помощью
какого-либо одношагового метода. Часто для этого прибегают к
методу Рунге - Кутта. Вычисления производят следующим
образом. Сначала по формуле прогноза и исходным значениям
переменных определяют значение з^°)п+1. Верхний индекс (0)
означает, что прогнозируемое значение является одним из
последовательности значений yn+i, располагающихся в порядке
возрастания точности. По прогнозируемому значению >^n+i с
помощью приведенного выше дифференциального уравнения
находят производную
которую затем подставляют в фоомулу коррекции для
вычисления уточненного значения y(J+l'n+\- В свою очередь У+1\
134
Использование одношаго -
вого метода для получения
начальных данных
Применение формулы
прогноза для получения
У/7 + /
Использовоние
дифференциального уравнения для вычисления
JO)'r( ft)K
У/7+/ Г \Un+! > Уп+1 )
1 -о
Применение формулы
коррекции для получения
Уп+1
Использование дифферен -
циальногоуравнения для
вычисления
Ул+i ~f(j:n+l » Уп+1 )
^^достагпочно*^^^
<^ли мало изменение ^>
Аа\
Использование у^}
для вычисления упН
Переход к следующему
шагу п=п+1
Чет
Рис
.5.3
135
используют для получения более точного значения
производной с помощью дифференциального уравнения
Если это значение производной недостаточно близко к
предыдущему, его вводят в формулу коррекции и итерационный
процесс продолжается. Если же производная изменяется в
допустимых пределах, то значение yU*1) и+1 используют для
вычисления окончательного значения уп+ь которое и выдается
на печать. После этого процесс повторяют - делают следующий
шаг, на котором вычисляют Уп+2-
Обычно при выводе формул прогноза и коррекции
решение уравнения рассматривают как процесс приближенного
интегрирования, а сами формулы получают с помощью конечно-
разностных методов.
Если дифференциальное уравнение y'=f(x,y)
проинтегрировано в интервале значений от хп до хп+к, то результат примет
вид
хп+к
У(хп+ к) ~ У(хп) = / Я*. У) dx
хп
Этот интеграл нельзя вычислить непосредственно, так как
зависимость у(х) заранее известна. Приближенное значение
интеграла можно найти с помощью одного из
конечно-разностных методов. Выбор метода и будет определять метод
решения дифференциальных уравнений. На этапе прогноза можно
использовать любую формулу численного интегрирования, если
в нее не входит предварительное значение у'(хп+1).
Метод Милна
В этом методе на этапе прогноза используют формулу
Милна
а на этапе коррекции - формулу Симпсона
Последние члены в обеих формулах в действительности в
итерационном процессе не используют, они служат лишь для
оценки ошибки усечения. Метод Милна относят к методам
четвертого порядка точности, так как в нем отбрасывают чле-
136
ны, содержащие А в пятой и более высоких степенях. Может
возникнуть вопрос: зачем вообще нужна коррекция, если
прогноз имеет четвертый порядок точности? Ответ на этот вопрос
дает оценка относительных значений членов, выражающих
погрешность. В данном случае погрешность усечения при
коррекции в 28 раз меньше и поэтому представляет большой
интерес. Вообще итерационные формулы гораздо более точны,
чем формулы прогноза, и поэтому их использование
оправдано, хотя и связано с дополнительными трудностями.
Несмотря на то что формула Милна содержит меньший числовой
коэффициент (1/90) перед отбрасываемым членом, ее
используют реже, чем другие (с большими отбрасываемыми
членами), так как ей присуща неустойчивость. Это означает, что
погрешность распространения может расти экспоненциально,
причем этот вывод справедлив для всех формул коррекции,
основанных на правиле Симпсона.
Метод Адамса - Башфорта
Этот метод также имеет четвертый порядок точности.
Используемая в нем формула прогноза получена
интегрированием обратной интерполяционной формулы Ньютона и имеет
вид
На этапе коррекции используют формулу
Расчеты по методу Адамса - Башфорта выполняют так же, как
и по методу Милна, однако в отличие от последнего ошибка,
внесенная на каком-либо шаге, не имеет тенденции к
экспоненциальному росту.
Можно предположить, что поскольку значение
отбрасываемого члена известно, его можно использовать для уточнения
скорректированного значения зависимой переменной. Однако
это было бы равноценно использованию системы более
высокого порядка точности. Так как внесение поправок в
корректирующий член может отрицательно сказаться на устойчивости
счета, для повышения точности счета следует прибегать к
методам более высоких порядков точности.
Метод Хэмминга
В методе Хэмминга используют следующие формулы:
прогноза
*0)п+1=Уп-3+4№Ъп'-У'п-1 + 2у'п-2)>
137
уточнения прогноза
коррекции
Это устойчивый метод четвертого порядка точности, в основе
которого лежат следующие формулы: прогноза
и коррекции
Особенностью метода Хэмминга является то, что он позволяет
оценивать погрешности, вносимые на стадиях прогноза и
коррекции и устранять их. Благодаря простоте и устойчивости
этот метод является одним из наиболее распространенных
методов прогноза и коррекции.
5.4 КРАТКАЯ ХАРАКТЕРИСТИКА МЕТОДОВ
ПРОГНОЗА И КОРРЕКЦИИ
По сравнению с одношаговыми методами методы прогноза и
коррекции имеют ряд особенностей:
1. Для реализации методов прогноза и коррекции необходимо
иметь информацию о нескольких предыдущих точках:
другими словами, они не относятся к числу "самостартующих"
методов. Для получения исходной информации приходится
прибегать к какому-либо одношаговому методу. Если в
процессе решения дифференциальных уравнений методом
прогноза и коррекции изменяется шаг, то обычно
приходится временно переходить на одношаговый метод.
2. Поскольку для методов прогноза и коррекции требуются
данные о предыдущих точках, то соответственно
предъявляются и повышенные требования к объему и памяти
ЭВМ.
3. Одношаговые методы и методы прогноза и коррекции
обеспечивают примерно одинаковую точность результатов.
Однако вторые в отличие от первых позволяют легко
оценить погрешность на шаге. По этой причине, пользуясь
одношаговыми методами, шаг h обычно выбирают
несколько меньшим, чем это, строго говоря, необходимо, и
поэтому методы прогноза и коррекции оказываются более
эффективными.
138
4. Применяя метод Рунге - Кутта четвертого порядка
точности, на каждом шаге приходится вычислять четыре
значения функции, в то время как для обеспечения сходимости
метода прогноза и коррекции того же порядка точности
часто достаточно двух значений функции. Поэтому методы
прогноза и коррекции требуют почти вдвое меньше
машинного времени, чем методы Рунге - Кутта сравнимой
точности. Это обстоятельство может оказывать сильное
влияние на выбор алгоритма, так как стоимость машинного
времени может оказаться весьма высокой.
5.5 ВЫБОР ШАГА
Одним из важных практических вопросов, которые встают
перед инженером, составляющим программы решения
дифференциальных уравнений, является выбор подходящего
значения шага. Если шаг слишком мал, то расчет потребует
неоправданно много машинного времени, а число ошибок на
отдельных шагах, складывающихся в суммарную ошибку, будет
весьма велико. Если же, наоборот, шаг выбран слишком
большим, то значительной окажется локальная погрешность,
обусловленная усечением рядов, и накопившаяся суммарная
ошибка станет также недопустимо большой.
Обычно, рыбирая шаг, стремятся, чтобы локальная ошибка
на шаге была меньше некоторой заданной допустимой
величины. Вообще говоря, если порядок точности метода равен я, то
локальная ошибка определяется выражением
Chn+\
где С - некоторая постоянная, а Л - шаг. Если используют
один из методов прогноза и коррекции, то ошибка на шаге
часто определяется значением последнего члена в формуле
коррекции (см., например, раздел, посвященный методу
Милна). При использовании же метода Рунге - Кутта локальную
ошибку не удается выразить в столь явной форме. Один из
способов оценки этой ошибки основан на экстраполяции
Ричардсона, речь о которой пойдет в следующих разделах.
Если для вычисления значения искомой функции у.+1 в
точке Xj+1 используют шаг А, то разность между истинным и
вычисленным значениями составляет
Если уменьшим шаг вдвое и вычислим У*у+1 в точке дсу+1, то
получим
Вычитая это выражение из предыдущего, найдем
139
Отсюда можно найти локальную погрешность
Недостатком этого метода является то, что значение >>+1
приходится вычислять дважды. Так как, для того чтобы
вычислить y*;+i в точке х.Ч1, приходится делать два шага, каждый
из которых равен половине исходного, объем вычислений
увеличивается более чем вдвое. Тем не менее эту процедуру
часто включают в вычислительный алгоритм для автоматического
изменения шага в процессе вычислений и часто используют в
методах Рунге - Кутта. Если же ошибка на шаге при данном
его значении слишком велика, ее можно уменьшить,
используя при вычислениях член более высокого порядка. Это,
конечно, легче сделать в случае методов прогноза и коррекции.
Главные достоинства методов Рунге - Кутта - простота
начала счета и возможность быстрого изменения шага в процессе
вычислений. С другой стороны, главным достоинством метода
прогноза и коррекции является простота оценки ошибки на
шаге. Раньше считалось, что эти достоинства нельзя
совместить в одном алгоритме. Однако в настоящее время
разработаны высокоэффективные алгоритмы, позволяющие
использовать преимущества обеих групп вычислительных методов.
Такие гибридные методы могут быть весьма полезны при
решении инженерных задач.
5.6 «ЖЕСТКИЕ» ЗАДАЧИ
Некоторые обыкновенные дифференциальные уравнения не
решаются ни одним из рассмотренных выше методов. Чтобы
понять, почему это так, необходимо четко представлять
структуру решения дифференциального уравнения. Постоянная
времени дифференциального уравнения первого порядка - это
промежуток времени, по истечении которого значение
нестационарной части решения убывает в е"1 раз. В общем случае
дифференциальное уравнение n-го порядка имеет п
постоянных времени. Если значения любых двух из них сильно
отличаются или если одна из постоянных времени достаточно
мала по сравнению с интервалом времени, для которого
отыскивается решение, то задачу называют "жесткой" и ее
практически невозможно решить обычными методами. В таких случаях
шаг должен быть достаточно мал, чтобы можно было
учитывать изменение наиболее быстро изменяющихся членов
уравнения даже после того, как их вклад станет практически
незаметным. Если шаг не удается сохранить достаточно малым, то
решение становится неустойчивым. Несмотря на то что
трудности, связанные с обеспечением устойчивости решения "жест-
140
ких" задач обычными методами, можно временно обойти,
уменьшив шаг, такой подход имеет два недостатка. Во-первых,
если шаг очень мал по сравнению с интервалом, для которого
отыскивается решение, то для получения решения потребуется
очень много времени. Во-вторых, накапливающиеся в процессе
длительных вычислений погрешности округления и усечения
могут привести к получению бессмысленного результата.
С "жесткими" задачами мы сталкиваемся при решении
важных задач управления, расчета электрических сетей,
химических реакций и пр., поэтому разработке эффективных
методов решения таких задач в последнее время уделяется много
внимания.
5.7 МЕТОДЫ РЕШЕНИЯ КРАЕВЫХ ЗАДАЧ
Как отмечалось выше, задачу, заключающуюся в решении
обыкновенного дифференциального уравнения при
дополнительных условиях, поставленных при нескольких значениях
независимой переменной, называют краевой.
Для простоты изложение будем вести на примере
обыкновенного дифференциального уравнения второго порядка
dVd*2=/(*, У, у')
при граничных условиях
Уравнения более высоких порядков можно решить теми же
методами, которые разобьем на следующие две группы.
1. Методы, основанные на замене решения краевой задачи
решением нескольких задач Коши.
2. Методы, в которых используют конечно-разностную форму
дифференциального уравнения.
Методы «стрельбы»
Если обыкновенное дифференциальное уравнение второго
порядка является линейным, т.е. имеет вид
при дополнительных условиях
у(а)=Л и у(Ь)=В,
то краевую задачу можно свести к задаче Коши с помощью
начальных условий
у(а) = Л и у\а)-Х\-
Найдя решение уг(х), можно поставить другие граничные ус-
141
ловия
у(а)=Л
и получить второе решение у2(х)- Если y\(b)=J) ь а
причем Д i=J)2 , то решение
удовлетворяет обоим начальным граничным условиям.
Если решают нелинейное обыкновенное дифференциальное
уравнение, то решение краевой задачи можно свести к
решению нескольких задач Коши, последовательно вводя в
начальные условия значения оС
у(а)=Л и у'{а) = Л
и стремясь найти решение, удовлетворяющее условию у(Ь)=В.
При этом большую помощь может оказать интерполяция,
позволяющая построить упорядоченную последовательность и
свести к минимуму объем вычислений. К сожалению, этот
метод малоэффективен, и мы не можем рекомендовать его для
замены более совершенных методов, описанных в литературе.
Конечно-разностные методы
Достоинство конечно-разностных методов заключается в
том, что они позволяют свести решение краевой задачи к
решению системы алгебраических уравнений. При решении
двухточечной краевой задачи
У"=/(х, У, У')
при у(а)=А и у(Ь)=В интервал [а, Ь] можно разделить на п
равных частей:
xz.=x0+/A, /=1, 2, ..., п,
где хо = я, xn=b, a h=(b- а)/п. Значения решения у.- стремятся
получить в точках xi9 называемых узлами. Зная координаты
узлов и пользуясь конечно-разностными выражениями для
производных
дифференциальное уравнение можно представить в виде
разностного уравнения. (Отметим, что для производных
существуют различные формы конечно-разностных выражений. Вопрос
о разностных выражениях подробнее рассмотрен в следующей
главе.) Если записать это разностное уравнение для /=1, 2, ...,
п при двух краевых условиях, то задача сводится к решению
системы п - 1 алгебраических уравнений с п - 1 неизвестными
142
у.. Если исходное дифференциальное уравнение линейное, то
задача состоит в решении системы линейных алгебраических
уравнений. Если же исходное дифференциальное уравнение
нелинейное, задача сводится к решению системы нелинейных
алгебраических или трансцендентных уравнений. Хотя методы
решения таких линейных и нелинейных уравнение известны,
привести решение краевой задачи методом конечных
разностей к виду стандартной программы для ЭВМ трудно, так как
формулировка каждой задачи зависит от вида
рассматриваемого дифференциального уравнения.
ПРИМЕР I
53 |
I Пусть требуется решить дифференциальное уравнение Г
I y" = 2x+3y I
I при условиях I
I у(0) = 0, >>(!) = 1 I
1и шаге А=0,2. В разностной форме это уравнение имеет I
I I
вид
I Пользуясь эгой формулой и граничными условиями,!
I можно выписать следующую систему четырех линей-1
I ных уравнений с четырьмя неизвестными: I
I -2,12yi+y2=0,016, I
I у3-2,12у2+У1 = 0,032, I
I >>4-2,12>'з+>>2= -0,064, I
I =-0,936. I
IВ приведенной ниже таблице решение этой системы I
I уравнений сравнивается с точным решением I
X
0,0
0,2
0,4
численное решение
0,0
0,0827
0,1912
У
точное решение
0,0
0,0818
0,1897
143
0,6
0,8
1,0
0,3548
0,6088
1,0000
0,3529
0,6073
1,0000
5.8 ВЫБОР АЛГОРИТМА РЕШЕНИЯ ОБЫКНОВЕННЫХ
ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
Сформулировать общие правила выбора наилучшего метода
решения того или иного обыкновенного дифференциального
уравнения невозможно. Однако можно рекомендовать
руководствоваться при этом следующими соображениями.
1. Учитывать тип задачи. Если это задача Коши, то • можно
воспользоваться одной из готовых подпрограмм,
позволяющих получить решение. Если же это краевая задача, то,
возможно, придется составлять собственную программу.
2. Учитывать степень сложности дифференциального
уравнения. Если задача Коши очень сложна и вычисление
f(x, у) связано с большими трудностями, предпочтение
обычно отдают одному из методов прогноза и коррекции,
так как они требуют вычисления лишь двух значений
/(*, у) на шаге вместо четырех, как в методах Рун-
ге - Кутта. Если же вычисление f(x, у) не вызывает
затруднений, то более удобным часто оказывается один из
методов Рунге - Кутта.
3. Учитывать время, требуемое для решения задачи. Если в
первую очередь приходится учитывать стоимость
машинного времени, то лучшим оказывается метод прогноза и
коррекции. Если же определяющим является время
подготовки задачи к счету, то следует воспользоваться методом
Рунге - Кутта.
4. Учитывать требуемую точность решения. Вообще говоря,
чем выше порядок точности метода, тем более точным
будет полученный результат. Это утверждение справедливо
лишь до некоторой степени, так как конечно-разностные
аналоги производных по мере повышения порядка
аппроксимации ведут себя все хуже и хуже. Поэтому погрешность
метода при переходе от пятого порядка к более высоким
порядкам точности (что к тому же связано и с
дополнительными громоздкими вычислениями) практически не
убывает. Поскольку обычно достигается некоторый
компромисс между объемом и точностью вычислений, следует
уделять внимание как выбору порядка точности метода, так
и выбору шага. Поэтому большое распространение
получили алгоритмы, в которых автоматически изменяют шаг
интегрирования или порядок точности применяемого метода.
5. Учитывать имеющийся опыт. Предшествующие успехи или
неудачи в применении того или иного алгоритма для ре-
144
шения конкретной инженерной задачи могут предоставить
ценный материал для суждения о целесообразности выбора
подходящей программы. Это особенно важно в случае
"жестких" систем дифференциальных уравнений, так как до тех
пор, пока пользователь не убедится на практике в
неэффективной работе алгоритма, обычно неизвестно, является ли
система жесткой.
Глава
Интерполяция
и приближение
кривыми
Процесс научного познания часто приводит к
количественным результатам. Именно эта количественная природа
научных и технологических задач вызывает необходимость
обработки числовой информации. В действительности ключ к
пониманию многих задач заложен в том, насколько продуманно
представлены описывающие их числовые данные. Напротив,
плохое представление данных часто приводит к заблуждениям,
неправильной интерпретации и даже к ошибкам
исследователей. Из-за компактности и больших вычислительных
возможностей микро-ЭВМ часто используют для анализа
экспериментальных данных в лабораторных условиях. При обращении с
данными научного и инженерного характера особенно
важными являются следующие основные вычислительные средства:
1) интерполяция,
2) приближение кривыми,
3) численное дифференцирование,
4) численное интегрирование.
Цель данной главы - обсудить первые две из этих тем
применительно к работе с экспериментальными данными.
Вопросы дифференцирования и интегрирования рассмотрены в
гл. 7.
6.1 ЛИНЕЙНАЯ ИНТЕРПОЛЯЦИЯ
Данные, с которыми приходится иметь дело инженеру и
ученому, часто представляют в виде таблиц. Это может быть
связано либо с тем, что они были получены экспериментально и
лишь для некоторых дискретных значений аргумента, либо с
тем, что объем таблиц ограничен и в них можно привести
лишь некоторые данные. Сущность интерполяции состоит в
отыскании значения функции в некоторой промежуточной
точке по отношению к табличным данным.
Простейшим видом интерполяции является линейная ин-
146
терполяция, в основе которой лежит аппроксимация кривой на
участке между точками (хк, ук) и (x^+i, >^ + 1) прямой,
проходящей через те же точки (рис. 6.1). Уравнение прямой
Vk-1
Рис. 6.1
можно представить в виде
или в виде
х~хк xk+i~xk
У к <<х~
Таким образом, зная два табличных значения ук и yk+v
соответствующих хк и х^+1, с помощью указанных формул можно
найти значение функции у при любом значении х в
интервале [хкь **+i]. Используя большее число соседних точек и
аппроксимируя истинную кривую более сложной линией, можно
уточнить полученный результат. В этом разделе изложены
методы нахождения единственного многочлена л-й степени
Рп(х), аппроксимирующего функцию f(x) кривой, проходящей
через все п + 1 заданные в таблице точки (xiy yz), где
/ = 0, 1, . . ., п. В этом случае говорят, что многочлен
удовлетворяет условиям
рп (хд = 3>i при / = 0, 1, . . ., п.
Методы отыскания такого многочлена делятся на три группы:
методы Лагранжа, разностные методы и итерационные
методы.
147
6.2 ИНТЕРПОЛЯЦИЯ ПО ЛАГРАНЖУ
При этой интерполяции задают п + 1 табличное значение
(*/> У[)> где / = 0, 1, . . ., п. Предполагают, что точки
(xi9 yt) принадлежат кривой у = f{x) в интервале х0 <: х ^ хп.
Интерполяционный многочлен для этого метода имеет вид
рп(*) = 3>о ьо(х) + У\ 4х) + • • • + Уп Ьп(х\
где все Ь.{х) - многочлены степени пу коэффициенты которых
можно найти с помощью п + 1 уравнений
рп(хд = Уь г^е 1 = °» х> • • •» п-
В результате получим систему уравнений
>'о *оЫ + У1 *i(*b) + • • • + Уп ьп(хо) = Уо>
Уо ьо(хп) + У\ bi(xn) + • • • + Уп ьп(хп) = Уп-
Если значения Ь.{х^ выбраны так, что
Г1 при / = у,
[0 при / э* У,
то выписанные выше уравнения будут удовлетворены. Это
условие означает, что любой многочлен bj(x) равен нулю при
каждом Xj, кроме х.-. Следовательно, в общем случае
многочлен bj(x) имеет вид
*y{*) = C/*-*o)(*-*i) • • • (*-*y-i)(*-*y+i) • • • (х~хп)-
Так как b.{xj) = 1, то коэффициент С.- определяется
выражением
cj=1/(xj-xo)(xj-xi) • • • (*y-*y-i)(*y-*y+i) • • • (xj-*id-
Наконец, для искомого многочлена получаем
п (х-х0) (х-х{) ...(х-х^^ (x-xJ+l) ...(x-xn)
/п\Х) — Lj V/
/ = 0 ' * (Xj-X0) (Xj-Xi) ...(Xj-Xj_x) (Xj-Xf+l) ...{Xj-Xn)
Введя обозначения
можем записать полученный многочлен в более компактном
виде
п Lf(x)
Для иллюстрации использования интерполяции по Лагран-
жу представим числовой пример.
148
ПРИМЕР
6.1
Пусть задана таблица
xi
10
20
30
40
50
60
У,
0,17365
0,34202
0,50000
0,64279
0,76604
0,86603
Эти данные соответствуют функции у = sin (xrp^S).
Необходимо, используя метод интерполяции по \Пагранжу,
найти значение у при х = 23.
Числовое значение у(23) при применении метода!
Лагранжа к этим данным получают используя формулу!
суммирования, приведенную в конце § 6.2. Из приве-1
денной ниже программы видно, этот процесс очень!
прост. Один шаг лагранжевой интерполяции выполняет-!
ся за счет двух циклов, начинающихся с предложения!
3340 и заканчивающихся предложением 3440 программы!
на бейсике. I
1000 REM *****•♦♦****•*♦**♦**•♦*••**••**********
1010 REM • ЭТА ПРОГРАММА НАХОДИТ ПРОМЕЖУТОЧНЫЕ
1020 REM * ЗНАЧЕНИЯ ПО ТАБЛИЦЕ ЗНАЧЕНИЙ
1030 REM * МЕТОДОМ ИНТЕРПОЛЯЦИИ ПО ЛАГРАНЖУ
1040 REM ***************************************
1100 \
1110 \
1120 REM •• ЗАДАНИЕ ТАБЛИЦЫ **
ИЗО \
1135 М = 5
1140 DIM X(6),Y(6)
iicn PR TNT " "
1155 PRINT и X Y
1157 PRINT " "
1160 FOR I = 0 TO M
1180 READ X(I),Y(I)
1185 PRINT X(I); TAB(10); Y(I)
1190 NEXT I
1210 DATA 10.,0.17365,20.,.34202
1220 DATA 30.,0.50000,40.,64279
1230 DATA 50.,0.76604,60.,.86603
1240 PRINT " "
1250 \
1260 XI = 23.
149
1270 REM ** НАХОЖДЕНИЕ ИНТЕРПОЛЯЦИОННЫХ ЗНАЧЕНИИ
1290 \
1300 GOSUB 3000
1310 \
1320 \
1330 REM •• ПЕЧАТЬ ОТВЕТА ••
1340 \
1420 PRINT "ПРИ Х = ";Х1
1425 PRINT "Y = ";Y1
1430 \
1440 STOP
1450 \
1460 \
1470 \
3000 REM ***************************************
ЗОЮ REM * ЭТА ПОДПРОГРАММА ИСПОЛЬЗУЕТ
3020 REM * ИНТЕРПОЛЯЦИЮ ПО ЛАГРАНЖУ ДЛЯ
ПОЛУЧЕНИЯ ПРОМЕЖУТОЧНЫХ ЗНАЧЕНИЙ
ФУНКЦИИ ПО ТАБЛИЦЕ ЗНАЧЕНИЙ
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM
3160 REM
3170 REM
3180 REM
3190 REM
3200 REM
3210 REM •••'
3310 \
3320 \
3330 Y1 = 0
3340 FOR J =
3350 Z1 = 1.
3355 Z2 = 1.
3360 \
3370 FOR I =
3380 IF I = J
3390 Zl = Zl
3400 Z2 = Z2
3410 NEXT I
3420 \
3430 Yl = Yl
3440 NEXT J
3450 \
3460 RETURN
3470 \
4000 END
ПАРАМЕТРЫ:
X(I) - МАССИВ ЗНАЧЕНИЙ
АРГУМЕНТА
Y(I) - МАССИВ ЗНАЧЕНИЙ
ФУНКЦИИ
М - ДЛИНА МАССИВОВ X, Y
XI - ВХОДНОЕ ЗНАЧЕНИЕ X
Y1 - НАЙДЕННОЕ
ЗНАЧЕНИЕ ФУНКЦИИ
0 ТО М
0 ТО М
GOTO 3410
* (XI - Х(1))
* (X(J) -
+ Y(J) * Zl / Z2
150
I Результат выполнения программы следующий
X
10
20
30
40
50
60
ПРИ Х =
Y= .39073
Y
.17365
.34202
.5
.64279
.76604
.86603
23
Для достижения этого результата требуется менее!
2 с. Основным преимуществом лагранжевой интерполя-1
ции являются ее простота и быстрота. Недостаток мето-1
да в том, что, для того чтобы найти интерполяционное!
значение для другого значения х, требуется перезапу-1
стить программу. I
6.3 МЕТОД РАЗДЕЛЕННЫХ РАЗНОСТЕЙ
Существует множество разностных методов интерполяции,
однако наиболее распространен метод Ньютона для
интерполирования вперед, известный также как метод Ньютона -
Грегори. Интерполяционный многочлен для этого метода имеет вид
рп(х) = со + ci(x~ хо) + С2(х~ хо)(х- хг) + • • •
. . . + сп(х-х0)(х-хг). • .(*-*n-i).
Коэффициенты су. находят из уравнений
позволяющих записать систему
со = Уо>
С0 4- сх (Хг - Х0) = Уь
с0 + С1 (Х2 - Х0) + С2 (Х2 ~ Х0) (Х2 - Х\) = УЬ
СО + • - • + Сп (Хп - Х0) (Хп - ХХ) . . . (Хп - Хп_ г) = Уп.
Это линейная система уравнений с треугольной матрицей, и
определение с ее помощью значений су. не вызывает
затруднений. Однако существует и еще более простой способ определе-
151
ния ch основанный на применении правых конечных
разностей. Если значения х заданы через равные промежутки
v - y - h
то в общем случае х,- = х0 + /Л, где / = 1, 2, . . ., п.
Последнее выражение позволяет привести решаемые уравнения к ви-
ДУ
Уо = со>
У\ = со + С\К
y2 = c0 + c1(2h) + 2h2c2y
откуда для коэффициентов получаем
со =
/z h И •
Здесь ^у0 называют первой правой разностью. Продолжая
вычисления, находим
Л - —L'~ -2hcx)= l r'
777O2 0 x)
2Л 2Л
2h2 '
2
где d Уо - вторая правая разность, представляющая собой
разность разностей. Коэффициент Cj можно представить в виде
U'\)hf
В общем случае разности более высоких порядков для
функции у = / (х) в интервале х0 ^ х ^ хп определяются
выражением , где i = О,
/ Jl 71
у.
1, . . ., n-j. Часто их сводят в таблицы, подобные табл. 6.1,
где разности порядка п выражены через разности порядка
п -1. Продемонстрируем применение метода интерполяции
Ньютона на следующем примере.
152
Таблица 6.1. Правые разности
Xj У i A.v,=
-iy =дг,41-дду =A2.iy+1-
Л'0 -V0
Л'2 У 2
A2.V0
A2V3
A3.v0
ПРИМЕР
6.2
I
Применить метод разделенных разностей для оты-1
екания значения у(23), используя данные из примера!
6.1. I
На основе этих данных может быть построена сле-1
дующая таблица разностей. I
10
20
30
40
50
60
град у;
0,17365
0,34202
0,50000
0,64279
0,76604
0,86603
-
0,16837
0,15798
0,14279
0,12325
0,09999
-
_
- 0,01039
- 0,01519
- 0,01954
- 0,02326
-
-
- 0,00480
- 0,00435
- 0,00372
-
A % A %
1
-
0,00045
0,00018
0,00063
-
I За х0 можно принять любое xif например х = 20°. I
I Необходимые разности стоят на диагонали, идущей от1
I х0 вниз. Число используемых разностей высших поряд-1
| ков может быть любым, но чем оно больше, тем выше |
153
точность. Одно из достоинств рассматриваемого метода!
состоит в том, что он позволяет уточнять результат ис-1
пользуя дополнительные разности, причем нет необхо-1
димости начинать вычисления сначала. Поэтому в слу-1
чае, если неизвестно, сколько членов следует взять, их1
число можно увеличивать до тех пор, пока их вклад не1
станет пренебрежимо малым. В данном случае Л = 10°. I
Используя только первую разность, найдем I
у(23) = >>+(А у0)/ Л (23 - х0) = 0,34202+ (0,15798/10) • 3 = I
= 0,38941. I
Введя дополнительно вторую разность, получим I
у (23) = 0,38941 + (А у0)/ h (23 - х) (23 - хг) = 0,39100. I
Наконец, с помощью третьей разности найдем I
у(23)=0,39100 + [(Д Ч)/(6ЛЗ)](23 - х)(23 - хг)(73 - х£= I
= 0,39074. I
Совершенно очевидно, что это значение у очень близко!
к точному, равному 0,39073. I
С помощью единожды построенной таблицы разно-1
стей можно отыскивать интерполяционные значения, не!
обращаясь к начальной стадии процедуры. I
Процедура может быть реализована на микро-ЭВМ. I
Соответствующий пример программы на бейсике приво-1
дится ниже. I
1000 REM ••••••••••••••••••••••••••••••••••••••••••••••••••
1010 REM • ЭТА ПРОГРАММА НАХОДИТ ПРОМЕЖУТОЧНЫЕ
1005 REM * ЗНАЧЕНИЯ
1020 REM • ФУНКЦИИ ПО ТАБЛИЦЕ ДАННЫХ МЕТОДОМ
1015 REM • НЬЮТОНОВСКОЙ
1030 REM • ИНТЕРПОЛЯЦИИ ВПЕРЕД
1040 REM •••••••••••••• — ••••••••••••••••••••••••••••• — •
1050 \
1060 \
1110 REM •• ЗАДАНИЕ ТАБЛИЦЫ ••
1120 \
ИЗО LET M = 5
1135 LET H = 10.
1140 DIM X(6), Y(6), D(6)
1150 PRINT " м
1160 PRINT и X Y
1170 PRINT " "
1180 FOR I = 0 TO M
1190 READ X(I), Y(I)
1200 PRINT X(I); TAB(10); Y(I)
1210 NEXT I
1220 DATA 10., 0.17365, 20., 0.34202
1230 DATA 30, 0.50000, 40., 0.64279
154
1240 DATA 50., 0.76604, 60.. 0.86603
1250 PRINT " "
1260 \
1270 LET XI = 23.
1280 REM •• НАХОЖДЕНИЕ ИНТЕРПОЛЯЦИОННОГО ЗНАЧЕНИЯ
1290 \
1300 GOSUB 3000
1310 \
1320 \
1330 REM •• ПЕЧАТЬ ОТВЕТА ••
1340 \
1350 PRINT "ПРИ Х = "; XI
1360 PRINT "Y = "; Yl
1370 \
1380 STOP
1390 \
1400 \
1410 \
3000 REM ••••••••••••••••••••••••••••••••••••••••••••••••••
3010 REM * ЭТА ПОДПРОГРАММА
НЬЮТОНОВСКУЮ
ИНТЕРПОЛЯЦИЮ
ПРОМЕЖУТОЧНОГО
ЗНАЧЕНИЙ
ИСПОЛЬЗУЕТ
ПАРАМЕТРЫ:
3005 REM
3020 REM
3030 REM
3025 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM
3160 REM
3170 REM
3180 REM
3190 REM ••••■
3370 \
3380 \
3390 LET Yl =
3395 LET F0 =
3400 \
3410 FOR I = 0 TO M
3420 LET D(I) = Y(I)
3430 NEXT I
3440 \
3450 FOR II = 1 TO M
3460 FOR I = 0 TO M - II
3470 LET D(I) = D(I + 1) -
3480 NEXT I
3490 LET F0 = F0 * II
3500 LET С = D(0) / (F0
ВПЕРЕД
ЗНАЧЕНИЯ
ДЛЯ ПОЛУЧЕНИЯ
ПО ТАБЛИЦЕ
М
Н
XI
Y1
- МАССИВ ЗНАЧЕНИЙ АРГУМЕНТОВ В ТАБЛИЦЕ
- МАССИВ ЗНАЧЕНИЙ ФУНКЦИИ В ТАБЛИЦЕ
- ДЛИНА ТАБЛИЦЫ
- ШАГ ПРИРАЩЕНИЯ ПО X
- ВХОДНОЙ АРГУМЕНТ
- НАЙДЕННОЕ ЗНАЧЕНИЕ ФУНКЦИИ
Y(0)
1.
Н л II)
155
3510 LET PI = 1.
3520 FOR J = 0 TO II - 1
3530 LET PI = PI • (XI - X(J))
3540 NEXT J
3550 Yl = Yl + С * PI
3560 PRINT Yl
3570 NEXT II
3580 RETURN
Результат выполнения программы следующий
X
10
20
30
40
50
60
.392531
.390505
.390723
.390732
.39073
ПРИ Х =
Y= .39073
Y
.17365
.S4202
5
.64279
.76604
.86603
23
I Для достижения этого результата требуется менее I
I 2 с. Программа разработана так, чтобы выводить на пе-1
I чать промежуточные интерполяционные значения. Чи-1
I татель заметит, что если в интерполяционную процеду-1
I ру добавляется больше членов, точность этих значений I
I увеличивается. Эта программа не сохраняет в памяти I
I таблицу разностей и поэтому ее нельзя без перезапуска!
I заново использовать для отыскания других промежуточ-1
I ных значений. Для того чтобы это стало возможным,!
I нужно добавить память для массивов. I
Используя другие разности, получим другие
интерполяционные схемы, например метод Ньютона для интерполяции
назад, методы Гаусса для интерполяции вперед и назад.
6.4 ИТЕРАЦИОННЫЕ МЕТОДЫ ИНТЕРПОЛЯЦИИ
Эти методы основаны на повторном применении простой
интерполяционной схемы. Наиболее известным из них является
излагаемый ниже метод Эйткена, сущность которого состоит
в повторном применении линейной интерполяции.
156
Выше было показано, что линейная интерполяция между
точками (х0, >>0) и (xh y() осуществляется по формуле
Уп (*) = (*/ ~хо)~1 [Уо (xi ~х)- У/ (*о - Х)Ъ
с помощью которой, задав значение хь можно составить
таблицу функций уа (х), где / = 1, 2, . . ., п. Пользуясь этими
функциями, с помощью линейной интерполяции
Уа (х) = (*/ ~ хг)" Чуп (х) (xi ~х)~ Уп (х) (xi - х)]
получим новое семейство соотношений. Простой подстановкой
можно показать, что выражения для у%(х) представляют собой
многочлены второй степени, описывающие кривые,
проходящие через точки (дс0, у0), (хь ух) и (xh yj). Получив
многочлены у% с помощью линейной интерполяции и используя
функции yi2 (x), можно записать выражение для многочлена
третьей степени
(xi ~х)- Уа W (Х2 - Х)Ъ
описывающего кривые, проходящие через точки (дс0, у0),
(хь У1)» (х2» Ут) и (хь У/)- Продолжая этот процесс, получим
значения Уц(х\ которые будут стремиться к значению f(x).
Хотя в принципе этот метод позволяет вводить многочлены
степени п > 3, обычно стремясь избежать роста ошибок, этого
не делают. Следует, однако, отметить, что метод Эйткена не
требует, чтобы используемые для интерполяции значения
функции были расположены через равные интервалы.
Применим метод Эйткена к примеру 6.1.
ПРИМЕР I
" : I
Пусть пример 6.1 требуется решить методом Эйтке-1
на. Ниже приведена таблица результатов, полученных!
путем многократного применения линейной интерполя-1
ции при х = 23°. Видно, что по мере выполнения вы-1
числений значения у (23°) стремятся к истинному значе-1
нию, равному 0,39073. I
i
0
1
2
3
4
5
xi
10°
20°
30°
40°
50°
60°
>7
0,17365
0,34202
0,50000
0,64279
0,76604
0,86603
УП
-
0,39253
0,38578
0,37694
0,36618
0,35367
Уа
-
0,39051
0,39019
0,38990
0,38962
Ув
-
0,39073
0,39072
0,39072
I Эта процедура может быть реализована на микро-1
157
I компьютере. Следующая программа на бейсике иллюст-1
I рирует применение метода Эйткена для решения зада-1
I чи интерполяции. I
1000 REM ••••••••••••••••••••••••••••••••••••••••••••••••••
1010 REM • ЭТА ПРОГРАММА НАХОДИТ ПРОМЕЖУТОЧНОЕ
1005 REM • ЗНАЧЕНИЕ
1020 REM * ПО ТАБЛИЦЕ МЕТОДОМ ЭЙТКЕНА
1030 REM ••••••••••••••••••••••••••••••••••••«•••••••••••••
1100 \
1110 \
1120 REM ** ЗАДАНИЕ ТАБЛИЦЫ ••
ИЗО \
1135 LET M = 5
1140 DIM X(6), Y(6), D(6)
iicn PRTISJT " "
1155 PRINT " X Y
11^7 PRTVT H и
1160 FOR I = 0 TO M
1180 READ X(I), Y(I)
1185 PRINT X(I); TAB(10); Y(I)
1190 NEXT I
1210 DATA 10., 0.17365, 20., 0.34202
1220 DATA 30., 0.50000, 40., 0.64279
1230 DATA 50., 0.76604, 60., 0.86603
1240 PRINT " "
1250 \
1260 LET XI = 23.
1270 REM •• НАХОЖДЕНИЕ ИНТЕРПОЛЯЦИОННОГО ЗНАЧЕНИЯ ••
1290 \
1300 GOSUB 3000
1310 \
1320 \
1330 REM ** ПЕЧАТЬ ОТВЕТА **
1340 \
1420 PRINT "ПРИ Х = "; XI
1425 PRINT "Y = "; Yl
1430 \
1440 STOP
1450 \
1460 \
1470 \
3000 REM ••••••••••••••••••••••••••••••••••••••••••••••••••
3010 REM * ЭТА ПОДПРОГРАММА ИСПОЛЬЗУЕТ МЕТОД
3005 REM * ИНТЕРПОЛЯЦИИ
3020 REM * ЭЙТКЕНА ДЛЯ ОПРЕДЕЛЕНИЯ ФУНКЦИИ ПО ТАБЛИЦЕ
3030 REM •
3040 REM • ПАРАМЕТРЫ:
3050 REM *
3060 REM • Х(1) - МАССИВ ЗНАЧЕНИЙ АРГУМЕНТА В ТАБЛИЦЕ
3070 REM *
3080 REM • Y(I) - МАССИВ ЗНАЧЕНИЙ ФУНКЦИИ В ТАБЛИЦЕ
3090 REM *
3100 REM • М - РАЗМЕРНОСТЬ ТАБЛИЦЫ
158
3110 REM •
3120 REM • XI
3130 REM
3140 REM
3150 REM •
3160 REM •••••••••••••
3310 \
3320 \
3330 FOR I = 0 TO M
3340 LET D(I) = Y(I)
3350 NEXT I
TVSO \
3370 FOR И
- ВХОДНОЙ АРГУГМЕНТ
Yl - НАЙДЕННОЕ ЗНАЧЕНИЕ ФУНКЦИИ
3380
3390
3392
3394
3400
3410
3420
FOR I =
1 TO M
И TO M
- XI
LET Dl = D(I1 - 1) *
LET D2 = D(I) * ( X(I1 - 1) - XI )
LET D(I) = ( Dl - D2 ) / ( X(I) - X(I1 - 1) )
NEXT I
PRINT "ПОСЛЕ "; II; " ИТЕРАЦИИ ЗНАЧЕНИЕ Y = "; D(I1)
NEXT II
3430 LET Yl =
Ш0 PRINT
3450 RETURN
4000 END
D(M)
Результат выполнения программы следующий.
10
20
30
40
50
60
ПОСЛЕ 1
ПОСЛЕ 2
ПОСЛЕ 3
ПОСЛЕ 4
ПОСЛЕ 5
ПРИ Х =
Y= .39073
.17365
.34202
.5
.64279
.76604
.86603
ИТЕРАЦИИ
ИТЕРАЦИИ
ИТЕРАЦИИ
ИТЕРАЦИИ
ИТЕРАЦИИ
23
ЗНАЧЕНИЕ
ЗНАЧЕНИЕ
ЗНАЧЕНИЕ
ЗНАЧЕНИЕ
ЗНАЧЕНИЕ
Y =
Y =
Y =
Y =
Y =
.392531
.390505
.390723
.390732
.39073
Для достижения этих результатов необходимо мень-1
ше 2 с. Программа разработана так, чтобы печатать!
промежуточные результаты. Читатель заметит, что точ-1
ность этих результатов увеличивается, если для вычис-1
ления интерполяционных значений используют больше!
членов. I
159
6.5 ОБРАТНАЯ ИНТЕРПОЛЯЦИЯ
Это алгоритм, с помощью которого находят значение
аргумента х, соответствующее заданному значению функции у, которое
лежит между двумя его значениями, приведенными в таблице.
Чтобы применить изложенные выше методы, нужно
видоизменить таблицу, поменяв в ней местами х и у. Единственный
недостаток этого приема заключается в том, что теперь
значения аргумента не расположены через равные интервалы. Это
исключает использование тех методов, для которых шаг
аргумента должен быть обязательно постоянным.
6.6 АППРОКСИМАЦИЯ КРИВЫХ МЕТОДОМ
НАИМЕНЬШИХ КВАДРАТОВ
Существует два основных подхода к аппроксимации
табличных данных кривыми. При одном из них требуют, чтобы
аппроксимирующая кривая (возможно, кусочно-гладкая)
проходила через все точки, заданные таблицей. Это удается сделать с
помощью методов интерполяции, рассмотренных выше. При
другом подходе данные аппроксимируют простой функцией,
применимой во всем диапазоне табличных данных, но не
обязательно проходящей через все точки. Такой подход называют
подгонкой кривой, которую стремятся провести так, чтобы ее
отклонения от табличных данных были минимальными.
Обычно стремятся свести к минимуму сумму квадратов
разностей между значениями функции, определяемыми выбранной
кривой и таблицей. Такой метод подгонки называют методом
наименьших квадратов.
Метод наименьших квадратов
Пусть в таблице задана п + 1 точка (х0, у0), (xv уг), . . .,
(хп> Уп) и требуется найти аппроксимирующую кривую g(x) в
диапазоне х0 ^ х ^ хп. В этом случае погрешность в каждой
табличной точке составит
Тогда сумма квадратов погрешностей определится выражением
Е= £ [g(Xi)-yi]2.
/=о
Обычно функцию g(x) выбирают в виде линейной
комбинации подходящих функций
= с\
160
= 0.
Условие минимума Е определяется уравнениями
Ъ_Е _ ЪЕ_ _ _ ЪЕ
Ъс\ Ъс'2 Ъск
Поскольку
п
Е= 2
то это условие эквивалентно системе уравнений
ЪЕ
Ъсх
ЪЕ
Ъск
i)-^... + ckgk(xt) - yt] gk(xt) = 0.
Эти к уравнений, очевидно, можно представить в виде
ck
Так как элементы матрицы в левой части и вектор-столбца в
правой определяются табличными данными, то выписанная
система к линейных уравнений с к неизвестными может быть
решена. Можно выбрать любую функцию g(x), лишь бы она
была линейной относительно своих коэффициентов.
Фактический выбор функции должен осуществляться с учетом
специфики табличных данных, под которой понимается их
периодичность, экспоненциальный или логарифмический характер,
свойства симметрии и наличие асимптотики.
Иногда таблицу разбивают на несколько частей и
подбирают отдельную аппроксимирующую кривую для каждой части,
однако делать это надо осмотрительно. Такой подход оправдан
в тех случаях, когда есть основания полагать, что
аппроксимируемые данные соответствуют разным физическим состояниям
системы. Примерами могут служить переходы конструкции от
устойчивого состояния к неустойчивому, переходы от
дозвукового течения к сверхзвуковому или от ламинарного к турбу-
6 - 522 161
лентному. Пользуясь приближенной формулой, не следует
выходить за пределы интервала, в котором она справедлива.
Ортогональные полиномы
Если при построении аппроксимирующей функции в
качестве g^ (x) используют ортогональные полиномы, для которых
Zgj (*/) ft (*/) = 0 при / ф /,
то матрица выписанной в предыдущем разделе системы
уравнений окажется диагональной, а выражения для
коэффициентов Cj упростятся:
п
1 1 = 0 ' // = 0
Это очень облегчает задачу, и именно поэтому во многих
стандартных программах подгонки кривых используют
ортогональные полиномы.
Проблема приближения кривой по методу наименьших
квадратов иллюстрируется следующим примером.
I ПРИМЕР I
I** i
I Пластичные материалы в присутствии трещин I
I обычно становятся ломкими. I
I Это свойство называют трещинной чувствительно-\
\ стью. Такая чувствительность сильно связана с темпе-1
I ратурой, ее измеряют путем соударения с маятником I
I (тест Шарпи). В тесте Шарпи при соударении измеря-1
I ют энергию, накопленную стандартным образцом, под-1
I вергающимся тестированию. Результаты этого теста для I
I холоднокатаной стали определенной марки представле-1
I ны в следующей таблице. I
I
Температура, °С Энергия соударения Шарпи, Дж
-100 4,06
- 75 6,78 I
-50 9,49
- 25 16,27
0 40,67
25 97,62 I
50 146,63
75 151,85
100 162,70 I
162
I Предположим, что нам нужно построить такой по-1
I липом, с помощью которого эти данные можно было(
I бы описать во всей исследуемой области.
I Реальный выбор порядка того полинома, который
I будет использован для приближения по методу наи-
I меньших квадратов, зависит от природы эксперимен-
I тальных данных. Естественно, он должен быть меньше,
I чем полное число точек, заданных таблицей. Вообще |
I говоря, полином более высокого порядка приведет к ре-
I зультатам лучшим, чем полином меньшего порядка.
I Цена, которую придется заплатить за это лучшее пред-
I ставление, состоит в том, что теперь потребуется ре-
I шать систему с большим числом уравнений. Это приве-
I дет к программе, которая потребует больше памяти и
I больше времени на выполнение. Повышать порядок по-
I линома следует с осторожностью, поскольку в тех случа-
I ях, когда этот порядок достигает предельно допустимых I
I значений, решение может начать осциллировать между I
I данными и тем самым сильно исказить общее поведе-1
I ние данных. Если это произойдет, имеет смысл попро-1
I бовать различные порядки полиномов и выбрать тот, I
I который приводит к наиболее разумному результату. ВI
I рассматриваемом примере выбран полином четвертого!
I порядка. Ниже следует программа на бейсике, которая I
I реализует для него метод наименьших квадратов. Для I
I решения системы уравнений программа использует мо-1
I дификацию метода Холесского, представленного в гл. 3.1
1000 REM **************************************************
1010 REM * ЭТА ПРОГРАММА НАХОДИТ ПОЛИНОМИАЛЬНУЮ
1020 REM * АППРОКСИМАЦИЮ НАБОРА ДАННЫХ МЕТОДОМ
1030 REM * НАИМЕНЬШИХ КВАДРАТОВ
1040 REM **************************************************
1080 \
1090 \
1100 REM ** ЗАДАНИЕ ТАБЛИЦЫ **
1120 LET N = 9
1125 LET Kl = 5
ИЗО DIM X(10), Y(10)
1140 DIM A(6,7), C(6)
1150 PRINT "ЗНАЧЕНИЯ ВХОДНЫХ ДАННЫХ"
1160 PRINT " и
1170 PRINT " T ЭНЕРГИЯ"
1180 PRINT " ГРАД С ДЖОУЛИ"
11ОП PRINT1 "__ — _- "
1200 FOR I = 1 TO N
1210 READ X(I), Y(I)
1220 PRINT X(I); TAB(10); Y(I)
1230 NEXT I
163
1240 DATA - 100., 4.06, - 75., 6.78
1250 DATA -50., 9.49, -25., 16.27
1260 DATA 0., 40.67, 25., 97.62
1270 DATA 50., 146.43, 75., 151.85
1280 DATA 100., 162.70
1290 PRINT " "
1300 \
1310 REM •• НАХОЖДЕНИЕ КОЭФФИЦИЕНТОВ ••
1320 \
1330 GOSUB 3000
1340 \
1350 \
1360 REM ** ЗАПИСЬ ОТВЕТА **
1370 \
1380 PRINT
1385 PRINT "ДЛЯ ПОЛИНОМА"
1390 PRINT "ПОРЯДКА "; Kl -1
1400 PRINT "КОЭФФИЦИЕНТЫ РАВНЫ"
1410 PRINT "
1420 FOR I = 1 TO Kl
1430 PRINT ИС("; I; ") = "; C(I)
1440 NEXT I
1/КП PRTMT " "
1460 \
1470 STOP
1480 \
3000 REM **************************************************
НАХОЖДЕНИЕ ПОЛИНОМИАЛЬНОЙ АППРОКСИМАЦИИ
ПО НАБОРУ ЗАДАННЫХ ТОЧЕК МЕТОДОМ
ЗОЮ REM
3020 REM
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM
3160 REM
3170 REM
3180 REM
3190 REM
3200 REM
3210 REM
3220 REM
3230 REM
3510 \
3520 \
3530 REM
3540 FOR L =
3550 FOR M =
НАИМЕНЬШИХ КВАДРАТОВ
РЕЗУЛЬТИРУЮЩИЙ ПОЛИНОМ БУДЕТ ИМЕТЬ ВИД:
Y = С(1) + С(2) * X + С(3) • Хл2 + ...
ПАРАМЕТРЫ:
Х(1) - МАССИВ ЗНАЧЕНИЙ АРГУМЕНТА НА ВХОДЕ
ОТ Х(1) ДО X(N)
Y(I) - МАССИВ ЗНАЧЕНИЙ ФУНКЦИИ НА ВХОДЕ
ОТ Y(l) ДО Y(N)
N
- ЧИСЛО ЗАДАННЫХ ТОЧЕК
С(1) - МАССИВ ИСКОМЫХ КОЭФФИЦИЕНТОВ
К1
- ЧИСЛО КОЭФФИЦИЕНТОВ
ЗАГРУЗКА МАССИВА А
1 ТО К1
1 ТО К1
164
3560 LET SI = 0.
3565 LET S2 = 0.
3570 FOR I = 1 TO N
3580 LET SI = SI + X(ir(L-l) • Х(1)Л(М - 1)
3590 LET S2 = S2 + X(ir(L-l) • Y(I)
3600 NEXT I
3610 LET A(L,M) = SI
3620 LET A(L,K1 + 1) = S2
3630 NEXT M
3640 NEXT L
3650 \
3660 REM ** РЕШЕНИЕ СИСТЕМЫ МЕТОДОМ ХОЛЕССКОГО **
3690 \
3700 LET R = Kl
3705 LET С = Kl + 1
3710 GOSUB 4000
3720 \ '
3730 RETURN
3740 \
4000 REM ••••••••••••••••••••••••••••••••••••••••••••••••••
4010 REM * ЭТА ПОДПРОГРАММА ПРИМЕНЯЕТ МЕТОД
4020 REM * ХОЛЕССКОГО К МАТРИЦЕ ВИДА:
4030 REM *
4040 REM * A (R,C), ГДЕ R - СТРОКИ, С - СТОЛБЦЫ
4050 REM *
4060 REM * С ЧАСТИЧНЫМ ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА
4070 REM •*♦♦****•******♦************♦****♦***♦******♦***♦*
4110 \
4120 \
4130 REM ** МЕТОД ВЫБОРА ГЛАВНОГО ЭЛЕМЕНТА ••
4150 \
4160 FOR К = 1 ТО R
4170 \
4180 \
4190 REM •• НАХОЖДЕНИЕ ГЛАВНОГО ЭЛЕМЕНТА ••
4200 \
4210 LET Р = А(К,К)
4215 LET И = К
4220 FOR L = К+1 ТО R
4230 IF ABS (A(L,K)) < ABS (P) THEN GOTO 4260
4240 LET P = A(L,K)
4250 LET И = L
4260 NEXT L
4270 IF И = К THEN GOTO 4380
4280 \
4290 \
4300 REM ** ЗАМЕНА СТРОК **
4310 \
4320 \
4330 FOR LI = 1 TO С
4340 LET T = A(K,L1)
4350 LET A(K,L1) = A(I1,L1)
4360 LET A(I1,L1) = T
4370 NEXT LI
4380 NEXT К
165
4390 \
4400 \
4410 REM ** ВЫЧИСЛЕНИЕ ПЕРВОЙ СТРОКИ **
4420 \
4430 FOR J = 2 ТО С
4440 LET А(1Д) = A(1,J) / А(1,1)
4450 NEXT J
4460 \
4470 \
4480 REM •• ВЫЧИСЛЕНИЕ СТРОК **
4490 \
4500 FOR L = 2 ТО R
4510 \
4520 \
4530 REM ** ВЫЧИСЛЕНИЕ L-ТОГО СТОЛБЦА **
4540 \
4550 FOR I = L TO R
4560 LET S = 0.
4570 FOR К = 1TOL-1
4580 LET S = S + A(I,K) * A(K,L)
4590 NEXT К
4600 LET A(I,L) = A(I,L) - S
4610 NEXT I
4620 \
4630 \
4640 REM ♦* ВЫЧИСЛЕНИЕ L-ТОЙ СТРОКИ **
4650 \
4660 FOR J = L+l TO С
4670 LET S = 0.
4680 FOR К = 1TOL-1
4690 LET S = S + A(L,K) * A(KJ)
4700 NEXT К
4710 LET A(L,J) = (A(L,J) - S) / A(L,L)
4720 NEXT J
4730 NEXT L
4740 \
4750 \
4760 REM ** ПОЛУЧЕНИЕ ЗНАЧЕНИЯ С(1) ОБРАТНОЙ
ПОДСТАНОВКОЙ
4780 \
4790 LET C(R) = A(R,C)
4800 FOR M = 1 TO R -1
4810 LET I = R - M
4820 LET S = 0.
4830 FOR J = 1 + 1 TO R
4840 LET S = S + A(I,J) * C(J)
4850 NEXT J
4860 LET C(I) = A(I,C) - S
4870 NEXT M
4880 RETURN
5000 END
Результат выполнения программы следующий.
166
ЗНАЧЕНИЯ ВХОДНЫХ ДАННЫХ
т
ГРАД
-100
-75
-50
-25
0
25
50
75
100
ЭНЕРГИЯ
С ДЖОУЛИ
4.06
6.78
9.49
16.27
40.67
97.62
146.43
151.85
162.7
ДЛЯ ПОЛИНОМА ПОРЯДКА 4
КОЭФФИЦИЕНТЫ РАВНЫ
С( 1 )= 49.2061
С( 2 )= 1.46924
С( 3 )= .0103987
С( 4 )= -7.04054Е-05
С( 5 )= -7.12084Е-07
I Ддя получения результата требуется примерно 30 с.1
I Чтобы дать представление о полиноме, найденном с по-1
I мощью этого процесса, на сопровождающем рисунке по-1
I казаны экспериментальные данные и кривая, найденная I
| по коэффициентам, приведенным выше. |
160
по
120
^100
сз4
? соударения
п {
Г
1°
1 Ц.го порядна
/
-то
О 50 ЮО
Tetinepamypa, °C
167
6.7 СГЛАЖИВАНИЕ КРИВЫХ С ПОМОЩЬЮ СПЛАЙНОВ
Сплайны лишь недавно стали использовать в вычислительной
математике. Однако в машиностроительном черчении они
фактически применяются уже давно, так как сплайн - это не
что иное, как гибкая линейка, которую деформируют так,
чтобы по ней можно было провести кривую через заданные
точки (х;9 У}). Деформированная таким образом линейка
приобретает форму, при которой запасенная в ней упругая энергия
минимальна. Используя теорию изгиба бруса при малых
деформациях, можно строго показать, что сплайн - это группа
сопряженных кубических многочленов, в местах сопряжения
которых первая и вторая производные непрерывны. Такие
функции называют кубическими сплайнами. Чтобы построить
кубический сплайн, необходимо задать коэффициенты, которые
единственным образом определяют кубический многочлен в
промежутке между данными точками. Например, в случае,
представленном на рис. 6.2, необходимо задать все кубические
Уп-1 -
Уо -
функции дг(х), tf2(*), . . ., Qm(x). В наиболее общем случае
эти многочлены имеют вид
<*i (*) = hi + k2ix + k3i*2 + k4ix3> i=1> 2> • • •» m>
где kji - постоянные, определяемые указанными выше
условиями.
Первые 2т условий требуют, чтобы сплайны соприкасались
в заданных точках. Эти условия имеют вид
168
т ~
Следующие 2т - 2 условий требуют, чтобы в местах
соприкосновения сплайнов были равны первые и вторые производные:
Система алгебраических уравнений имела решение тогда, когда
число уравнений точно равно числу неизвестных. На данном
этапе мы имеем 4т неизвестных и 4/п - 2 уравнений.
Следовательно, мы должны найти еще два уравнения. Обычно
используют уравнения
<М(*о) = О и <Tm(*m) = 0-
Полученный таким способом сплайн называют естественным
кубическим сплайном. Найдя коэффициенты сплайна, эту
кусочно-гладкую полиноминальную функцию можно
использовать для представления данных при интерполяции, подгонке
кривой или поверхности.
На первый взгляд может показаться, что определение
коэффициентов сводится к решению 4т уравнений с 4т
неизвестными. Однако, специально выбрав вид кубических
многочленов, можно значительно упростить задачу. Если отдельные
кубические уравнения имеют вид
Qi (x) = ty^bt -1 + xt [kt __! - dt) £ - (*, - di) fit],
i = 1, . . ., m,
где
Axt = xt-xt_b t=(x-х^г)/Л хь 7=1-*,
a Ayt = У/-У|-_1 й А у(/А xi = db
то каждое из уравнений qt(x) содержит только два постоянных
неизвестных коэффициента. После того как первое уравнение
Qi(x) записано, с каждым следующим уравнением добавляется
только один новый неизвестный коэффициент. При этом при
х = xt_! t = 0, 7= 1, а при х = jcf- 1= 0, t = 1. Следовательно,
при таком выборе кубических многочленов автоматически
удовлетворяются все условия, кроме условий, налагаемых на
вторые производные. Последние для внутренних точек
выражаются соотношениями
а для двух внешних - соотношениями
2*о + *1 = Щ и *m-l + 2
169
Таким образом, решаемая система уравнений является
линейной, а ее матрица - трехдиагональной:
2
Ах2
О
Ах2)
о
2(Лх2 + Ах3)
Ахт
О
Ах2
2(Ахт_{+Ахт)Ахт_1
1 2
= 3
i
d1Ax2 + d2Axx
d2Ax3 + d3Ax2
d
В этой системе уравнений число определяемых
коэффициентов равно числу заданных точек. Поэтому решение
оказывается не более сложным, чем в случае аппроксимации т + 1
точек многочленом m-й степени. Часто оказывается, что
кубический сплайн аппроксимирует функцию лучше, чем многочлен
степени т. Следует отметить, что существуют и другие
сплайны, получающиеся при других условиях на концах или при
использовании многочленов более высоких степеней.
Проиллюстрируем сглаживание сплайном на примере,
использующем данные из примера 6.4.
I ПРИМЕР I
I6-5 I
I Пусть данные, используемые в примере 6.4, требует-1
1ся приблизить кубическим сплайном. Ниже следует!
I программа на бейсике, которая находит коэффициенты I
I этого кубического сплайна. Программа использует видо-1
I измененный метод Холесского, представленный в гл. 3,1
I для решения соответствующей системы уравнений. Ви-1
I доизменение состоит в том, что выбор ведущего эле-1
I мента не производится, что позволяет программе вы-1
Иполняться быстрее и уменьшает число операторов в1
I программе. I
170
ЭТА ПРОГРАММА НАХОДИТ КУБИЧЕСКИЙ СПЛАЙН
ПРОХОДЯЩИЙ ЧЕРЕЗ М + 1 ТОЧКУ
ЗАДАНИЕ ТАБЛИЦЫ
1000 REM
1010 REM
1020 REM
1030 REM
1060 \
1070 REM
1080 \
1090 LET M = 8
1100 DIM X(10), Y(10)
1110 DIM А(9,10), К(9)
1120 PRINT "ЗНАЧЕНИЯ ВХОДНЫХ ДАННЫХ
ИЗО PRINT " "
1140 PRINT и Т ЭНЕРГИЯ"
1150 PRINT и ГРАД С ДЖОУЛИ"
1160 PRINT " "
1170 FOR I = 0 TO M
1180 READ X(I), Y(I)
1190 PRINT X(I); TAB(IO); Y(I)
1200 NEXT I
1210 DATA - 100., 4.06, - 75., 6.78
1220 DATA -50., 9.49, -25., 16.27
1230 DATA 0., 40.67, 25., 97.62
1240 DATA 50., 146.43, 75., 151.85
1250 DATA 100., 162.70
1260 PRINT " "
1270 \
1280 REM ** НАХОЖДЕНИЕ КОЭФФИЦИЕНТОВ
1290 \
1300 GOSUB 3000
1310 \
1320 \
1330 \
1340 REM *
1350 \
1360 PRINT " "
1370 PRINT "КОЭФФИЦИЕНТЫ СПЛАЙНА
1380 PRINT " "
1390 FOR I
1400 PRINT
1410 NEXT
1420 PRINT
1430 PRINT
1440 \
1450 STOP
1460 \
1470 \
1480 \
3000 REM •
3010 REM •
3020 REM •
3030 REM •
3040 REM •
3050 REM •
3060 REM *
3070 REM * ПАРАМЕТРЫ:
ВЫВОД ОТВЕТА
= 0 TO M
"K("; 1;") = "
ЭТА ПОДПРОГРАММА НАХОДИТ КУБИЧЕСКИЙ СПЛАЙН,
КОТОРЫЙ ПРОХОДИТ ЧЕРЕЗ ЗАДАННЫЕ ТОЧКИ.
ИСПОЛЬЗУЕТСЯ МЕТОД ХОЛЕССКОГО БЕЗ ВЫБОРА
ГЛАВНОГО ЭЛЕМЕНТА
171
X(I) - МАССИВ ЗНАЧЕНИЙ АРГУМЕНТА НА ВХОДЕ
ОТ Х(0) ДО X(N)
Y(I) - МАССИВ ЗНАЧЕНИЙ ФУНКЦИИ НА ВХОДЕ
ОТ Y(0) ДО Y(N)
M + l
- ЧИСЛО ТОЧЕК И КОЛИЧЕСТВО ИСКОМЫХ
КОЭФФИЦИЕНТОВ
K(I) - МАССИВ НАЙДЕННЫХ КОЭФФИЦИЕНТОВ
- Y(0))
(Y(M) - Y(M - 1)) / (Х(М) - Х(М - 1))
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM
3160 REM
3170 REM
3180 REM
3190 REM
3200 REM ••••••••••••••••
3480 \
3500 \
3510 \
3520 FOR I = 0 TO M
3530 FOR J = 0 TO M
3540 LET A(I,J) = 0.
3550 NEXT J
3560 NEXT I
3570 LET A(0,0) = 2.
3575 LET A(0,l) = i.
3580 LET A(0,M + l) = 3. *
3590 LET A(M,M - 1) = 1.
3595 LET A(M,M) = 2.
3600 LET A(M,M + 1) = 3.
3610 \
3620 FOR I = 1 TO M -1
3630 LET A(I,I-1) = X(I + 1) - X(I)
3640 LET A(I,I + 1) = X(I) - X(I-l)
3650 LET A(I,I) = 2. * (A(I,I-1) + A(I,I + 1))
3660 LET Dl = ( Y(I) - Y(I-l) ) / A(I,I + 1)
3670 LET D2 = ( Y(I + 1) - Y(I) ) / A(I,I -1)
3680 LET A(I,M + 1) = 3.
3690 NEXT I
3700 LET R = M
3705 LET С = M + 1
3710 \
3720 \
3730 \
3740 REM ** ВЫЧИСЛЕНИЕ ПЕРВОЙ СТРОКИ
3750 \
3760 FOR J = 1 TO С
3770 LET A(0,J) = A(0,J) / A(0,0)
3780 NEXT J
3790 \
3800 \
3810 REM ** СТРОКИ И СТОЛБЦЫ **
3820 \
3830 FOR L = 1 TO R
3840 \
3850 \
3860 REM •• L-ЫЙ СТОЛБЕЦ ••
3870 \
- Х(0))
() ) / (, )
(Dl * A(I,I - 1) + D2 * A(I,
172
3880
3890
3900
3910
FOR
LET
FOR
LET
I = L
S = 0.
Kl =
s = s
TO R
0 TO L-l
+ A(I,K1)
A(K1,L)
3920 NEXT Kl
3930 LET A(I,L) = A(I,L) - S
3940 NEXT I
3950 \
3960 \
3970 REM ** L-Я СТРОКА ••
3980 \
3990 FOR J = L+l TO С
4000 LET S = 0.
4010 FOR Kl = ОТО L-l
4020 LET S = S + A(L,K1) * A(K1,J)
4030 NEXT Kl
4040 LET A(L,J) = ( A(L,J) - S ) / A(L,L)
4050 NEXT J
4060 NEXT L
4070 \
4080 \
4090 REM ** ЗНАЧЕНИЯ К(1) ПОЛУЧАЮТСЯ
4100 REM •• ОБРАТНОЙ ПОДСТАНОВКОЙ
4110 \
4120 LET K(R) = A(R,C)
4130 FOR Ml = 1 TO R
4140 LET I = R - Ml
4150 LET S = 0.
4160 FOR J = I + l TO R
4170 LET S = S + А(1Д) * K(J)
4180 NEXT J
4190 LET K(I) = A(I,C) - S
4200 NEXT Ml
4210 RETURN
5000 END
Результат выполнения программы следующий.
ЗНАЧЕНИЯ ВХОДНЫХ ДАННЫХ
т
ГРАД
-100
-75
-50
-25
0
25
50
75
100
ЭНЕРГИЯ
С ДЖОУЛИ
4.06
6.78
9.49
16.27
40.67
97.62
146.43
151.85
162.7
173
КОЭФФИЦИЕНТЫ СПЛАЙНА
К( 0 )= .113539
К( 1 )= .0993225
К( 2 )= .140771
К( 3 )= .476393
К( 4 )= 1.69526
К( 5 )= 2.50458
К( 6 )= .977629
К( 7 )= .0925061
К( 8 )= .604747
I Для его достижения требуется около 10 с. Коэффи-1
I циенты были использованы для построения соответству-1
I ющей кривой. Как и следовало ожидать, кубический I
| сплайн проходит через каждую из точек. |
160
по-
120
100
Кубический
сплайн
-50
О SO 100
Температура, °С
6.8 СООБРАЖЕНИЯ ПО ПОВОДУ ВЫБОРА МЕТОДА ИНТЕРПОЛЯЦИИ,
ПРИБЛИЖЕНИЯ КРИВОЙ ИЛИ СГЛАЖИВАНИЯ
Выбор алгоритма для задачи интерполяции, приближения
кривой или сглаживания сильно зависит от природы обрабаты-
174
ваемых данных и от желаемого результата на выходе.
Выбирая алгоритм для использования на малом компьютере, нужно
принимать во внимание ограничения этого устройства.
Несколько основных рекомендаций таковы.
1. Учитывать природу задачи и ее решений.
Интерполяционные методы более подходящи для данных с постоянным
шагом. Метод разделенных разностей не может быть
применен, если выполняется обратная интерполяция или
данные расположены произвольно. Если значения
функций требуется вычислить точно, эти значения могут быть
обеспечены процедурой, подобной итерационному методу,
где достигается требуемая степень точности. Если по
таблице данных требуется проинтерполировать большое
количество значения, метод разделенных разностей
становится экономичным с того момента, как составлена
исходная таблица разностей.
Приближение кривой по методу наименьших
квадратов предполагает, что пользователь сам выберет порядок
искомого полинома. Помочь ему сделать наилучший
выбор часто позволяет информация о природе данных,
например об асимптотике, симметрии, положении
особенностей. Часто оказывается полезным испытать для
заданных данных полиномы различных степеней и выбрать
окончательную полиномиальную кривую так, чтобы она
наилучшим образом описывала желаемые свойства.
Следует иметь в виду, что в случаях, когда степень
полинома приближается к максимально допустимой для
заданного набора данных, поведение полиномиальной кривой
нередко становится осциллирующим, поскольку только
таким способом кривую можно заставить пройти через
заданные точки. В этих случаях обычно лучше
использовать сплайны.
Некоторые данные удобно представлять в
логарифмической шкале. Тогда методы приближения кривой,
изложенные в этой главе, тоже могут быть применены, но
только к тем данным, которые приведены к своим
логарифмическим эквивалентам.
Некоторые данные удобно представлять не единой
кривой, а набором кусочно-гладких кривых. Так
происходит, коэда исследуемое научное или техническое явление
переходит из одной физической области в другую.
2, Учитывать объем памяти компьютера и требуемое время
выполнения. Часто возникает противоречие между
точностью и временем выполнения на компьютере, с одной
стороны, и требуемым объемом памяти-с другой. Это
влияет на выбор метода для интерполяции, приближения
кривой и сглаживания с помощью микрокомпьютера. На-
175
пример, метод наименьших квадратов и сглаживание
сплайнами требуют решения системы линейных
алгебраических уравнений. Когда порядок аппроксимации по
методу наименьших квадратов возрастает, число уравнений
в системе также увеличивается. В задаче со сплайнами
число уравнений возрастает с числом точек. Это
увеличение размеров системы влечет за собой продление
времени выполнения и существенное возрастание объема
памяти для массивов, требуемых для получения решения.
3, Учитывать промежуточные результаты. Промежуточная
информация относительно продвижения к получению
решения, выведенная на экран дисплея или принтер, часто
дает пользователю существенные сведения о поведении
процедуры решения, и поэтому обычно она оправдана,
даже несмотря на то, что процесс ее вывода отчасти
замедляет численное решение.
4. Учитывать требуемую точность. При выполнении
интерполяции, использовании кривых, полученных по методу
наименьших квадратов, и сплайнов следует позаботиться,
чтобы они были не более точными, чем исходные
данные, из которых они получены. Неправильно также
использовать информацию такого рода вне области
исходных данных.
176
Глава
Численное
дифференцирование
и интегрирование
При анализе инженерных и научных данных часто возникает
необходимость найти наклон кривой или площадь под
кривой. Для решения этих задач можно воспользоваться
графическим методом, однако нередко точность таких операций
ограничивает пригодность получаемых результатов. По этой
причине необходимы численные процедуры дифференцирования
и интегрирования. Целью настоящей главы является
изложение основ численного дифференцирования и интегрирования.
7.1 ЧИСЛЕННОЕ ДИФФЕРЕНЦИРОВАНИЕ
При некоторых обстоятельствах может возникнуть
необходимость аппроксимировать производную табулированных
значений функции. В этом случае числовые формулы для
приближенных производных могут быть получены из разложения в
ряд Тейлора или дифференцированием интерполяционных
формул, приведенных в гл. 6. Этот метод состоит в том,
чтобы подобрать полином, удовлетворяющий данным точкам, а
затем использовать производную полинома в качестве
производной табулированных значений. Чтобы не попасть в
западни, связанные с такой процедурой, полезно рассмотреть два
потенциальных источника встречающихся трудностей.
Первая трудность проистекает из природы табулированной
информации, полученной экспериментальными средствами. В
каждом экспериментальном измерении в большей или в
меньшей степени всегда присутствуют шумы или погрешности
эксперимента. Так действительный сигнал, показанный на
рис. 7.1, а, в результате измерений в присутствии шума
выглядит так, как изображено на рис. 7.1, б. Если эти данные
продифференцировать, влияние погрешности существенно
возрастет (рис. 7.1, в). С другой стороны, если данные с шумом
интегрируются (рис. 7.1, г), то влияние ошибки уменьшается.
Таким образом, численное интегрирование представляется
гораздо более устойчивой процедурой, чем численное
дифференцирование.
177
ф
Рис. 7.1
Вторая трудность, связанная с численным
дифференцированием, проиллюстрирована на рис. 7.2. Даже если
интерполяционный многочлен сможет адекватно описать табулированную
функцию, его производные высоких порядков могут
совершенно отличаться от таких производных табулированной
функции. Это можно увидеть на рис. 7.2, если сравнить наклоны и
радиусы кривизны двух кривых.
Для пояснения того, как формулы численного дифферен-
178
Рис. 7.2
цирования могут быть получены из интерполяционных
формул Лагранжа, приведем простой пример. Возьмем
интерполяционный многочлен второй степени в таком виде, чтобы он
проходил через три соседние точки (х0, у0), (хь уг) и (х2, у2):
(X - Х{) (X - Х2) (X - Х0) (X - Х2)
(xq — х\) (xq — х2) " (х 1 — Xq) (х\ — :
(х - х0) (х - хг)
(Х2 — Xq} (Х2 - X j)
Первая производная этого выражения имеет вид
2х - Xi - х2 2х - х0 - х2
~
(Х0 - ХО (Х0 - Х2) У° + (JC! - Х0)
2л: - jc0 - Xi
(х2 - х0) (х2 -
Уг
Если это выражение вычислить при х=х0, результатом
окажется значение первой производной, полученное по правым
разностям. Если это выражение вычислить при х=хг, найдем
первую производную по центральным разностям. При х=х2
получим производную по левым разностям. Формулы с
центральной разностью считаются наиболее точными по
сравнению с левой и правой разностями, однако в некоторых
случаях формулы с центральной разностью неприменимы. Это
происходит, например, для начальной и конечной точек в
таблице данных.
Для более точных значений левой, центральной и правой
разностей для нахождения производных можно использовать
аппроксимирующие многочлены старшей степени с более чем
тремя узлами. Кроме того, приближенные значения
производных высокого порядка могут быть найдены
дифференцированием полученных многочленов.
Во многих типах инженерных и научных данных значения
х являются равностоящими друг от друга. В этом случае
выражения для приближенных значений производных
упрощаются. Например, если шаг составляет х1-х0=Л, приближение
правой разностью для производной в точке х0 есть
Когда бы ни проводилось численное дифференцирование,
полезно оценить по порядку величины ошибок
аппроксимации. Для ее определения используем разложение в ряд
Тейлора в виде
'(*)+ £ 2/2! /"(*) +8 3/3! /'"(*) + ••• •
179
Если х=х0 и £ =А (единичный шаг), то /(*o+^)=>V Тогда
Аналогично, если 6 =2А, получаем
Избавляясь от второй производной в этих уравнениях домно-
жением первого из них на 4, второго на -1 и затем
складывая их, получаем в итоге
ЧУо) = (4* * Уг ~ 3%)/(2А)+h\ '"A
Найденное второе приближение первой производной совпадает
с вычисленным ранее, за исключением слагаемого 1/^2Уо'\
характеризующего погрешность.
Аналогичная процедура может быть применена для
нахождения производной с более высоким приближением для левой,
центральной и правой разностей наряду с вычислением
соответствующей погрешности. В табл. 7.1-7.3 такие результаты
приведены для интерполяционных многочленов,
использующих различные виды разностей.
I ПРИМЕР I
7-1 I
I В качестве примера использования многочлена Лагран-1
I жа для приближенного нахождения производной табули-1
I рованных значений находим производную функции I
\y=sin(x) по 45 равноотстоящим точкам в пределах от 01
1до 90°. Программа на языке бейсик, выполняющая эту1
I задачу, сперва генерирует необходимую таблицу значе-1
I ний, а затем обращается к специальной подпрограмме I
1для нахождения приближенных значений производной.'
I Так как узлы функции распределены равномерно, ис-
I пользуют выражения для разностей с шагом А,
приведенные в табл. 7.1-7.3. Производную в 0° аппроксими-
I руют по формуле для правой разности, в точке 90°-noj
I формуле для левой разности, а все остальные произвол-'
I ные находят по формулам для центральной разности.
1000 REM *••♦•♦♦*****♦♦**♦♦♦♦****♦♦♦♦*****♦**♦♦♦♦♦♦***♦♦******
1010 REM * ПРОГРАММА ВЫЧИСЛЯЕТ ПРОИЗВОДНУЮ ПО ТАБ -
ЛИЦЕ
1015 REM * ДАННЫХ
1020 REM * С ПОМОЩЬЮ ИНТЕРПОЛЯЦИОННОГО МНОГО
ЧЛЕНА
1030 REM * ЛАГРАНЖА С РАВНООТСТОЯЩИМИ УЗЛАМИ
1040 REM *****************************************************
1100 \
1110 \
1120 REM •• ВВОД ТАБЛИЦЫ ДАННЫХ **
180
Таблица 7.1. Приближенные формулы дифференцирования
правых разностей
Производные
Уо
и
Уо
т
Уо
Вторые разности
1
Третьи разности
1
2h
1
2 (У2 - 2У\ +Уо)
h
— \*Уо )
Четвертые разности
1
1
У?
2
■( 12 ло)
1
h3
( 2 Уо)
+ 2Уо)
Пятые разности
>>
2Л3 J
+ (— v)
У4 — 56уз + H4jK2 - 104yi + 35>^о)
+ ( 6 уо)
Указание: для каждой формулы в скобках дана погрешность
00
Таблица 7.2. Приближенные формулы дифференцирования
сх центральных разностей
Производ- Третьи разности Пятые разности Седьмые разности
ные
Уо
\ln
И
140
Уо —<У1- 2)>о +^_i) 2 (-^2 + 16^1 - ЗО^о + 16y_j - (2^з - 27у2 + 270^1 - 490^0 + ^0у_{ - 21у_2
-У-г> +2У-з>
Уо ^-(У2~2у1 + 2у_1-у_2) (~у3 +
2h 8Л
Указание: для каждой формулы в скобках дана погрешность.
Таблица 7,3. Приближенные формулы дифференцирования
с использованием левых разностей
Производ- Вторые раз- Третьи разности Четвертые разности Пятые разности
ные ности
1 / ч 1 1 1
♦
(т^о) +(т*о.
Д'о
2 v^u -г—1 ^s — 2 J— Ъ' 2
h, —x * ht - - —. -- —, h
'» 1
h3
Указание: для каждой формулы в скобках дана погрешность.
изо \
1140 DIM Y(46),D(46)
1150 М=45 \ Н = 3.14159/90
1160 FOR 1 = 0 ТО М
1170 R=I*H
1180 Y(I) = SIN(R)
1190 NEXT I
1200 GOSUB 3000
1210 \
1220 PRINT n
1230 PRINT
1240 PRINT
1250 PRINT
УГОЛ
(ГРАД)
SIN(yrJIA)
ПРОИЗВОДНАЯ"
1260 FOR 1 = 0 TO M
1265 A=2*I
1270 PRINT TAB(2);A;TAB(8);Y(I);TAB(25);D(I)
1280 NEXT I
1290 PRINT " "
1300 END
1310 \
1320 \
3000 REM
3010 REM
3015 REM
3020 REM
3030 REM
ПРОГРАММА ВЫЧИСЛЯЕТ ВЕКТОР ЗНАЧЕНИЙ
ПРОИЗВОДНОЙ
ТАБЛИЦЫ ДАННЫХ С РАВНООТСТОЯЩИМ ШАГОМ ПО
МЕТОД ОСНОВАН НА ИСПОЛЬЗОВАНИИ
ИНТЕРПОЛЯЦИИ
ПОЛИНОМОМ ЛАГРАНЖА ПО ТРЕМ ТОЧКАМ
ПРИБЛИЖЕНИЕ ПОСТРОЕНО ПО ЦЕНТРАЛЬНЫМ
РАЗНОСТЯМ
ЗА ИСКЛЮЧЕНИЕМ ПЕРВОЙ И ПОСЛЕДНЕЙ ТОЧЕК
ПАРАМЕТРЫ:
Н - ШАГ ПО X
Y(I) - ВХОДНОЙ МАССИВ ЗНАЧЕНИЙ ФУНКЦИИ
ОТ Y(0) ДО Y(M)
М + 1 - КОЛИЧЕСТВО ТОЧЕК ТАБЛИЦЫ ДАННЫХ И
ЗНАЧЕНИЙ ПРОИЗВОДНОЙ
D(I) - НАЙДЕННЫЙ МАССИВ ЗНАЧЕНИЙ
ПРОИЗВОДНОЙ
3040 REM
3045 REM
3050 REM
3060 REM
3065 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM
3155 REM
3160 REM
3170 \
3180 \
3190 D(0) = ( - Y(2)+4*Y(1) - 3*V(0))/(2*H)
3200 D(M) = (3*Y(M) -4*Y(M - 1) + Y(M - 2))/(2*H)
3210 FOR 1 = 1 TOM-1
3220 D(I) = (Y(I + 1)-Y(I-1))/(2*H)
3230 NEXT I
3240 RETURN
I В строчках 3570, 3580 и 3600 записаны формулы для1
I правых, центральных и левых разностей. Итог выпол-1
J нения программы следующий: I
184
УГОЛ
(ГРАД)
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72
74
76
78
80
82
84
86
88
90
SIN(yniA)
0
.0348995
.0697564
.104528
.139173
.173648
.207912
.241922
.275637
.309017
.34202
.374606
.406736
.438371
.469471
.5
.529919
.559193
.587785
.615661
.642787
.66913
.694658
.719339
.743144
.766044
.78801
.809017
.829037
.848048
.866025
.882947
.898794
.913545
.927184
.939692
.951056
.961261
.970296
.978147
.984808
.990268
.994522
.997564
.999391
1
ПРОИЗВОДНАЯ
1.00041
.999188
.997362
.99432
.990067
.984608
.977949
.970099
.961067
.950863
.939502
.926996
.91336
.898611
.882768
.86585
.847877
.82887
.808852
.78785
.765889
.742995
.719195
.694518
.668995
.642657
.615538
.587666
.559079
.529812
.499899
.469378
.438283
.406655
.374531
.341952
.308956
.275583
.241874
.20787
.173613
.139146
.104509
.0697423
.0348929
1.28066Е - 05
I Получение этого результата занимает на компьютере!
I около 6 с. Функция j=sin(x) выбрана из тех соображе-1
I ний, чтобы сравнить известный точный результат j
185
\y' = cos(x) с компьютерным решением. Сравнение пока-1
I зывает, что приближенное решение достаточно точное. I
I Приведенная в этом примере подпрограмма может I
I быть применена к различным инженерным и научным I
I задачам, использующим таблицу с равноотстоящимм уз-1
I лами. В том случае, когда шаг не является постоян-1
I ным, необходимо применять более общие формулы для I
I разностей, что проиллюстрировано в примере 7.2. I
ПРИМЕР
:
I Была проведена экспериментальная проверка метронома I
I с новым шарниром. Получены следующие результаты I
I зависимости смещения от времени: I
Время, мс Смещение, мм
0.00
5.01
10.09
13.98
16.62
18.01
22.53
25.33
28.03
30.42
32.06
33.62
0.00
0.18
1.05
1.73
2.35
2.96
3.76
4.48
5.28
6.12
7.09
8.00
Эти данные получены экспериментально для опреде-1
ленного метронома. Желательно найти приближенное!
значение скорости ключа в этих экспериментах. Так как1
табличные значения распределены неравномерно, вме-1
сто используемой подпрограммы в предыдущем приме-1
ре следует взять новую подпрограмму. Следующая про-1
грамма реализует поставленную задачу: I
1000 REM ***♦*♦***♦♦***♦***♦**♦*******♦♦♦*♦♦**♦*************
1010 REM * ПРОГРАММА ВЫЧИСЛЯЕТ ПРОИЗВОДНУЮ ТАБЛИЦЫ
1015 REM * ДАННЫХ
1020 REM * С ПОМОЩЬЮ ИНТЕРПОЛЯЦИОННОГО МНОГОЧЛЕНА
1030 REM * ЛАГРАНЖА С НЕРАВНООТСТОЯЩИМИ УЗЛАМИ
1040 REM •••••••••••••••••••••••••••••••••••••••••••••••••••
1050 \
1060 \
1070 REM ** ВВОД ТАБЛИЦЫ ••
1080 \
186
1090 M = ll
1100 DIM X(12),Y(12),D(12)
1110 PRINT "
ПЕРЕМЕЩЕНИЕ
MM
СКОРОСТЬ"
М/С
1120 PRINT "ВРЕМЯ
ИЗО PRINT и МС
1140 PRINT "
1150 Х(0) = 0\Y(0) = 0\Х(1) = 5.01\Y(l) = Л8\Х(2) = 10.09\Y(2) = 1.05\X(3) = 13.98
1160 Y(3) = 1.73\X(4) = 16.62\Y(4) = 2.35\X(5) = 18.01\Y(5) = 2.96
1170 X(6) = 22.53\Y(6) = 3.76\X(7) = 25.33\Y(7)=4.48\X(8) = 28.03\Y(8) = 5.28
1180 X(9) = 30.42\Y(9) = 6.12\X(10) = 32.06\Y(10) = 7.09\X(ll) = 33.62\Y(11) = 8.
1190 GOSUB 3000
1200 FOR 1 = 0 TO M
1210 PRINT X(I);TAB(16);Y(I);TAB(32);D(I)
1220 NEXT I
1230 PRINT " H
1240 \
1250 END
1260 \
1270 \
3000 REM ******************************************************
3010 REM * ПОДПРОГРАММА ВЫЧИСЛЯЕТ МАССИВ ЗНАЧЕНИЙ
3015 REM * ПРОИЗВОДНОЙ
ПО ТАБЛИЦЕ ДАННЫХ. МЕТОД ОСНОВАН НА
ИСПОЛЬЗОВАНИИ
ИНТЕРПОЛЯЦИИ ПОЛИНОМОМ ЛАГРАНЖА ПО ТРЕМ
ТОЧКАМ.
ПРИБЛИЖЕНИЕ ПОСТРОЕНО ПО ЦЕНТРАЛЬНЫМ
РАЗНОСТЯМ
ЗА ИСКЛЮЧЕНИЕМ ПЕРВОЙ И ПОСЛЕДНЕЙ ТОЧЕК.
3020 REM
3025 REM
3030 REM
3035 REM
3040 REM
3035 REM
3050 REM
3060 REM
3070 REM
3080 REM
3085 REM
3090 REM
4000 REM
4010 REM
4020 REM
4030 REM
4040 REM
4050 REM
4060 \
4070 \
4080 \
4090 FOR 1=0 ТО М
4100 N = 1-1
4110 IF 1 = 0 THEN N=0
4120 IF I = M THEN N=M-2
4130 D1 = (2*X(I) - X(N + 1) - X(N+2))/((X(N) - X(N+1))*(X(N) - X(N + 2)))
4140 D2 = (2*X(I) - X(N) - X(N + 2))/((X(N + l) - X(N))*()C(N+1) - X(N + 2)))
4150 D3 = (2*X(I) - X(N) - X(N+l))/((X(N + 2) - X(N))*(X(N+2) - X(N+1)))
4160 D(I) = Dl*Y(N) + D2*Y(N + l) + D3*Y(N+2)
4170 NEXT I
4180 RETURN
Данная программа использует более общее выраже-
ПАРАМЕТРЫ:
Х(1) - МАССИВ ЗНАЧЕНИЙ АРГУМЕНТА ТАБЛИЧНЫХ
ДАННЫХ
ОТ Х(0) ДО Х(М)
Y(I) - ВХОДНОЙ МАССИВ ЗНАЧЕНИЙ ФУНКЦИИ
ОТ Y(0) ДО Y(M)
М + 1 - КОЛИЧЕСТВО ТОЧЕК В ТАБЛИЦЕ ДАННЫХ И
ЗНАЧЕНИЙ ПРОИЗВОДНОЙ
D(I) - НАЙДЕННЫЙ МАССИВ ПРОИЗВОДНОЙ
187
I ние для правых, центральных и левых разностей при-1
I ближенного дифференцирования. Результат выполнения I
| программы следующий: |
ВРЕМЯ
МС
0
5.01
10.09
13.98
16.62
18.01
22.53
25.33
28.03
30.42
32.06
33.62
ПЕРЕМЕЩЕНИЕ СКОРОСТЬ
ММ
0
.18
1.05
1.73
2.35
2.96
3.76
4.48
5.28
6.12
7.09
8
М/С
- .0312683
.103125
.173269
.210575
.368487
.377262
.226484
.277076
.325561
.493797
.587296
.57937
I На выполнение программы требуется около 3 с.1
I Программа с новой подпрограммой стала более слож-1
I ной, чем в предыдущем примере, и ее не стоит ис-1
I пользовать в задачах с равным шагом табличных значе-1
I ний. I
7.2 ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ
Необходимость численного интегрирования часто возникает
при анализе инженерных и научных данных. Например,
численные методы вычисления применяют в тех случаях, когда
интеграл не удается сосчитать в аналитическом виде или
когда этот вид достаточно сложен. Численное интгрирование
применяют и тогда, когда нужно найти интеграл от
табулированной функции, измеряемой в эксперименте. Как показано на
рис. 7.1, численное интегрирование, называемое также
численной квадратурой, является устойчивой процедурой и, в
отличие от численного дифференцирования, имеет тенденцию
снижать влияние погрешности данных на окончательный
результат. Методы численного интегрирования основаны на
аппроксимации определенного интеграла суммой составных
площадей. В общем виде задача состоит в нахождении величины
/ = J f(x)6x.
а
Методы численного интегрирования подразделяются в
соответствии с тем, равномерно ли распределены взятые значения
188
абсцисс на оси. Формулы Ньютона - Котеса требуют
равноотстоящих друг от друга значений на оси абсцисс, а формулы
Гаусса - нет. Для каждого из этих двух случаев техника
численного интегрирования будет изложена в отдельных
параграфах.
7.3 ИНТЕГРИРОВАНИЕ ПО МЕТОДУ ТРАПЕЦИЙ
Простейшей из всех формул Ньютона - Котеса является
формула для метода трапеций. Этот метод основан на линейной
аппроксимации интегрируемой функции между соседними
заданными точками (xh yt) и (xi+b yi+1) на промежутке a^x^b.
Таким образом, если хо=а и хп=Ь, интегралу соответствует
сумма площадей п трапеций, каждая из которых имеет высоту
Л. Значение интеграла записывают через заданные ординаты в
виде _ ь и
Метод трапеций представлен графически на рис. 7.3. Он дает
удовлетворительное приближение интеграла в том случае,
когда кусочки площадей между верхними сторонами трапеций и
Рис. 7.3
кривой малы. В общем случае сумма этих площадей зависит
от вида подынтегральной функции и ширины полоски.
Значение этой ошибки называют ошибкой усечения.
Предположим, что для одной трапеции на промежутке от
1= S f(x)6x=F(xi+l)-F(xi)
xi
189
Этот интеграл равен сумме площади трапеции и погрешности
аппроксимации:
Из этих двух равенств погрешность находят в виде
S = F(xi + 1) - ^/)-(Л[/(^+Л)+/(^)])/2.
Разложение в ряд Тейлора F(xi+1) дает
+aV">(*/)/3! + O(A4).
В этом представлении старшие члены имеют порядок А4.
Разложение /(х/+Л) в ряд Тейлора дает
/(*,+А)=/(*,.)+А/ '(*,)+Л2/ "
Пусть старшие члены имеют порядок А4 и являются
малыми по сравнению с первыми. Если принять во внимание,
что f(x$ = F'(xj), /'(*/)=/г"(*г) и f"(xd = F'"(xi) и вычислить
погрешность, подставив эти равенства в ряд Тейлора, получим
Если ширина полоски мала, слагаемое с А3 окажется
определяющим и более высокими степенями можно пренебречь. Таким
образом, мы видим, что погрешность усечения в методе
трапеций зависит от второй производной интегрируемой функции.
Для определения погрешности при п интервалах разбиения
нужно просуммировать погрешности для каждого интервала:
Если вторая производная на промежутке интегрирования
меняется слабо, мы можем воспользоваться ее средним
значением
Г -I
If /"(*,)
и с учетом Xj+^Xi+nh записать суммарную погрешность в
виде
12
Таким образом, суммарная погрешность на промежутке (xi9
х/+п) пропорциональна квадрату ширины полоски. Это означа-
190
ет, что с уменьшением размера промежутка вдвое погрешность
усечения уменьшится в 4 раза.
Такое соображение может подсказать читателю мысль
использовать большое число малых полосок для обеспечения
высокой точности. Однако у этого подхода имеется
ограничение. С увеличением числа полосок начинает преобладать так
называемая погрешность округления, возникающая при
сложении большого количества чисел. Соотношение между
погрешностью усечения и погрешностью округления приведено на
рис. 7.4. Как видно из рисунка, существует оптимальное значе-
Сцммарная
погрешность „
I
I
Погрешность
усечения
Погрешность
округления
Рис. 7.4
ние ширины полоски А. Разумное значение этой величины
пользователь может самостоятельно определить в ходе
вычислений экспериментальным путем, так как получить его в
аналитическом виде обычно не представляется возможным.
7.4 ИНТЕГРИРОВАНИЕ ПО МЕТОДУ СИМПСОНА
Другим путем уменьшения ошибки в процессе численного
интегрирования является использование иного, чем прямая
линия, вида аппроксимирующей кривой на малом отрезке
интегрирования. Из этого предположения естественным образом
следует, что нужно взять кривую более старшего порядка, а
именно параболу. Разумеется, парабола требует уже не двух, а
трех соседних точек табулированных значений, так что в
результате числовая формула для интеграла будет другой, чем в
методе трапеций. Новая формула, известная как формула Сим-
пеона, имеет вид
ff(x)6x
2у2 + 4у3 + ... + 4уп_ + уп] .
191
Это равенство применяют для четного числа промежутков.
Погрешность усечения в методе Симпсона, получаемая
аналогично приведенной для метода трапеций, может быть
представлена в виде
Е=
180
где /^ означает среднее значение четвертой производной
функции f(x) на промежутке (xh x/+n). Видно, что суммарная
погрешность пропорциональна четвертой степени интеграла
разбиения. Это означает, что, деля интервал пополам, мы
уменьшаем погрешность в 16 раз. Такой метод, безусловно, имеет
преимущество по сравнению с методом трапеций.
При использовании метода Симпсона может случиться так,
что количество промежутков нечетно. Этой трудности можно
избежать, если для первых трех промежутков применить
следующую формулу, использующую параболу третьей степени,
проходящую через четыре первые точки:
Эта формула известна как формула Симпсона трех восьмых.
7.5 ФОРМУЛЫ ИНТЕГРИРОВАНИЯ НЬЮТОНА - КОТЕСА
СТАРШИХ ПОРЯДКОВ
Тот факт, что формулы интегрирования легко находятся для
многочленов первой и второй степени, приводит к желанию
обобщить эту процедуру для многочленов старших порядков.
Общий вид результата таков:
jf(x)dx = Coh 2 W../1.+ CxhK+xpk\x )
a i = 0
где п - количество отрезков разбиения, к - степень
используемого полинома, х* принадлежит промежутку [а, Ь], /№(**) -
производная ^-порядка функции /(дс), вычисленная в точке х*9
h - шаг разбиения. Коэффициенты с0, сх и wt выписаны в
табл. 7.4. Каждая строчка в таблице соответствует одному
набору к промежутков с к+1 узлами для построения многочлена
степени к. Чтобы воспользоваться этой информацией для
большого числа наборов (например, при к=2 и п=6), нужно
сложить коэффициенты таким образом, чтобы последние
значения в ряду перекрывались, как это показано ниже:
Это дает
b h *
J f(x)dx = - [y0 + Ayi + 2y2 + 4v3 + 2v4 + 4y5 + y6] + Ci/z3/(3) О ),
a *
192
Таблица 7.4. Коэффициенты в формулах Ньютона - Котеса
к
1
2
3
4
5
6
7
о
со
1
2
1
3
8
2
45
5
288
1
140
7
17280
4
14175
wo
1
1
1
7
19
41
751
989
wx
1
4
3
32
75
216
3577
5888
w2
1
3
12
50
27
1323
928
w3
1
32
50
272
2989
10,946
vv4 w5
7
' 75 19
27 216
2989 1323
-4540 10,946
w6
41
3577
928
w7
751
5888
w8
989
1
ТУ
1
90
~80
-8
945
-275
12,096
-9
1400
-8183
518,400
-2368
467,775
Сумма
w0
1
1
4
4
Н>2
1
1
2
w3
4
4
w4
1
1
2
W>5
4
4
w6
1
1
что совпадает с ранее полученным результатом. Последнее
слагаемое в формуле Ньютона - Котеса показывает порядок
погрешности, связанной с аппроксимацией. Очевидно, что при
малых h значение hk+1 тем более мало. Однако этим
соображением необходимо пользоваться с осторожностью, так как
погрешность зависит и от /(*)(**). Существуют такие функции,
для которых производные высоких порядков становятся очень
большими и для них не удается снизить погрешность за счет
увеличения к.
Формулы Ньютона - Котеса, несмотря на их внешнюю
привлекательность, используют редко, поскольку они достаточно
громоздки и имеют большую ошибку округления. Если
интегрирование нужно провести с очень высокой точностью,
обычно применяют метод Ромберга или квадратурные формулы
Гаусса (они будут рассмотрены ниже), так как они более
эффективны и лучше приспособлены для микрокомпьютерных
вычислений.
Прежде чем рассмотреть два указанных метода,
остановимся на применении метода Симпсона.
I ПРИМЕР I
I7-3 I
I Для нужд автоматизированного процесса производства I
I было разработано специальное устройство для сконцент-1
I рированного обдува воздухом обрабатываемой поверхно-1
I сти с целью удаления механической стружки после об-1
I работки. Нужно определить энергию, необходимую для I
I хода сжатия в рабочем цикле устройства. Работа комп-1
I рессорного устройства протекает, как показано на рисун-1
I ке. Вначале поршень находится в положении 1, соответ-1
I ствующем максимальному объему, и все клапаны за-1
I крыты. Когда поршень перемещается в положение 2,1
I соответствующее минимальному объему, давление нара-1
I стает. В положении 2 выпускной клапан открывается и I
I возникает струя воздуха. В течение этого процесса снова I
I устанавливается атмосферное давление и поршень дви-1
I жется к первоначальному положению с открытым впу-1
I скным клапаном. Энергия, необходимая для хода ежа- J
194
15 10
10 10s-
5Ю
15
100
Объем, см3
тия, соответствует площади под диаграммой цикла, т.е.1
интегралу от кривой между точками 1 и 2 за вычетом!
площади под отрезком, соединяющим точки 3 и 1. I
Эксперименты дали следующие значения для кривой I
сжатия: I
Объем,
см3
Давление,
Н/м2
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
1442,700
964,400
705,600
546,700
440,600
365,400
309,900
267,400
234,000
207,100
185,200
166,900
151,600
138,500
127,200
117,400
108,900
101,300
195
Для интегрирования используем метод Симпсона.
Шаг h выберем равным 5 см3, так что количество
интервалов разбиения нечетно. Поэтому следует
применить формулу Симпсона трех восьмых. Программа,
реализующая эту процедуру, выглядит следующим
образом:
1000 REM **********************************************
1010 REM * ПРОГРАММА ВЫЧИСЛЯЕТ ПЛОЩАДЬ ПОД КРИВОЙ P-V
1020 REM * ДЛЯ КОМПРЕССОРА, ИСПОЛЬЗУЯ ИНТЕГРИРОВАНИЕ
1030 REM • ПО МЕТОДУ СИМПСОНА С РАВНЫМ ШАГОМ
1040 REM ••••••••••••••••••••••••••••••••••••••••••••••
1050 \
1060 \
1070 REM • ВВОД ТАБЛИЦЫ *
1080 \
1090 DIM Y(17)
1100 М = 17 \ Н=5*МГ(-6)
1110 \
1120 Y(0) = 1442700. \ Y(l) = 964400. \ Y(2) = 705600.
ИЗО Y(3)=546700. \ Y(4)=440600. \ Y(5) = 365400.
1140 Y(6) = 309900. \ Y(7) = 267400. \ Y(8) = 234000.
1150 Y(9) = 207100. \ Y(10) = 185200. \ Y(ll) = 166900.
1160 Y(12) = 151600. \ Y(13) = 138500. \ Y(14) = 127200.
1170 Y(15) = 117400. \ Y(16) = 108900. \ Y(17) = 101300.
1180 \
1190 GOSUB 3000
1200 \
1210 PRINT и "
1220 PRINT "V (СМЛ3) Р (H/NT2)
1230 PRINT " "
1240 FOR 1 = 0 TO M
1250 V = 15+5*I
1260 PRINT V,Y(I)
1270 NEXT I
1280 PRINT " "
1290 \
1300 REM • ВЫЧИТАНИЕ ПЛОЩАДИ ПОД КРИВОЙ 3-1
1310 В=А-85*КГ(-6)*101300
1320 PRINT "СУММАРНАЯ РАБОТА РАВНА = ";В;"ДЖОУЛЕЙ"
1330 END
1340 \
1350 \
3000 REM *******************************************
ЗОЮ REM * ПОДПРОГРАММА ВЫЧИСЛЯЕТ ИНТЕГРАЛ ПО
3020 REM * ТАБЛИЦЫ ЗНАЧЕНИЙ ФУНКЦИИ С РАВНЫМ ШАГОМ
3030 REM *
3040 REM * ИСПОЛЬЗУЕТСЯ МЕТОД СИМПСОНА С ПРАВИЛОМ
3050 REM * ТРЕХ-ВОСЬМЫХ В ТОМ СЛУЧАЕ, КОГДА
3060 REM * КОЛИЧЕСТВО ТОЧЕК ЧЕТНО
3070 REM *
3080 REM *
3090 REM * ПАРАМЕТРЫ:
ЗОЮ REM *
196
3020 REM * II - ШАГ ПО X
3030 REM * Y(I) - ВХОДНОЙ МАССИВ ЗНАЧЕНИИ ФУНКЦИИ
3040 REM * ОТ Y(0) ДО Y(M)
3050 REM * M + l - КОЛИЧЕСТВО ТАБЛИЧНЫХ ЗНАЧЕНИЙ
3060 REM * А - НАЙДЕННОЕ ЗНАЧЕНИЕ ИНТЕГРАЛА
3070 REM *♦•*♦♦♦*♦***♦*♦•*•******♦♦♦*****•**♦♦**•***
3080 \
3090 \
3100 А = 0 \ 11 = 1
3105 М2 = М/2
3110 IF 2*INT(M2) = M THEN GOTO 3150
3120 A = (3*H/8)*(Y(0) + 3*Y(l) + 3*Y(2)+Y(3))
3130 11=5
3140 IF M = 3 THEN GOTO 3200
3150 A=A + (H/3)*(Y(I1-1)+4*Y(M-l) + Y(M))
3160 IF II > M-2 THEN GOTO 3200
3170 FOR 1 = 11 TO M-2 STEP 2
3180 A=A + (H/3)*(4*Y(I) + 2*Y(I + 1))
3190 NEXT I
3200 RETURN
I Строчка 3460 соответствует формуле трех восьмых, al
I строчки 3490 и 3520 представляют обычную формулу!
I Симпсона. В этой программе использована подпрограм-1
I ма общего вида, пригодная для любого четного или не-1
I четного числа промежутков разбиения, большего двух.1
I Результатом выполнения программы является следую-1
I щая таблица: I
V (СМЛ3)
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
Р (Н/МЛ2)
1.44270Е+06
964400
705600
546700
440600
365400
309900
267400
234000
207100
185200
166900
151600
138500
127200
117400
108900
101300
СУММАРНАЯ РАБОТА РАВНА = 18.2832 ДЖОУЛЕЙ
197
На компьютере для проведения вычислений про-1
грамме требуется около 2 с. I
7.6 ИНТЕГРИРОВАНИЕ ПО МЕТОДУ РОМБЕРГА
Из всех формул Ньютона - Котеса метод трапеций является
наиболее простым, однако он не дает достаточной степени
точности, требуемой для решениия научных и инженерных
задач. Метод Ромберга получил широкое распространение,
поскольку сочетает в себе простоту метода трапеций с высокой
точностью вычисления. Он состоит в применении экстраполя-
ционного метода Ричардсона для улучшения результатов,
полученных с помощью метода трапеций. Для интегрирования
по Ромбергу вспомним метод трапеций:
Ъ и т-1
lf(x)dx = -J [f(a) + f(b) + 22 f(xf) ],
a 2 / = 1
где h=(b- a)/m и Xj=a+jh. Известно, что погрешность
усечения уменьшается с увеличением /п. Один из способов
систематического повышения т состоит в использовании
прогрессии вида:
т=2к-\ *=1, 2, 3, ..., л,
где п - целое положительное число. Шаг А для такой прогре-
сии уменьшается как
hk=b-a/2k-\ Jfc=l, 2, 3, ..., п.
Удобно обозначить Rkx приближенное значение интеграла,
тогда
Можно показать, что эта последовательность записывается в
общем виде как
Чл = \ [^-,,1+^-.,.Д Я«+**-,('-0,5))
для каждого к=2, 3, 4, ..., п. Это выражение можно
использовать для ускорения процесса вычисления каждого Rkl. В то
время, как к увеличивается, точность Rkl также увеличивается,
однако сходимость к точному значению' интеграла очень мед-
198
ленная. Для ускорения процесса сходимости используют экст-
раполяционную формулу Ричардсона:
для каждого /=2, 3, ..., п\ j = l, 2, ..., /, где
экстраполированное значение, отвечающее большему индексу у,
соответствует более старшему порядку в формулах Ньютона - Котеса. Ре-
вычислить Ri}i
ИспользоЬать
формулу тра-
пеции flLt
.^~>v
Шаг
экстраполяции RLi
Рис. 7.5
199
зультат аппроксимаций может быть записан в виде
треугольной таблицы:
^3,2 ^3,3
^4,2 ^4,3 /?4,4
р р р
*п, 1 кл,2 • • • кп,п
Можно показать, что диагональные элементы сходятся к
точному значению интеграла быстрее, чем Rnl. Обычная
процедура применения итерационной схемы метода Ромберга
заключается в последовательном нахождении элементов в
строчках до тех пор, пока для некоторого п разность между Rnn и
Rn-\n-\ меньше некоторой наперед заданной погрешности.
Логическая диаграмма этой процедуры изображена на рис. 7.5.
Иллюстрацией этого метода является следующий пример.
ПРИМЕР
I
В качестве иллюстрации метода Ромберга рассмотрим J
интегрирование функции y=sin(x) от 0 j\o3Z. Выбор
такой задачи связан с тем, что хорошо известен ответ,
равный 2,0, поэтому успех метода Ромберга становится
наглядным. Программа на языке бейсик, реализующая)
этот метод, представлена ниже. В программе предусмот-'
рено, что вычисления завершатся, когда абсолютное
значение разности двух диагональных элементов в
треугольнике Ромберга станет меньше 10 ~7 или когда в1
массиве заполнится 7 строк. j
1000 REM ***************************************************
1010 REM * ПРОГРАММА ВЫЧИСЛЯЕТ ИНТЕГРАЛ ОТ ФУНКЦИИ
FNF(X)
1020 REM * ПО МЕТОДУ РОМБЕРГА
1030 REM ***************************************************
1040 \
1050 \
1060 REM •• ВВОД ФУНКЦИИ ••
1070 \
1080 DEF FNF(X) = SIN(X)
1090 \
1100 DIM R(8,8)
200
1110 А = 0\В = 3.1415926\М = 7
1120 Е=1Е-5
ИЗО \
1140 GOSUB 3000
1150 \
1160 PRINT "КОНЕЦ РАБОТЫ"
1170 \
1180 END
1190 \
1200 \
3000 REM *******************************************************
ЗОЮ REM * ПОДПРОГРАММА ВЫЧИСЛЯЕТ ИНТЕГРАЛ ОТ ЗАДАННОЙ
3015 REM * ФУНКЦИИ
ВЫЧИСЛЕНИЕ ПРОИЗВОДИТСЯ ПО ФОРМУЛЕ
ТРАПЕЦИЙ
С ИСПОЛЬЗОВАНИЕМ МЕТОДА РОМБЕРГА
ПАРАМЕТРЫ:
А - НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ
В - ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ
М - МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ШАГОВ,
ВЫПОЛНЯЕМЫХ В МЕТОДЕ РОМБЕРГА
FNF(X) - ЗАДАННАЯ ФУНКЦИЯ
- ЗНАЧЕНИЕ АБСОЛЮТНОЙ ПОГРЕШНОСТИ
- ЗНАЧЕНИЕ ИНТЕГРАЛА
R(I,J) - РАБОЧИЙ МАССИВ ЗНАЧЕНИЙ ИНТЕГРАЛА В
МЕТОДЕ РОМБЕРГА
Е
Y
3020 REM
3025 REM
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
3080 REM
3090 REM
3100 REM
3110 REM
3120 REM
3130 REM
3140 REM
3150 REM **************************
3160 \
3170 \
3180 Н = В-А
3190 R(l,l) = 0.5 + H*(FNF(A)-FNF(B))
3200 FOR 1 = 2 ТО М
3210 S = 0
3220 FOR K=l TO 2л(1-2)
3230 S = S + FNF(A+H*(K-.5))
3240 NEXT К
3250 R(I,1) = .5
3260 Н = .5*Н
3270 FOR J=2 TO I
3280 R(I,J) = (2"(2*(J-l
3285 PRINT R(I,J)
3290 NEXT J
3300 IF ABS(R(I,I)-R(I-1,I-1)) < E THEN GOTO 3340
3310 NEXT I
3320 PRINT "РЕШЕНИЕ НЕ НАЙДЕНО!!!"
3330 RETURN
3340 PRINT "ИНТЕГРАЛ = ";R(I,I)
3350 RETURN
I Результатом действия этой программы является одна1
I строчка: j
ИНТЕГРАЛ РАВЕН 2.00476
201
I Программа, выполняемая на компьютере, затрачива-1
I ет на вычисления менее 4 с. Если выводить на печать I
I промежуточные значения массива R(I, J), то получим I
I числа: I
2.26106 2.01944 2.00952
2.08789 2.01914 2.00521
2.07635 2.01906 2.00486
2.04194 2.01042 2.00478
2.03887 2.00972 2.00477
2.03828 2.00957 2.00476
2.02085 2.00953 2.00476
I Первая колонка этого массива представляет собой от-1
I веты, получающиеся методом трапеций с уменьшаю-1
I щимся по прогрессии шагом. Читатель видит, что эти I
I значения сходятся к правильному ответу, но это проис-1
I ходит гораздо медленнее по сравнению со сходимостью I
I диагональных элементов массива. I
7.7 КВАДРАТУРНЫЕ ФОРМУЛЫ ГАУССА
Все формулы интегрирования Ньютона - Котеса используют
равноотстоящие координаты абсцисс. Если это ограничение
снято, расстояние между точками можно выбрать таким
образом, чтобы понизить погрешность аппроксимации.
В выражении
ff(x)dx = Ъ WifixJ+E
a i — 0
Wi и xt взяты неизвестными, подлежащими определению.
Таким образом, полное число неизвестных параметров равно
2(л + 1). Полином степени 2л+1 для своего однозначного
определения требует задания 2л+2 узлов. Будем аппроксимировать
интеграл, используя полином степени 2л + 1, и потребуем,
чтобы для всех полиномов со степенями, равными или
меньшими этого значения, погрешности аппроксимации были равны
нулю. Это условие даст 2л+2 уравнений для 2л+2
неизвестных. В общем случае конечные уравнения окажутся
линейными относительно н^, но нелинейными относительно xt. Если
пределы интегрирования составляют [ -1, 1], значениями
достанут л+1 корней полинома Лежандра Pn+i(x)=0. После того
как найдены хь величины wi могут быть найдены методами
решения линейных систем. Рассмотрим случай с л=1.
Требование, чтобы равенство
]f(x)6x= i W///
- I 1 = 0
202
удовлетворялось для всех полиномов-степени 2п + 1 и меньше,
означает, что для /(jc) = 1, х, х2 и хъ равенство должно строго
выполняться. Из этого получаем следующие уравнения:
woxo +
W0Xq +
Щ4 + ■
1
= J
2
з
dx^
1
= J
1
_ j
1
-1
= 2,
x2dx =
x^x =
2_
3 '
0.
Система четырех уравнений для четырех неизвестных может
быть решена даже для нелинейных уравнений. Чтобы
избежать трудностей, связанных с нелинейностью, возьмем
полином Лежандра в виде
Преимуществом подобной схемы является то, что корни
полиномов Лежандра хорошо известны и табулированы в научной
литературе.
Полином второй степени имеет корни х^ = - \[Ъ/Ъ и
х2=+\/Т/Ъ. Используя эти значения и два любых уравнения
из привиденных выше, получим, что wo=l, ^ = 1. Тогда
интеграл запишем в виде
Ограничение, связанное с необходимостью выбора промежутка
интегрирования от -1 до +1 не настолько затруднительно,
как это можно думать. Очевидно, что замена переменных
z=2x-(a + b)/(b-a)
преобразует интеграл к требуемому виду:
/ = !ffx)dx = ^1 (ba\2+b + a
a l -\ l
Таким образом, применение метода квадратур Гаусса с л=2
для вычисления интеграла дает
Ъ-а г ^(b-a)z1+b+a^ _ (b-a)z2 + b+ a
2 ^ *
203
Для функций с /г = 3 результат окажется следующим:
Ъ-а r (b-a)zx + b+a (b-a)z2+b+a
w3/(
Задача, таким образом, состоит в нахождении коэффициентов
wt и корней полиномов Лежандра z{, В табл. 7.5 эти значения
приведены для п от 1 до 10. Описанная процедура сама
просится для реализации на компьютере. Поясним это, решив
методом квадратур Гаусса задачу из предыдущего примера.
Таблица 7.5. Корни полиномов Лежандра и коэффициенты,
используемые для квадратурных формул Гаусса
Корни
Коэффициенты п Корни
Коэффициенты
0.5773502692
-0.5773502692
3 0.7745966692
0.0000000000
-0.7745966692
0.8611363116
0.3399810436
-0.3399810436
-0.8611363116
5 0.9061798459
0.5384693101
0.0000000000
-0.5384693101
-0.9061798459
0.9324695142
0.6612093864
0.2386191861
-0.2386191861
-0.6612093864
-0.9324695142
0.9491079123
0.7415311856
0.4058451414
0.0000000000
-0.4058451414
-0.7415311856
-0.9491079123
1.0000000000
1.0000000000
0.5555555556
0.8888888889
0.5555555556
0.3478548451
0.6521451549
0.6521451549
0.3478548451
0.2369268850
0.4786286705
0.5688888889
0.4786286705
0.2369268850
0.1713244924
0.3607615730
0.4679139346
0.4679139346
0.3607615730
0.1713244924
0.1294849661
0.2797053914
0.3818300505
0.4179591837
0.3818300505
0.2797053914
0.1294849661
0.9602898565
0.7966664774
0.5255324099
0.1834346425
-0.1834346425
-0.5255324099
-0.7966664774
-0.9602898565
0.9681602395
0.8360311073
0.6133714327
0.3242534234
0.0000000000
-0.3242534234
-0.6133714327
-0.8360311073
-0.9681602395
10
0.9739065285
0.8650633667
0.6794095683
0.4333953941
0.1488743390
-0.1488743390
-0.4333953941
-0.6794095683
-0.8650633667
-0.9739065285
0.1012285363
0.2223810345
0.3137066459
0.3626837834
0.3626837834
0.3137066459
0.2223810345
0.1012285363
0.0812743884
0.1806481607
0.2606106964
0.3123470770
0.3302393550
0.3123470770
0.2606106964
0.1806481607
0.0812743884
0.0666713443
0.1494513492
0.2190863625
0.2692667193
0.2955242247
0.2955242247
0.2692667193
0.2190863625
0.1494513492
0.0666713443
204
ПРИМЕР
7.5
I
Для иллюстрации использования метода квадратур Гаус-1
са предположим, что необходимо вычислить интеграл!
от функции ;y=sin(x) на промежутке [О,UL ]. Содержание!
задачи то же, что и в примере 7.4, и известен точный!
ответ, равный 2,0. Программа на языке бейсик, реализу-1
ющая этот метод, приведена ниже. Она использует!
стандартную подпрограмму с полиномом Лежандра де-1
сятой степени: I
1000 REM
1010 REM
ПРОГРАММА ВЫЧИСЛЯЕТ ИНТЕГРАЛ ОТ ФУНКЦИИ
FNF(X)
ПО МЕТОДУ КВАДРАТУР ГАУССА
ВВОД ФУНКЦИИ
1020 REM
1030 REM
1040 \
1050 \
1060 REM
1070 \
1080 DEF FNF(X) = SIN(X)
1090 \
1100 А = 0\В = 3.1415926
1110 \
1120 GOSUB 3000
ИЗО \
1140 PRINT "ИНТЕГРАЛ = M;Y
1150 \
1160 END
1170 \
1180 \
1190 \
3000 REM ♦*****♦♦**♦**♦**♦*********♦*************♦♦♦♦*♦****•*
ЗОЮ REM * ПОДПРОГРАММА ВЫЧИСЛЯЕТ ИНТЕГРАЛ ОТ
ЗАДАННОЙ
ФУНКЦИИ. ВЫЧИСЛЕНИЕ ПРОИЗВОДИТСЯ ПО
КВАДРАТУРНЫМ
ФОРМУЛАМ ГАУССА С ИСПОЛЬЗОВАНИЕМ 10 ТОЧЕК
3020 REM
3025 REM
3030 REM
3040 REM
3050 REM
3060 REM
3070 REM
ПАРАМЕТРЫ:
А - НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ
В - ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ
FNF(X) - ЗАДАННАЯ ФУНКЦИЯ
Y - НАЙДЕННОЕ ЗНАЧЕНИЕ ИНТЕГРАЛА
3080 REM
3090 REM
4000 REM *********************************
4010 \
4020 \
4030 D = .5*(A+B)
4040 Е=В-А
4050 С=.4869533*В
4060 Y = .03333567*(FN F(D + C) + FN F(D-C))
205
4062 С=.4325317*В
4064 Y = Y + .07472567*(FN F(D + C) + FN F(D-C))
4070 C = .3397048*B
4080 Y = Y + .1095432*(FN F(D + C) + FN F(D-C))
4090 C=.2166977*B
5000 Y = Y + .1346334*(FN F(D + C) + FN F(D-C))
5010 С=.07443717
5020 Y = B*(Y + .1477621*(FN F(D + C) + FN F(D-C)))
5030 RETURN
I Для расчетов по этой программе на компьютере тре-1
| буется менее 1 с. Ответ имеет вид: |
ИНТЕГРАЛ = 2.0227
7.8 ОБСУЖДЕНИЕ ВЫБОРА МЕТОДА ЧИСЛЕННОГО
ДИФФЕРЕНЦИРОВАНИЯ И ЧИСЛЕННОГО ИНТЕГРИРОВАНИЯ
Выбор подходящего алгоритма для решения данной задачи
дифференцирования или интегрирования в большой степени
зависит от природы данных, с которыми приходится иметь
дело. При выборе алгоритма необходимо также помнить об
общих ограничениях, связанных с работой на микрокомпьютере.
В случае численного дифференцирования с
экспериментальными данными следует обращаться с большой
осторожностью, так как присутствие шумов зачастую может привести к
результату, имеющему малое отношение к задаче или не
имеющему вовсе. Использование интерполяционных формул Лаг-
ранжа может помочь в дифференцировании
экспериментальных данных до тех пор, пока вы не попытаетесь извлечь из
них больше, чем они из себя представляют. Например,
интерполяционный многочлен второго порядка не даст много
информации по поводу девятой производной. Для нахождения
производных высоких порядков лучше использовать
интерполяционные многочлены высокой степени, чем с завидным
постоянством многократно применять многочлены низкой
степени. Для дифференцирования с помощью интерполяционных
полиномов полезно также помнить, что центральные разности
дают лучшие результаты по сравнению с правыми и левыми
разностями.
В случае численного интегрирования, если интегрируемая
функция дается в виде таблицы экспериментальных значений,
в общем случае используют не метод Ромберга и метод
квадратур Гаусса, а применяют формулы Ньютона - Котеса. Хотя
для этих формул требуется равноудаленность значений абсцисс
друг от друга, могут быть написаны специальные
подпрограммы, пригодные для непостоянного шага (такая задача приведе-
206
на в конце книги). Метод Ромберга или миетод квадратур
Гаусса используют, если вид интегрируемой функции известен.
Преимуществом гауссовых квадратур является то, что поль -
зователь заранее знает сколько вычислений функции надо
выполнить, чтобы получить ответ и может менять метод, если
точность недостаточна. В методе Ромберга нужно выполнить
столько вычислений функции, сколько потребуется для
достижения сходимости, однако при этом можно заранее задать
желаемую степень точности. Соображения по поводу числа
вычисления функции становятся важными в случаях, если эти
значения могут быть получены лишь с помощью громоздких
вычислений.
Приложение
Начальное обучение
Бейсику в системе
ОС dBK
В наши дни учить студентов КОБОЛу
и БЕЙСИКу-это, на мой взгляд, преступление.
Дж. Мартин
В высшей школе еще не сложился общий принцип, как и какому языку
программирования высокого уровня учить студентов. Это, по-видимому, и
правильно, поскольку каждый вуз должен в этом вопросе ориентироваться на
средний уровень своих студентов, основную сферу применения выпускников и парк
имеющейся вычислительной техники. Представляется удобным на первом этапе
обучения знакомить студентов с языком БЕЙСИК, используя вычислительные
комлексы ДВК, широко распространенные в вузах страны.
Преимущества БЕЙСИКа следующие: 1) простота самого языка и простота
организации выполнения программы на ЭВМ; 2) богатые возможности для
работы в режиме диалога; 3) отсутствие различных формальных ограничений,
которые могут приводить к многочисленным ошибкам, как происходит, например,
при программировании на ФОРТРАНе; 4) малое время обработки программы
перед выполнением. Таким образом, знакомство с БЕЙСИКОМ снижает на наш
взгляд ступеньку барьера, стоящего на пути начинающего при обучении
программированию. Надо также заметить, что БЕЙСИКу учат уже во многих
школах. Умение пользоваться БЕЙСИКОМ на уровне решения простых
вычислительных задач, конечно, не исключает необходимость владения более мощными
алгоритмическими языками для решения сложных вычислительных задач.
Цель этого приложения - на примере простых программ обучить
начинающего пользователя простейшим возможностям БЕЙСИКа в системе ОС ДВК,
для того чтобы он мог понимать и использовать программы, приведенные в
книге.
208
1. Вход и выход из системы.
Команды работы с файлами программ
Реализация программы на языке БЕЙСИК происходит с помощью системы
БЕЙСИК, которая интерпретирует операторы языка БЕЙСИК и осуществляет
общее управление при выполнении программ. Вход в систему осуществляется с
помощью команды BASIC. В ответ система запрашивает, все ли дополнительные
возможности системы требуются пользователю. Стандартный ответ ALL. Далее
система отвечает о готовности к работе: READY. Такой же ответ следует
ожидать и при выполнении других команд БЕЙСИКа. По завершении работы
можно выйти из системы с помощью команды BYE. Аварийное прерывание
осуществляется с помощью двукратного одновременного нажатия клавиши СУ и
буквы С.
Каждая новая программа предваряется командой NEW FILENM, где
FILENM означает произвольное имя файла данной программы. Длина имени
файла не более шести символов. Для выполнения программы надо набрать
команду RUN. Вывод текста программы на экран осуществляется с помощь
команды LIST, команда SCR очищает содержимое памяти. Запись на диск
набранной программы производится по команде SAVE.
Вызов в память ЭВМ файла программы, уже записанной на диске,
осуществляется по команде OLD FILENM, где FILENM - присвоенное имя файла.
Если в программу, уже записанную на диске, в процессе работы на дисплее
вводят редакционные изменения, которые надо включить в исходный текст, то это
делают с помощью команды REPLACE. Переименование текущей программы
выполняется по команде RENAME FILENM, где FILENM - новое имя файла.
Здесь перечислены лишь основные команды работы с файлами
интерпретатора БЕЙСИКа, знакомство с которыми полезно пользователю на первом
этапе.
Задание 1. Войти в систему БЕЙСИК, вызвать в память ЭВМ имеющуюся
на диске программу, вывести ее на дисплей, выполнить программу, очистить
память и выйти из системы.
Последовательность набираемых команд: BASIC, OLD FILENM, LIST, RUN,
SCR, BYE.
2. Общая организация программы на БЕЙСИКе
Программа на языке БЕЙСИК, как и на других алгоритмических языках,
состоит из совокупности операторов. Оператор - это некоторая инструкция для
действий, которая должна быть выполнена ЭВМ. Предварительно до выполнения
эта инструкция должна быть переведена на язык ЭВМ. Выполнение операторов
осуществляется с помощью интерпретатора языка БЕЙСИКа. Возможны два
режима, первый - непосредственный, когда каждый оператор выполняется после
нажатия клавиши ВК, и программный, когда вначале набирается вся программа,
а затем она выполняется по команде RUN. Здесь мы рассмотрим только
программный режим. Операторы характеризуются ключевыми словами (именами).
Основные ключевые слова операторов бейсика-LET, PRINT, DATA, READ,
RESTORE, INPUT, IF THEN, GOTO, IF GOTO, DIM, DEF FN, GOSUB, STOP,
END. Иногда для краткости ключевое слово (имя) оператора также называют
оператором.
209
Каждая строка программы в программном режиме должна начинаться с
номера (это является отличием от непосредственного режима). Ключевое слово
оператора выделяется пробелами (отсутствие пробелов не является ошибкой).
Вообще разумная расстановка пробелов придает программе более
привлекательный внешний вид. На строке может размещаться несколько операторов,
разделенных символом \. Набор каждой строки завершается нажатием клавиши ВК.
Для удаления строки следует набрать ее номер и нажать клавишу ВК. Для
удаления символа во время набора строки используют клавишу ЗБ. Строки
удобно нумеровать с интервалами, например через 10, чтобы при изменении
программы можно было вставлять новые строки. Последовательность набора
строк произвольная, система сама расставит их в соответствии с их номерами.
Завершаться программа должна оператором END.
3. Типы констант и переменных.
Оператор присваивания, вывод на печать,
арифметические выражения
БЕЙСИК оперирует с тремя типами констант: целыми, вещественными
и строковыми. Целые константы меняются в диапазоне от -32768 до 32767 и
должны заканчиваться символом %. Вещественные константы допускают как
десятичное, так и экспоненциальное представление и должны находиться в
диапазоне от 10-38 до 1038. Строковые константы содержат не свыше 255 символов и
должны быть заключены в знаки апострофа.
Соответственно имеется три типа переменных: целые, вещественные и
строковые. Их обозначают идентификаторами (именами), которые состоят из
буквы или буквы и последующей цифры, причем для целой перменной в конце
добавляют символ %, а для строковой - символ $ . Здесь в основном
рассмотрены операции с вещественными переменными.
Присваивание переменной соответствующего значения производят с
помощью символа =. Для того чтобы подчеркнуть, что присваивание на самом
деле осуществляется оператором БЕЙСИКа, вводят специальное ключевое слово
LET, которое, однако, не является обязательным. Для набора программы его
можно опускать. Записи А=1.1 и LET A=1.1 эквивалентны. Оператор
присваивания относится к числу так называемых исполняемых операторов.
Вывод данных на печать (на экран дисплея) осуществляется оператором
вывода с ключевым словом PRINT. За этим словом следует список выводимых
элементов (переменных или констант). Если эти элементы разделены запятой,
то на каждый элемент отводится 14 позиций, если точкой с запятой, то печать
каждого последующего элемента производится сразу после предыдущего.
Отсутствие знака в конце списка означает переход на следующую строку. Оператор
PRINT без списка вывода рзначает пропуск строки. При работе с
вещественными переменными на печать выводится шесть значащих цифр. Оператор
PRINT - исполняемый оператор.
Описанный способ вывода носит название бесформатного вывода, так
называемый форматный вывод здесь не рассматривается. Организация вывода данных
на внешнее печатающее устройство будет описана далее.
Задание 2. Определить целую, вещественную и строковую переменные,
присвоить им соответствующие значения, вывести эти значения на печать.
210
Программа 2
10 Al = 1.563 \ В% = 283
20 С7$ ='COMPUTER'
30 PRINT A1;B%;C7$
40 PRINT А1,В%,С7$
50 END
Результат выполнения программы
1.563 283 COMPUTER
1.563 283 COMPUTER
С целыми и вещественными величинами можно выполнять арифметические
операции: сложение, вычитание, умножение, деление, возведение в степень. Для
них используют символы +, -,*,/, и-^. Порядок выполнению! действий тот
же, что и в обычной алгебраической записи.
В случаях, когда есть какие-то сомнения, следует расставлять круглые
скобки.
Совокупность переменных и констант (а также функций) арифметического
и вещественного типов, соединенных знаками арифметических операций и
круглыми скобками, задающими порядок их выполнения, называют арифметическим
выражением. Если в арифметическое выражение входят величины одного типа,
то результат имеет тот же тип. В противном случае результат является
величиной вещественного типа. Арифметические выражения могут входить как
составные части в правую часть оператора присваивания и в оператор печати.
Задание 3. Выполнить арифметические действия с двумя заданными числами
разных типов. Вывести результат на печать.
Программа 3
10 Х=6.38 \ Y=4.21
20 А%=7 \ В%=3
30 PRINT 'X=';X;'Y=';Y;'Y+X=';Y+X;'X-Y=';X-Y
40 PRINT 'X*Y=';X*Y;'X/Y=';X/Y;'X"Y=';XAY
50 PRINT 'А*В=';А%*В%;'А%АВ% = ';А%ЛВ%
60 END
Результат выполнения программы
Х= 6.38 Y= 4.21 Y + X= 10.59 X-Y= 2.17
X*Y= 26.8598 X/Y= 1.51544 X"Y= 2445.09
A*B= 21 A%"B%= 343
4. Ввод данных в программу
Один способ ввода данных в программу - присваивание переменным
соответствующих значений. Другой способ состоит в использовании оператора данных и
оператора чтения данных с ключевыми словами DATA и READ. В операторе
данных после ключевого слова DATA стоит список вводимых величин,
разделенных запятыми.
211
Оператор DATA должен быть либо единственным, либо последним в
строке. Оператор DATA относится к числу неисполняемых операторов. Неисполня-
емые операторы называют также дескрипторами.
Оператор чтения данных после ключевого слова READ содержит список
переменных, которым присваиваются значения. При использовании операторов
DATA и READ надо помнить о соответствии типов констант и переменных. В
ряде случаев несоответствие типов приводит к ошибке (например, когда
константа строковая, а переменная вещественная), в других случаях происходит
изменение типа. Взаимодействие операторов DATA и READ организовано таким
образом, что при повторном появлении оператора READ прочтение происходит
с того элемента списка оператора DATA, на котором произошла остановка при
предыдущем чтении. Чтобы вернуться к началу списка, можно использовать
оператор восстановления RESTORE.
Задание 4. Ввести блок данных различных типов. Присвоить значения
величин из блока данных переменным соответствующего типа. Вывести на печать а)
с использованием оператора RESTORE, б) без использования оператора
RESTORE.
Программа 4
10 DATA 1.1,2.7,4.6,3.8
20 READ A,B
30 READ C,D \ PRINT C,D
40 RESTORE
50 READ C,D \ PRINT C,D
60 END
Результат выполнения программы
4.6 3.8
1.1 2.7
Очень большим удобством в БЕЙСИКе является возможность задания
значений переменных по мере их запроса программой с помощью оператора
INPUT (для строковой переменной LINPUT), который состоит из ключевого
слова INPUT и следующего за ним списка переменных, которым должны быть
присвоены значения. По оператору INPUT программа приостанавливается, а
система выдает на экран дисплея знак вопроса ? В ответ надо набрать через
запятые значения требуемых переменных и нажать клавишу ВК. Только тогда
происходит возобновление выполнения программы. Если в программе имеется
несколько операторов INPUT, нужно набрать несколько наборов данных.
Задание 5. С помощью оператора INPUT составить программу вычисления
таблицы значений степеней семерки до пятой включительно.
Программа 5
10 INPUT N
20 PRINT 7"N
30 END
212
Результат выполнения программы (программа выполняется 5 раз)
7
49
343
2401
14807
5. Операции отношений. Условный и безусловный переходы
Помимо выполнения арифметических действий БЕЙСИК позволяет
проверять выполнение арифметических отношений между переменными, константами
(или арифметическими выражениями). Таких отношений шесть: меньше <,
больше >, меньше или равно < =, больше или равно > =, равно =, не
равно < >. Так же как в случае арифметических действий, происходит
преобразование типа, если сравниваются величины разных - типов целого и
вещественного.
Операции отношений позволяют построить оператор условного перехода с
ключевыми словами IF THEN или IF GOTO. Один вариант такого оператора
имеет вид
IF условие THEN оператор 1,
где условие-это два арифметических выражения, соединенных операцией
отношения. В случае, если отношение истинно, после его проверки выполняется
оператор 1, в противном случае выполняется оператор, идущий в следующей
строке. Оператор 1 должен быть исполняемым оператором.
Таким образом, первый вариант оператора условного перехода - это
локальное ветвление программы вида
Оператор 1
Нет
Задание 6. Написать программу вычисления модуля заданного числа.
P6.BAS
10 INPUT X
20 IF X<0 THEN X=-X
30 PRINT "ABS(X) = ";X
40 END
Результат выполнения программы при х= - 3.2:
ABS(X) = 3.2
213
Второй вариант оператора условного перехода выглядит следующим
образом:
IF условие THEN номер строки.
Если условие выполняется, то происходит передача управления оператору с
меткой, указанной в операторе IF THEN. В противном случае выполняется
оператор, следующий за оператором IF THEN. Второй вариант оператора
условного перехода позволяет осуществить глобальное ветвление программы согласно
одной из схем:
Да
у
Нет
Да
Задание 7. Написать программу вычисления наибольшего общего делителя
двух целых чисел, первое из которых больше второго, используя оператор
условного перехода.
P7.BAS
10 INPUT M%,N%
20 K%=M%-N% \ M%=K%
30 IF K%>N% THEN 20
40 M%=N% \N%=K%
50 IF K%>0 THEN 20
60 PRINT "GCD = ";M%
70 END
Результат выполнения программы
144 30
GCD = 6
Модификацией оператора IF THEN является оператор с ключевыми словами
IF GOTO, имеющий вид
IF условие GOTO номер строки
Действие этого оператора то же, что и второго варианта оператора IF
THEN.
Помимо оператора условного перехода может использоваться оператор без-
214
условного перехода, в котором после ключевого слова GOTO ставится номер
строки того оператора, куда происходит переход. Взаимодействие операторов
условного и безусловного перехода, используемых для ветвления программ можно
понять, например, на основе следующих схем:
Да
1Нет
I
GOTO
— —ч|Н7
[Нет
GOTO
Задание 8. Написать с использованием операторов условного и безусловного
переходов программу решения уравнения д^-Зх+^О методом дихотомии, т.е.
деления отрезка пополам.
P8.BAS
10 INPUT A,X1,X2,E
20 Fl = Xr4-3*A*Xl + l
30 F2=XT4-3*A*X2+1
40 IF Fl*F2>0 GO TO 150
50 C=(X1+X2)*J
60 F=CT4-3*A»C+1
70 IF Fl»F<0 GO TO 110
80 F1 = F
90 X1 = C
100 GO TO 130
110 F2=F
120 X2=C
130 IF (X2-X1)<E GO TO 150
140 GO TO 50
150 PRINT 'X=',X1
160 END
Результат выполнения программы при fl=3.
Х=.111084
215
6. Циклы
Многократное выполнение однотипной процедуры можно организовать с
помощью оператора условного перехода или комбинации операторов условного и
безусловного перехода, а можно организовать в виде цикла. Управление циклом
осуществляется специальной переменной, которая носит название переменной
цикла, изменяющейся с определенным шагом - шагом цикла. В БЕЙСИКе
переменная цикла может быть как целого, так и вещественного типов. Следует,
однако, предупредить, что за счет округления вещественных чисел при
вещественной переменной цикла цикл может выполняться не столько раз, сколько
ожидается.
Цикл начинается следующим оператором, носящим название заголовка или
начала цикла.
FOR переменная = нач. значение ТО конечное значение STEP шаг
В качестве начальных и конечных значений, а также шага цикла
(параметров цикла) могут служить переменные, константы и арифметические выражения.
Вслед за началом цикла идет последовательность операторов БЕЙСИКа,
образующих тело цикла. Завершается цикл оператором конца цикла, имеющим вид
NEXT переменная
Схема выполнения цикла такова. Вначале присваивают значения параметрам
цикла, затем выполняют операторы, входящие в тело цикла. Если конечное
значение переменной цикла меньше начального при положительном шаге, то цикл
не выполняется ни разу. Здесь имеется различие с ФОРТРАНОМ, где цикл
выполняется хотя бы один раз. Далее в операторе NEXT изменяют значение
управляющей переменной и проверяют условие окончания цикла. Если цикл не
окончен, происходит возврат на начальный оператор тела цикла. При окончании
цикла происходит передача управления следующему оператору.
Задание 9. Написать программу вычисления е в виде суммы 10 слагаемых
соответствующего ряда.
Программа 9
10 Е=1. \А=1.
20 FOR 1 = 1 ТО 9
30 А=А/1 \Е=Е+А
40 NEXT I
50 PRINT E
60 END
Результат выполнения программы
2.71828
Циклы могут быть вложенными. Пересечения циклов друг с другом не
допускаются. Выход цикла может быть осуществлен с помощью операторов
условного перехода до окончания цикла.
Очень распространенной ошибкой начинающих программистов является
неправильная организация цикла (зацикливание) с помощью операторов перехода
из-за неверно записанного условия.
Задание 10. Вычислить значение функции в целых точках от 1 до 4,
используя 20 членов ряда Тейлора с точностью не свыше 0,0001.
216
P10.BAS
x < z <
10 FOR X = l TO 4
20 E=l \ A = X
30 FOR 1 = 1 TO 19
40 E = E+A \ A=A*X/(I + 1)
50 IF A < 0.0001 GOTO 70
60 NEXT I
70 PRINT E
80 NEXT X
90 END
Результат выполнения программы
2.71825 7.389 20.0855 54.5981
7. Встроенные функции и функции пользователя
В систему БЕЙСИК встроен ряд стандартных функций. Кроме того,
пользователю разрешается вводить свои нестандартные функции. Здесь мы приведем
лишь часть стандартных функций, аргументами которых являются числовые
величины. Для обозначения стандартных функций используют трехбуквенные
имена (с одним исключением LOG10). Аргумент функции заключают в круглые
скобки и помещают за именем функции. В качестве аргумента могут служить
переменные, константы или арифметические выражения. Сами функции могут
входить составной частью в арифметические выражения. Перечислим следующие
стандартные функции: SGN (А) - знак, ABS (А) - абсолютное значение,
INT (А) - целая часть, SIN (A) - синус, COS (A) - косинус, ATN (А) - арктангенс,
SQR (А) - квадратный корень, ЕХР (А) - экспонента, LOG1O (А) - десятичный
логарифм, RND (А) - случайное число в интервале (0; 1). Всюду А означает
аргумент. Для случайного числа аргумент несуществен. Возможные числовые
значения аргументов естественно определяются математическими свойствами этих
функций.
Задание 11. Для заданного значения аргумента вычислить и вывести на
печать значения стандартных функций.
Программа 11
10 INPUT X
20 PRINT "X=";X
30 PRINT "SIN(X) = ";SIN(X)
40 PRINT "COS(X) = M;COS(X)
50 PRINT "ATN(X) = ";ATN(X)
60 PRINT "SQR(X) = ";SQR(X)
70 PRINT " EXP(X) = ";EXP(X)
80 PRINT "LOG(X) = M;LOG(X)
90 PRINT "INT(X) = ";INT(X)
100 PRINT "RND(X) = ";RND(X)
110 END
217
Результат выполнения программы
Х= 5
SIN(X) =-.958924
COS(X)= .283662
ATN(X)= 1.3734
SQR(X)= 2.23607
EXP(X) = 148.413
LOG(X)= 1.60944
INT(X)= 5
RND(X)= .0407319
Особо надо выделить функцию табуляции TAB (А). Эта функция может
входить только в оператор PRINT, изменяя позицию, указанную аргументом
функции TAB, с которой начинают печататься очередные элементы списка
выводимой информации. Функция TAB служит средством построения графиков.
Задание 12. Вывести на график функции SIN (X).
Программа 12
10 INPUT M,N
20 DIM А(ЮО)
30 FOR 1 = 0 TO N
40 А(1) = 8Ш(Р1/^1)*М + М + 1
50 PRINT TAB(INT(A(I))); "*"
60 NEXT I
70 END
Удобным для пользователя является также наличие в системе встроенной
константы PI (Р1 = 3.1415927).
Пользователь имеет возможность ввести свои собственные нестандартные
функции, используя неисполняемый оператор определения функции DEF. Имя
функции состоит из трех латинских букв, первые две из которых FN
фиксированы, а последняя произвольна. Если значение функции - величина целого типа, то
к имени добавляют символ %. Аргументов у функции может быть несколько,
причем они разделяются запятыми. После определения функции пользователя
она может входить в арифметические выражения на тех же правах, что и
стандартные функции.
Задание 13. Ввести функции arcsin (jc) и arccos (jc) и вычислить их значения
при дг=5.
Программа 13
10 DEF FNS(X)=ATN(X/SQR(1-XA2))
20 DEF FNC(X)=ATN(SQR(1-X"2)/X)
30 Х=.5
40 PRINT'ARCSIN(X) = ';FNS(X)
50 PRINT'ARCCOS(X) = ';FNC(X)
60 END
Результат выполнения программы
ARCSIN(X) = .523599
ARCCOS(X) = 1.0472
218
8. Массивы
При работе с функциями, заданными на множестве точек, с векторами,
матрицами и т.д. приходится иметь дело с массивами. Массив - это
упорядоченная совокупность переменных одного типа. Для того чтобы иметь возможность
работать с массивом, нужно его декларировать с помощью оператора
(дескриптора) DIM. Например, DIM A(10), B1 (2,5). Идентификаторы (имена) массивов
вводят по тем же правилам, что и идентификаторы переменных, но за
идентификатором в круглых скобках ставят одно или два (через запятую)
неотрицательных целых числа. Эти числа обозначают максимальные индексы элементов
массива. Минимальные индексы равны нулю. Заметим, что обозначение массива
и элементов массива выглядит одинаково.
Одновременно можно декларировать несколько массивов. При отсутствии
указания на размерность массива на одномерные массивы отводится 11 ячеек
памяти, а на двумерные - 121.
Ввод элементов массива производят с помощью операторов DATA и READ,
вывод-с помощью оператора PRINT, причем для одномерных массивов
операторы READ и PRINT должны находиться в цикле. Переменной цикла является
индекс массива. В случае двумерных массивов приходится использовать два
вложенных друг в друга цикла. Комбинируя два оператора PRINT - с указанием
переменной и пустой - можно организовать вывод так, чтобы двумерные массивы
располагались в виде таблицы с правильно воспроизведенными строками и
столбцами. При необходимости вывести одномерный массив в строку после
переменной надо поставить запятую или точку с запятой. Если такой знак отсутствует,
массив будет выведен в столбец.
Задание 14. Ввести двумерный и одномерный массивы, состоящие из целых
чисел, затем вывести их на печать.
P14.BAS
10 DIM A(3),D1(2,3)
20 FOR 1=0 ТО 3
30 A(I) = I + 1
40 PRINT A(I),
50 NEXT I
55 PRINT
60 DATA O.,l.,2.,3.,4.,5.
70 FOR 1 = 1 TO 2
80 FOR K=l TO 3
90 READ D1(I,K)
100 PRINT D1(I,K),
110 NEXT К
120 PRINT
130 NEXT I
140 END
Результат выполнения программы:
12 3 4
0 1 2
3 4 5
219
Для ввода элементов массива может быть использован и оператор INPUT.
Задание 15. Ввести матрицу поворота (угол поворота задается с помощью
оператора INPUT), возвести его в степень и вывести результирующую матрицу
не печать.
Программа 15
10 INPUT T,N
20 DIM А(2,2),В(2,2),С(2,2)
30 FOR 1=1 ТО 2
40 FOR J=l TO 2
50 A(IJf) = COS(PI'(T/180+(J-I)/2))
60 В(1Д)=А(У)
70 NEXT J
80 NEXT I
90 FOR L=2 TO N
100 FOR 1=1 TO 2
110 FOR J=l TO 2
120 S(I,J)=0
130 FOR K=l TO 2
140 S(I,J) = S(I,J)+A(I,K)'B(KJ)
150 NEXT К
160 NEXT J
170 NEXT I
180 FOR 1 = 1 TO 2
190 FOR J=l TO 2
200 B(U) = S(I,J)
210 NEXT J
220 NEXT I
230 NEXT L
240 FOR 1 = 1 TO2
250 FOR J=l TO2
260 PRINT B(I,J),
270 NEXT J
280 PRINT
290 NEXT I
300 END
Результат выполнения программы.
.5 -.866026
.866025 .5
9. Подпрограммы
Основным недостатком БЕЙСИКа как алгоритмического языка высокого
уровня в противоположность, например, ФОРТРАНу является недостаточно
разработанный аппарат модульной организации, что затрудняет создание пакетов
прикладных программ, которые можно было бы легко включить в программу
пользователя. Задача модульной организации отчасти решается с помощью под-
220
программ. Подпрограмма представляет собой набор идущих подряд операторов/
БЕЙСИКа, обращение к первому из которых из любого места программы
производится оператором GOSUB. После имени оператора GOSUB ставится номер
строки начального оператора подпрограммы. Заканчивается подпрограмма
оператором RETURN, который осуществляет возврат управления в то место
программы, откуда произошел вызов подпрограммы. Обращение к одной и той же
подпрограмме может происходить из разных мест основной программы.
Существенно, что в подпрограмме можно не придавать конкретных
значений встречающимся там переменным. Это обычно делают в основной
программе.
-тт
Задание 16. Написать программу вычисления интеграла S sin х их с
заданной точностью, используя подпрограмму интегрирования по формуле трапеций.
P16.BAS
10 А=0 \ В=Р1
20 Н = В-А \ N1 = 30
30 DEF FNF(X) = SIN(X)
40 Е=1.00000Е-04
50 GOSUB 200
200 R=.5*H»(FNF(A) + FNF(B))
210 FOR N=2 ТО N1
220 S = 0
230 FOR M = l TO 2A(N-2)
240 S = S + FNF(A + H*(M-.5))
250 NEXT M
260 R1 = R \ R=.5*(R+H*S)
270 H = H*.5
280 IF ABS(R1 - R) < E GO TO 300
290 NEXT N
300 PRINT R
310 END
Результат выполнения программы: 1.99999
При отладке программы часто программы сегментируют введением
оператора STOP. При выходе на этот оператор выполнение программы
приостанавливается, что дает возможность программисту решить, продолжить ли вычисления.
Продолжение это происходит по команде
GOTO номер строки
10. Дополнения и заключительные замечания
Вы уже составили самостоятельно ряд программ. Возникает желание
фиксировать результаты своего труда, показать результаты своего творчества. Чтобы
такой показ прошел более эффективно, программу полезно снабдить
комментариями. Комментарии вводят с помощью оператора REM,noc/ie чего идет текст
комментария. Заметим, что хотя комментарии не выполняются ЭВМ, их наличие
увеличивает объем занятой памяти. Архитектура ДВК не слишком хорошо при-
221
способлена для одновременной работы с русским и латинским алфавитами.
Поэтому комментарии старайтесь писать с помощью латинских букв, а еще
лучше-на английском языке.
Наконец, возникает вопрос, а как, собственно, вывести результат
выполнения программы не только на экран дисплея, а на внешнюю печать? Здесь
прежде всего надо убедиться, что внешняя печать подключена правильно. В
противном случае ЭВМ крайне неодобрительно отнесется к вашей затее и вам
придется немало потрудиться, чтобы она вернулась к диалогу с вами. Если с
печатающим устройством все в порядке, включите до первого оператора PRINT
следудующии оператор OPEN "LP:" FOR OUT PUT AS FILE#1, затем все
операторы PRINT замените на PRINT #1, и наконец, в конце поставьте оператор
CLOSE. К сожалению, печатающее устройство не переводит автоматически
строку при заполнении его символами, как это происходит на экране дисплея.
Поэтому надо тщательно следить за переводом строки в программе. Вывод «а
внешнюю печать текста самой программы производится по команде SAVE LP:.
Приложение
I
Задачи
и упражнения
ЗАДАЧИ К ГЛ. 2
2.1.
2.2.
2.3.
Найти решения следующих трансцендентных
уравнений:
a)
б)
в)
г)
д)
sin У-1/У = О,
In Z - sin Z = О,
y2-shy=0.
Используя два различных метода, найти хотя бы один
действительный корень следующих алгебраических
уравнений:
а) х4 + 7х3 + Зх2 + 4х + 1 = О,
б) 7JC4 + 5х3 + 2х2 + 4х + 1 = О,
в) х4 + 5х3 + 5х2 - 5jc + 6 = О,
г) х5 + х4 + 2х2 - х - 2 = 0.
Найти все корни следующих алгебраических уравнений.
Что можно сказать о корнях, прежде чем их искать?
х4 + 8х3 + 2х2 + Зх + 1 = 0,
х4 + 2х3 + 7х2 + 2х + 7 = 0,
х5 + Зх4 + 6х2 + 3 + 1 = 0,
х7 + Зх3 + 2х + 1 = 0,
х4 + 2Х4 + Зх2 + 5 = О,
х4 + Зх3 + 2х2 + 5х = 0.
223
2.4. Показанный на рисунке кривошишю-шатунный
механизм описывается уравнением
K^cosiifi) + K2sin(<f;)-К3 = S2t при /=1, 2, 3,
где аг = ^/2, д2 = \j а\ + а\-Къ, аъ = ^/(^l)-
Относительно просто найти Sh если даны <У t и
геометрические размеры. С другой стороны, задача
отыскания У i при заданных St и геометрических
размерах требует для решения соответствующего
трансцендентного уравнения численных методов. Подготовить
программу для решения ссответствующей задачи и
провести расчет по своей программе при ах = 1,0,
а2 = 2,0, а3 = 0,5 и S( = 2,1.
2.5. Областью сходимости для задачи является область
изменения стартовых начальных значений, для которых
решение данной задачи сходится. Не сможете ли вы
найти область сходимости решения примера 2.1 по
методу Ньютона, экспериментируя с различными
стартовыми значениями?
2.6. Полином четвертого порядка
f(x) = х4 - 12jc3 + 46*2 - 60л: + 25
при х = 1 имеет кратный корень. Попытаться найти
этот корень несколькими методами, описанными в
§ 2.2.
Удобный способ нахождения кратных корней в тех
случаях, когда известно, что они существуют, состоит
в том, чтобы сначала решить уравнение df / dx = 0
(так как производная в точке, соответствующей
кратному корню, равна нулю), а затем выяснить, не
являются ли некоторые из этих корней корнями
исходного уравнения / (х) = 0. Воспользуйтесь этим методом
для нахождения корней данного полинома.
2.7. Определение корней характеристического уравнения
позволяет выяснить, как влияет увеличение
коэффициента усиления на относительную устойчивость
управляющей системы. Так как положительные действи-
224
тельные части корней характеристического уравнения
системы соответствуют экспоненциальному развитию
переходных процессов, их следует избегать любой
ценой. Для системы регулирования, показанной на
рисунке
■-^84
2.8.
4D + 1
1
3D + 1
характеристическое уравнение имеет вид
Yllfi + ID2 + D + К = 0.
Найти и нанести на график корни Dt в плоскости
комплексного переменного в зависимости от
возрастающих значений К. При каком значении
коэффициента усиления К система теряет устойчивость?
Требуется определить значение критической силы для
стержня, один конец которого защемлен, а другой
может перемещаться в вертикальном направлении, как
показано на рисунке. Критическая сила в этом случае
определяется уравнением
tg \/P/(EI)L
где Р - критическая сила, при которой стержень
теряет устойчивость, EI - изгибная жесткость
стержня, L-ero длина. Введем обозначение
х = VP/(EI) L. Тогда трансцендентное
уравнение, которое предстоит решить, примет вид
= 0.
Составить программу для вычисления вели
чины х при 0 < (с//) <2.
2.9. Трансцендентное уравнение
cos(Jfc/)ch(*/)= -1
возникает при изучении частот колебаний балки,
закрепленной с одного конца. Составить программу для
отыскания трех наименьших решений этого
уравнения.
8-522 225
2.10. При химической реакции
УгОг^ СО2
процентное содержание X диссоциированного моля
СО2 определяется уравнением
(р/К2- I)*3* 3*-2 = 0,
где р - давление, выраженное в атмосферах, а К-
константа равновесия, зависящая от температуры. Найти
X при К = 1,648 . (что соответствует 2800 К), и
р = 1 атм.
ЗАДАЧИ К ГЛАВЕ 3
3.1. Как нужно изменить подпрограмму в примере 3.1, чтобы
вместо метода Гаусса - Жордана использовать метод
исключения Гаусса?
3.2. Метод Гаусса - Жордана, представленный в примере 3.1,
срабатывает только в том случае, когда уравнения
линейно независимы. Это означает, что ни одно из
уравнений не может быть выражено через линейную
комбинацию оставшихся уравнений. Один из способов
обнаружить это состоит в исследовании определителя
матрицы коэффициентов, поскольку в случае
зависимости уравнений он равен нулю. Поэкспериментируйте с
примером 3.1 и зависимым набором коэффициентов
11111
2 2 2 2 2
2 1-12 9
3 12-17
3.3. Используя метод Холесского, найти решение следующей
системы уравнений:
3,0 хг - 1,1 *2 - 2,0 *3 - 1,8 х4 = 1,0,
3,2 хг + 2,1 х2 + 3,2 *3 + 5,2 х4 = 2,0,
3,4 хг + 2,4 х2 - 4,2 *3 + 3,2 х4 = 8,0,
2,6 хг + 2,1 х2 - 3,2 х3 + 3,4 дс4 = - 5,0.
3.4. Сможете ли вы выяснить, насколько чувствительно
решение системы линейных алгебраических уравнений к
изменению правых частей? Поэкспериментируйте с
системой
226
- 1,8 х4 = Л
3,2 хх + 2,1*2 + 3,2дс3 + 5,2*4 = 2,0,
3,4 хг + 2,4 х2 - 4,2 *з + 3,2 х4 = 8,0,
2,6 л^ + 2,1 дс2 - 3,2 х3 + 3,4 jc4 = - 5,0.
Сначала возьмите значение Я = 1, затем посмотрите на
изменение решения при десятипроцентном изменении
значения Р, положив Р = 1,1 и затем Р = 0,9.
3.5. Показанный на рисунке кривошипно-шатунный механизм
описывается уравнением
K^i cos ( yf) + /С2 sin
где fll = ATj/2, a2 =
~ ^з = s2/ ПРИ i =
\ + а\-Къ, аъ =
Механизм должен удовлетворять следующим условиям:
1 1,0 20°
2 1,2 45°
3 2,0 60°
Спроектировать устройство, отвечающее всем трем
указанным выше условиям. Для этого нужно трижды
записать уравнение, описывающее работу механизма, и
найти Ki. Какие значения а^9 а2, а$ соответствуют
искомому решению?
3.6. Найти решение следующей системы нелинейных
уравнений:
3.7.
3.8.
\
Х4 =
х4 = 12,
Решить задачу 3.5 методом прямой итерации.
Система уравнений
5хг + Ъх2
с4 = 17,
227
Х22
Х2ХА
24 = 9,
= 8
имеет решение
Можно ли найти это решение методом итераций
Ньютона? Что происходит в процессе решения?
Имеется ли способ, позволяющий преодолеть
встретившееся затруднение?
3.9. Для приведенной ниже системы уравнений
хг + х2 + х3 + Х4 = 31,
= 58,
= 79,
= 17,
= 234
" XSX2
найти решение, задав в качестве исходных следующие
значения переменных:
Х1 = Х2 = *^3 = Х4 = ^5 = ^*
Воспользоваться методом возмущения парметров,
последовательно решая системы уравнений
хх + х2 + х3 + х4 = 4 + Z7N/10,
хгх2
4х5 = 3 + 55ЛГ/10,
xlx5 = 2 /
*35 = 2
23x4 = 0
52
7V = 1, 2,
234///10, где
10.
ЗАДАЧИ К ГЛ. 4
4.1. Трехосный тензор напряжений можно представить
в виде
S w у Ху X xz
Г ху Syy Г
txz Г yz Szz_
Для определения собственных значений этой
матрицы привести ее определитель к виду кубического
полинома. При
Sxx = 30 • 106 Н/м2,
Syy = 40 • 106 Н/м2,
ху = 6.106 Н/м2,
yz = 7 • 106 Н/м2,
228
Szz = 20 • 106 Н/м2,
= 5 • 106 H/m2
4.2.
4.3.
4.4.
4.5.
4.6.
найти главные напряжения. Для отыскания корней
полинома воспользоваться одним из методов,
описанных в гл. 2.
Найти собственные векторы, соответствующие
собственным значениям - главным напряжениям, полученным
при решении предыдущей задачи.
При каких условиях метод Ньютона оказывается
непригодным для отыскания собственных значений в
задаче 4.1?
Методом итераций найти наибольшее и наименьшее
собственные значения матрицы
Г1 3 2 41
Для произвольного трехмерного твердого тела можно
ввести три момента инерции относительно трех
взаимно перпендикулярных осей и три смешанных
момента инерции относительно трех координатных
плоскостей. Известно, что для несимметричного тела при
фиксированном начале координат существует
единственная ориентация координатных осей, при которой
смешанные моменты инерции обращаются в нуль.
Такие оси называются главными осями инерции, а
соответствующие моменты инерции - главными
моментами инерции, среди которых есть наибольший,
наименьший и имеющий промежуточное значение.
Для матрицы моментов инерции
4.3 2,4 1,9"
2.4 3,2 2,7
1,9 2,7 5,1_
найти три главных момента инерции. Какова
матрица вращений Q, позволящая найти главные оси
инерции?
В приведенной ниже матрице все
А (3, 4), постоянные величины
элементы, кроме
9Д
4,2
3,2
6Д
3,0
5,3
1,7
4,9
2,6
4,7
9,4
3,5
4,0
1,6
X
6,2
229
Найти все собственные значения этой матрицы при
X = 0,9; 1,0 и 1,1. Можно ли на основании
полученных результатов сказать, насколько сильно 10%-ное
изменение значения одного из элементов матрицы
повлияет на ее собственные значения?
4.7. Заменив в предыдущей задаче элемент Л (3, 4) на 1,0
и полагая элемент А(3, 3) равным 8,46; 9,40 и 10,34,
ответить на вопрос, к изменению каких элементов
более чувствительны собственные значения этой
матрицы - диагональных или внедиагональных?
4.8. Изменить программу в примере 4.2 так, чтобы она не
использовала собственных векторов. Насколько
быстрее будет выполнена программа? Насколько меньшая
память будет использована? Какой дополнительный
объем памяти будет сэкономлен, если исключить все
комментарии?
4.9. Баржа предназначена для перевозки через озеро Эри
сцепки из шести железнодорожных вагонов. Буксир
тянет ее за носовую часть, как показано на рисунке.
-VW-
Q О
-ЛЛЛг-
Q О
■ЛЛЛг
Q О
мс
О О
Значения масс вагонов и коэффициентов жесткости
соединительных элементов указаны под рисунком.
Существует опасение, что в сцепке вагонов при
волнении на озере могут возникнуть резонансные
продольные колебания. Вычислить шесть собственных
частот данной механической системы и сравнить их с
частотой волны, равной 1 рад/с. Собственные частоты
связаны с собственными значениями динамической
матрицы D соотношением cOJ s 4/Jij ,
Динамическая матрица образуется из матриц
жесткости [К] и масс [М]
ka = 5• 105 Н/м, kb = kc = kd = ke = kf=l-105 Н/м,
Мх = 8 • 104 кг, М2 = Л/4 = 3 • 104 кг,
Мъ = М5 = 4 • 104 кг, М6 = 2 ■ 104 кг.
4.10. Консольный брус длиной 10 м, имеющий изгибную
жесткость EI = 104 Н/м2 и погонную массу 10 кг/м,
аппроксимируется двумя точечными массами по
230
50 кг каждая, расположенными-в центре и на
свободном конце бруса.
50 кг 50 кг
О О
Требуется найти две основные частоты колебаний
бруса. Это можно сделать зная собственные значения
д,. динамической матрицы [D] = [F] [Щ и имея в
виду, что
[Щ - диагональная матрица, на диагонали которой
стоят массы точек; [F] - матрица изгиба, в которой
элементы /-й строки представляют собой отклонения
точки у под действием единичной силы,
приложенной в точке L Осевая сила отсутствует.
Деформациями сдвига можно пренебречь.
4.11. Решить предыдущую задачу, аппроксимируя
распределение масс не двумя сосредоточенными массами, а
пятью, расположенными через равные интервалы.
4.12. Решить задачу 4.1, используя Q/t-алгоритм из примера
4.3. Насколько больше компьютерного времени
требуется, чтобы реализовать это решение?
4.13. В 4.6 утверждалось, что если в матрице поменять
местами два столбца и две соответствующие строки, то
собственные значения останутся без изменения.
Убедиться в том, что это будет верно при перестановке
второго и пятого столбца и строки в матрице из
примера 4.3, и исследовать соответствующие собственные
значения.
4.14. Какую часть памяти компьютера можно сэкономить,
если из программы в примере 4.3 исключить все
комментарии? Путем увеличения размерности
выяснить, матрица каких размеров может быть
обработана, и посмотреть, сможет ли ЭВМ в этом случае
выполнить программу.
ЗАДАЧИ К ГЛ. 5
5.1. Материальная точка массой т закреплена на конце
тонкого однородного стержня и может совершать
свободные колебания (см. рис.). Подготовить программу,
которая моделировала бы движение этой системы, и
выполнить расчет для полного цикла колебаний. При
231
/ У / / У / /
5.2.
5.3.
5.4.
этом рекомендуется пользоваться
следующим уравнением движения и
дополнительными условиями:
в (0) = тг/4, 6 (0) = 0, g = 9,8 м/с2,
L = 0,10 м.
Если угол отклонения в мал, то
дифференциальное уравнение можно
линеаризовать, приняв sin $ = в . Сравнить
полученные результаты с результатами
для линейного случая.
Решить задачу 4.1 методом прогноза и коррекции.
Результаты решения сравнить с результатами,
полученными методом Рунге-Кутта.
Тело, показанное на рисунке, движется по плоской по-
xlt)
верхности с трением, обусловливающим
демпфирование колебаний. Его масса т = 4,5 кг, жесткость
пружины к = 175 Н/м, коэффициент трения / = 0,3.
Рассчитать движение тела в интервале времени 0 ^^2 с
при начальных условиях:
х(0) = 7,5 см, х(0) = 0.
Результаты представить графически. Расчет
выполнить методом Рунге - Кутта, а также методом
прогноза и коррекции. Какой из них требует меньше
машинного времени? Почему?
С целью выяснить, нельзя ли усовершенствовать
механизм, связывающий клавиши пианино с
молоточками, было выполнено исследование этого
механизма. Оледжски предложил следующую нелинейную
модель:
Ъх\
- х2)
к2х2)- 0
- х2)2к
232
5.5.
В этих дифференциальных уравнениях хх - смещение
клавиши вниз, х2 - смещение молоточка вперед,
F - направленная вниз сила, действующая на
клавишу. Входящие в указанные уравнения постоянные
имеют следующие значения:
тх = 0,074 кг, а0 = 0,406 кг, Ьо = 18,3 кг/м,
klfl = 1,16 • 104 Н/м,
*2,о = 0,525 • 106 Н/м2, к30 = 1,1 • 106 Н/м2, 0 < F < 80 Н.
Подготовить программу для ЭВМ, которая
моделировала бы движение этой системы при F = 80 H в
интервале времени 0 4 * ^ 30 мс.
Систему отопления жилого помещения можно описать
следующим дифференциальным уравнением:
где QBX- подвод теплоты от нагревателя, Дж/с;
<2Вых - потери теплоты в окружающую среду, Дж/с;
Тс - температура во внутренних помещениях дома,
° С; t - время, с.
Такие отопительные системы часто оборудуют
термостатами, которые включают и выключают
нагреватель в зависимости от значения разности заданной
температуры Td и действительной температуры Тс в
помещении.
Пусть суточные потери теплоты при температуре
окружающей среды 0°С составляют
а регулятор работает в соответствии с графиком
30 000 Д ж 1с
Тс)
Написать программу для моделирования
отопительной системы при Td = 22 °С, предполагая, что
начальная температура в помещении Тс = 10 °С. Какова
частота предельного цикла для рассматриваемой
системы?
5.6. Решить следующую краевую задачу:
у" = 2jc2 + Зу3 + 4гу,
233
при шаге h = 0,2. Решить ту же задачу при шаге
А = 0,1. Отличаются ли полученные результаты? Если
да, то почему?
5.7. В задаче 5.1 о маятнике требуется получить 8 = 31/4
при / = 1,0 с. Каким для этого должен быть угол 0
при t = 0, если 6 (0) = 0?
5.8. Дифференциальное уравнение изгибной линии бруска
с постоянным поперечным сечением имеет вид
_ М(х) PL2 , 1 jc ч
Кривизна = ' = (— —) .
При начальных условиях
и L = 1,0 м, PL?/{El) = 2,0 составить программу для
расчета изгибной линии бруска у(х), пользуясь
а) точным выражением для кривизны
Кривизна =
(1+/2)3'2
б) приближенным выражением для кривизны
Кривизна = /'.
Сравнить полученные результаты. Насколько хорошо
приближенное выражение для кривизны
аппроксимирует ее точное выражение?
5.9.
5.10.
234
EI
Для механизма пианино, описанного в задаче 5.4,
требуется выполнить условие хх = 8 мм при t = 45 мс.
Какова должна быть при этом сила удара F!
Для механизма, описанного в задаче 5.3, в отсутствие
демпфирования найти и представить графически
зависимость частоты свободных колебаний со f от
начального смещения Xf в интервале значений
0 ^ xQ ^ 30 см при условиях
х (0) = х0 их (0) = 0.
ЗАДАЧИ К ГЛ. 6
6.1. В приведенной ниже тарировочной таблице для
термопары даны показания вольтметра при изменении
температуры с постоянным шагом:
т,
и,
Ор
мВ
0
- 0,670
20
-0,254
40
0,171
60
0,609
80
1,057
100
1,517
С помощью интерполяции по Лагранжу найти
показания вольтметра при Т = 55 °F.
6.2. Решить задачу 6.1 методом разделенных разностей.
6.3. Решить задачу 6.1 с помощью кубических сплайнов.
6.4. Решить задачу 6.1, интерполируя итерационным
методом.
6.5. При каких условиях для таблицы данных лучше
использовать аппроксимацию сплайном, чем
приближение полиномом по методу наименьших квадратов?
6.6. Какие инженерные и научные данные не подходят для
приближения полиномом? Не лучше ли приближать
их кубическим сплайном?
6.7. Следующие данные представляют соотношение между
уровнем шума и различением слов по артикуляции в
реверберирующей комнате.
Уровень шума, дБ Процент артикуляции слов
75 86
85 69
95 40
105 8
Для этих данных выполнить обратную интерполяцию
и найти уровень шума, при котором процент
артикуляции слов равен пятидесяти.
6.8. Нередко исходную информацию инженер может
получить только в графическом виде. Чтобы пользоваться
этой информацией в процессе проектирования с
помощью ЭВМ, ее необходимо аппроксимировать
аналитической зависимостью. В случае, показанном на
рисунке, кривая зависимости безразмерной величины
нагрузки от безразмерной деформации при сС = 90 °
несимметрична. Определить по этой кривой значения
PL21 (ЕГ), соответствующие
W/L= -0,1; -0,2; -0,3; -0,4; -0,5; -0,6;
-0,7; -0,8.
235
-1,0 -0,5 0
Р
С помощью метода наименьших квадратов
аппроксимировать эти точки многочленами степеней 3, 5 и 7.
Какая аппроксимация лучше? Почему?
6.9. Найти приближенные значения первой производной
для точек, определенных по кривой в предыдущей
задаче. Полученные рузультаты сравнить с
производными многочленов, найденных методом наименьших
квадратов.
6.10. Определить по кривой, соответствующей с/ =0в задаче
6.8 значения PL2 / {ЕТ) в интервале - 0,5 ^ WL ^ 1 и
аппроксимировать полученные данные кубическим
сплайном. Площадь под кривой определить
численным интегрированием.
6.11. В таблице приведены средние значения роста лиц
мужского пола в возрасте от 4 до 17 лет. Для
аппроксимации этих данных Берталанфи предложил формулу
где а, Ъ и к - постоянные величины, которые
требуется определить. Найти наилучшие значения этих
постоянных методом наименьших квадратов.
Возраст, годы
4
5
6
7
8
9
10
Рост, см
103,9
111,5
117,1
122,4
128,0
133,1
137.9
Возраст, годы
11
12
13
14
15
16
17
Рост, см
142,8
147,9
153,7
160,0
166,0
170,9
173,2
236
6.12. По данным задачи 6.11 найти и представит л,
скорость лиц мужского пола. В какок, гра(*)ически
максимальна? К°М возРас^ она
ЗАДАЧИ К ГЛ. 7
7.1. Модифицировать программу, использованы
7.3, приспособив ее для формулы Ньютон - КВ задаче
лее высокого порядка. Проверить предСта к°теса бо-
ритм, решив задачу заново. енныи алго-
7.2. В подпрограмме, использованной в задаче 71
ления производной по набору раноотего ДЛЯ ВЬ1ЧИС"
применен полином Лагранжа второго по ИХ данных>
фицировать программу, приспособив ее ^ЯДКа# Моди-
Лагранжа третьего порядка, и перерещат * ПОЛИНОМУ
бы просмотреть, как изменятся результать ч^' что"
7.3. В резюме к гл. 7 было заявлено, что фоп * т,
на - Котеса можно написать и для случ^ЛЫ ют0"
стоящих данных. Составить программу и*Я неРавноот-
на базе разбиения на трапеции для nJ "нтегРирования
Применить эту программу для нахожпрМеННОГ° шага>
под кривой в задаче 7.2 от t = 0 до t = g ^ площади
7.4. Рассмотрение точного уравнения Эйлера ^ gj
больших деформаций бруса приводит к э ^лли Для
интегралам. Эллиптический интеграл /1ЛИПТИческим
писывают в виде ПеРвого Р°Да за-
Составить на языке Бейсик подпрограМму
ления этого эллиптического интеграла 1?11?ЛЯ вычис"
значениях аргументов. Точность пРОвепИТь заданных
нения с табличным значением путем срав-
F(0,5;5Z/6) = 0,52942863.
7.5. Инженеру часто приходится сталкиваться
Сиверта, который связан с функцией ошибкНТеГРаЛ°М
ралом бесселевых функций и имеет вид И интег"
в
S (х, в) = / exp (-jcsec<p) d<p.
S (1,0; ^/3) = 0,307694.
237
7.6. Рис. 7.4 иллюстрирует влияние ошибок усечения и
округления на общую ошибку при интегрировании. Рисунок
указывает на то, что существует оптимальный шаг А.
Поэкспериментируйте с интегралом
у = J sin(x)dx
о
с тем, чтобы найти оптимальное значение А при
использовании метода Симпсона. Покажите, что это
значение оптимальное, построив ошибку по нескольким
значениям шага, вблизи оптимальной точки.
7.7. Как будет отличаться результат в задаче 7.6, если вместо
правила Симпсона использовать правило трапеций?
7.8. Следующая таблица представляет некоторые физические
характеристики воздуха при атмосферном давлении.
Температура,
°С
-50
-40
-30
-20
-10
0
10
20
30
40
50
60
70
80
90
100
150
200
250
300
Плотность,
кг/м3
1,582
1,514
1,462
1,384
1,342
1,292
1,247
1,204
1,164
1,127
1,092
1,060
1,030
1,000
0,972
0,946
0,834
0,746
0,675
0,616
Динамическая
вязкость,
10"5 Па/с
1,46
1,51
1,56
1,61
1,67
1,72
1,76
1,81
1,86
1,91
1,95
2,00
1,05
2,09
2,13
2,17
2,38
2,57
2,75
2,93
Кинематическая
вязкость,
Ю-5 м2/с
0,921
0,998
1,08
1,16
1,24
1,33
1,42
1,51
1,60
1,69
1,79
1,89
1,99
2,09
2,19
2,30
2,85
3,46
4,08
4,75
Построить кривые плотности и вязкостей в
зависимости от температуры. Найти приближение для наклонов
этих кривых. В каком температурном интервале
плотность воздуха наиболее чувствительна к изменениям
температуры?
238
Приложение
Словарь терминов
вычислительной
техники
Access time - время доступа. Время, требуемое для прочтения данных с
устройства ввода или для их выведения на устройство вывода.
Accumulator - аккумулятор. Регистр для хранения результата операции,
выполненной ЭВМ.
Adder - сумматор. Логическая схема, выполняющая суммирование двоичных
чисел.
Address - адрес. Двоичное число для обозначения определенной ячейки
памяти.
Algorithm - алгоритм. Вычислительная процедура для решения задачи.
Alphanumeric - буквенно-цифровой. Набор символов, содержащий буквы
алфавита и цифры.
Analog-to-digital - аналого-цифровой (АЦ). Название устройства,
преобразующего внешние сигналы в форму, доступную для восприятия ЭВМ.
APLA programming language - АЛЛ. Название языка программирования
высокого уровня, ориентированного на диалог.
Applications program - прикладная программа. Программа, решающая
специализированную задачу.
Arithmetic-logic unit - арифметико-логическое устройство (АЛУ).
Устройство, выполняющее арифметические и логические операции в ЭВМ.
Array - массив. Список или таблица (матрица) данных.
ASCII code-код ASCII. Аббревиатура для American Standard Code for
Information Interchange (Американский стандартный код для обмена
информацией). Двоичный код для представления букв, цифр и других символов. (В
вычислительной технике СССР используют близкий код КОИ-7.)
Assembler - ассемблер. Программа, автоматически преобразующая мнемокод
языка ассемблера в машинный язык.
Assembler language - язык ассемблера. Следующий уровень над машинным
языком. Заменяет просто запоминающимися мнемоническими командами
двоичные инструкции машинного языка.
239
Asynchronous - асинхронный. Функционирование ЭВМ, происходящее только
в том случае, когда на входе возникает реакция на событие.
Auxiliary storage - внешняя память, расширение памяти. Память,
дополняющая основную внутреннюю память ЭВМ.
Background processing - фоновая обработка. Выполнение программы с
низким приоритетом, происходящее, когда нет программы с высоким приоритетом
или не выполняется процесс в реальном времени.
Base - база. Основание системы счисления.
Basic - БЕЙСИК. Аббревиатура для Beginner-s АН-Purpose Symbolic
Instruction Code (универсальный код символьных команд для начинающих). Язык
программирования, используемый в большинстве персональных ЭВМ.
Batch processing - пакетная обработка. Режим, когда составляющие
программы перед выполнением объединяются в группы.
Binary - двоичный. Система счисления с основанием 2. Этот термин
используют также для описания электронной схемы, которая имеет два состояния,
обычно включена - выключена.
Binary Coded decimal - двоично-десятичные числа. Система счисления,
используемая в ЭВМ и микрокалькуляторах, когда каждой десятичной цифре
соотносят двоичное число.
Binary digit - двоичная цифра. Двоичные цифры от 0 и 1.
Bistable - бистабильный (элемент). Электронная схема или элемент,
которые могут находиться в двух рабочих состояниях (например, механический
переключатель, ламповый индикатор или триггер).
Bit - бит. Сокращение от binary digit.
Bit rate - скорость обмена. Скорость, с которой двоичные цифры или
импульсы возникают в магистралях обмена или каналах.
Block - блок. Множество цифр, символов, слов, обрабатываемых как единое
целое.
Branch - ветвление. Передача управления от одной инструкции к
инструкции в другом месте программы.
Buffer - буфер. Изолирующая схема, которая (в частности) отделяет одну
схему от другой. Также область памяти, временно резервируемая при передачи
данных с одного устройства на другое.
Bug - ошибка (скрытая), дефект. Ошибка в программе или дефект в
функционировании ЭВМ.
Bus - шина, магистраль. Несколько электрических проводников, передающих
напряжение или двоичные данные между различными устройствами ЭВМ.
Byte - байт. Набор из (обычно) 8 бит.
Calculator - калькулятор. Микропроцессорное (малое) устройство,
предназначенное в основном для решения вычислительных задач.
Card reader - перфокарточное устройство ввода. Устройство ввода данных в
ЭВМ, считывающее информацию с перфокарт.
Carriage - каретка. Управляющий механизм для пишущей машинки или
принтера, автоматически подающий, сдвигающий, формирующий и выдающий
бумажные листы.
Cassette unit - кассетник. Магнитофон с кассетами, используемыми как
запоминающее устройство. Широко применяется для бытовых персональных
компьютеров.
240
Central processing unit (CPU) - центральный процессор. Арифметическо-логи-
ческое устройство и устройство управления ЭВМ.
Character - символьная переменная. Буква, цифра или символ, которые
может понять, сохранить и обработать ЭВМ.
Chip - чип. Тонкая пластина кремния размером менее 1 см2, с интегральной
схемой, содержащей от десятков тысяч электронных элементов на своей
поверхности.
Circuit - электронная схема. Набор электронных элементов и электрических
связей, позволяющий выполнять определенные операции.
Clock - таймер, часы. Электронная схема, вырабатывающая
последовательность равноотстоящих во времени импульсов для синхронизации работы
различных узлов ЭВМ.
Cobol - КОБОЛ. Аббревиатура для Common Business Oriented Language.
Язык программирования высокого уровня, созданный для программирования
экономических задач.
Code - код. Метод представления букв, чисел и символов в виде двоичных
(например) чисел.
Coding - кодирование. Процесс перевода задачи, логически представленной
функциональной схемой в набор инструкций и данных для ЭВМ.
Coding form-форма для кодирования. Бланк для записи инструкций
программы для ЭВМ. Также называется программным бланком.
Comptible - совместимый. Термин, применяемый к вычислительной системе,
который показывает, что на ней можно выполнять программы, разработанные
для другой вычислительной системы.
Compiler - компилятор. Программа, переводящая программу на языке
высокого уровня в программу на машинном языке, пригодную для выполнения на
определенной вычислительной системе.
Computer - компьютер, ЭВМ. Электронное устройство, которое
обрабатывает дискретные (цифровые) или непрерывные (аналоговые) данные.
Computer science - информатика. Область знания, которая включает
разработку и использование вычислительной техники, включая программное
обеспечение.
Console - консоль, пульт оператора. Часть ЭВМ, используемая для связи
оператора с ЭВМ.
Controle panel - панель управления. Панель, где расположены выключатели и
индикаторы, позволяющие управлять вычислительной системой.
Control unit - устройство управления. Часть центрального процессора,
которая управляет последовательной работой всей вычислительной системы.
Conversational mode - режим диалога. Режим работы ЭВМ, при котором
пользователь находится в непосредственном взаимодействии с ЭВМ без заботы о
языковых проблемах и проблемах коммуникации.
Counter - счетчик. Цепочка триггеров, считающих в двоичном коде.
CPU - центральный процессор. Аббревиатура для Central Processing Unit.
CRT-ЭЛТ. Аббревиатура для Cathode-Ray Tube {электронно-лучевая
трубка). ЭЛТ применяется для телевидения и видео-дисплеев.
Cycle - цикл, такт. Интервал времени, за который происходят элемен
гарные последовательные действия ЭВМ.
Data - данные. Числа, факты, информация, результаты, сигналы и почти все,
что может быть воспринято и обработано ЭВМ. 241
Data base - база данных. Обширный файл данных, содержащий информацию
в необходимом для нужд пользователя формате и доступную для обработки по
мере надобности.
Data collection - сбор данных. Собирание исходных данных для ввода в
вычислительную систему.
Data processing - обработка данных. Термин, используемый в связи с
выполнением устройствами операций обработки данных.
Data-processing center - центр обработки данных. Комплекс вычислительной
техники, обеспечивающей пользователей возможностью производить вычисления.
Data structures - структуры данных. Способы организации данных (т.е.
массивы, файлы и т.д.).
Debug - отладка. Процесс отыскания и определения ошибки в
компьютерной программе или в работе компьютерного устройства.
Decimal - десятичный. Система счисления (и числа) с основанием 10.
Decoder - декодирующее устройство. Комбинационная электронная схема,
которая переводит данные в двоичном коде в другие системы счисления.
Decrement - декремент. Уменьшение значения числа на какое-то
фиксированное значение, обычно на единицу.
Demultiplexer - демультиплексор. Комбинационная электронная схема,
переводящая логическое состояние с одного входа на один из нескольких выходов.
Diagnostics - диагностика. Сообщения, указывающие на ошибки,
обнаруженные в исходной программе,распечатываемые ассемблером или компилятором.
Digit - цифра. Символ системы счисления, представляющий определенную
величину.
Digital computer - цифровая ЭВМ, цифровой компьютер. ЭВМ,
использующая дискретные сигналы для представления числовых величин. Почти все
современные ЭВМ работают в двоичном коде.
Digital plotter - цифровой графопостроитель. Устройство вывода, которое
рисует график автоматическим управляемым пером, выполняющим
последовательность шагов.
Digital-to-analog - цифро-аналоговый (ЦА ). Название устройства, которое
превращает цифровые данные с ЭВМ в аналоговые сигналы.
Direct-accesse storage - запоминающее устройство с произвольным
доступом. Представляет процесс извлечения данных с .. или занесение данных в
запоминающее устройство, когда время, требуемое для такого доступа, не зависит
от расположения данных, занесенных или извлеченных с запоминающего
устройства перед этим.
Discette - дискета (см. floppy disc).
Disc memory - дисковая память (см. magnetic disc memory).
Disc operating system - дисковая операционная система. Программное
обеспечение, расположенное на диске для управления файлами, программами и
устройствами и разработки прикладного программного обеспечения.
Аббревиатура - DOS (ДОС).
Disc pack - пакет дисков. Пачка из нескольких магнитных дисков в виде
самостоятельного съемного устройства.
Displey unit - дисплей. Устройство, обеспечивающее визуальное
представление данных. См. GRT.
Documentation - документация. Важная часть разработки ЭВМ и
программного обеспечения. Процесс записи в стандартизованном формате подробного
описания аппаратных- и программных разработок.
Dowm time - потерянное время. Полное потерянное время, когда системы
компьютера не используются из-за неправильного функционирования.
Dump -дамп, распечатка памяти. Распечатка всего содержимого
запоминающего устройства.
EBCDIC - аббревиатура для Extended Binary Coded Decimal Interchange
Code - расширенный двоичный код для цифрового обмена,
8-битовый код, используемый для представления данных в ряде ЭВМ. (В советской
вычислительной технике аналогом является код ДКОИ-8.)
Emulate - эмулировать. Имитировать одну систему на другой так, что
имитирующая система воспринимает те же данные, выполняет те же программы и
получает те же результаты, что и имитируемая система.
Encoder - кодировщик, устройство кодирования. Комбинационная
электронная схема, которая переводит данные из какой-либо системы счисления в
двоичную.
EPROM - ППЗУ. Аббревиатура для Erasamble Programmble Read-Only
Memory (перепрограммируемое постоянное запоминающее устройство).
Устройство ПЗУ, содержимое которого можно стирать для его изменения.
Erase - стирать. Очищать память или удалять данные из памяти.
Execute - выполнить. Выполнить (в частности) инструкцию программы на
ЭВМ.
Field - поле. Специальный вид или структура данных или инструкций.
File - файл. Организованный именованный набор связанных данных.
Fixed word - фиксированная длина слова. Соглашение, по которому
машинное слово всегда содержит определенное число битов, символов, байтов или
цифр.
Flip-flop - триггер. Базовая логическая схема. Схема, которая всегда
находится в одном из двух возможных состояний.
Floppy-disc - гибкий диск (флоппи-диск). Гибкий диск (дискета) из покрытой
оксидом полиэфирной пленки, находящийся в пластиковом пакете. Пакет, как
целое, помещают в дисковод. Гибкие диски являются дешевыми устройствами
памяти, их широко используют для мини- и микроЭВМ и персональных ЭВМ.
Flow chart - блок-схема. Диаграмма, которая показывает основные шаги или
операции, выполняемые в программе для ЭВМ.
Foreground-processing - оперативная обработка (в противоположность
фоновой). Автоматическое выполнение программ на ЭВМ, которые разработаны для
приоритетного использования вычислительных возможностей.
FORTRAN. Formula Translation - ФОРТРАН. Язык программирования
высокого уровня, предназначенный для программирования научных задач.
Garbage - мусор. Термин, часто используемый для описания недостоверных
результатов выполнения компьютерных программ, возникающих из-за сбоев
аппаратуры или ошибок в программе.
Gate - вентиль. Простейшая логическая электронная схема. Простой
вентиль может инвертировать логическое состояние на входе или два входных
сигнала преобразовать в один выходной.
General-purpose computer - универсальная ЭВМ. Компьютер, который
предназначен для решения широкого класса задач. Большинство ЭВМ принадлежат
этому классу.
243
Gigo. Gabage in - garbage out - мусор на входе - мусор на выходе. Если
входные данные недостоверны, то и выходные данные тоже окажутся
недостоверными.
Hard copy - твердая копия. Распечатка на бумаге результатов или данных с
ЭВМ.
Hardware - аппаратура. Электронные схемы ЭВМ.
Hexadecimal - шестнадцатеричный. Система счисления с основанием 16.
"Нех"-числа удобны для представления 4-битовых двоичных групп.
Higer-level language - язык высокого уровня. Язык программирования на
ЭВМ, независимый от конкретной архитектуры ЭВМ.
Housekeeping - внутреннее обслуживание. Операции, происходящие в ЭВМ
или в программе для ЭВМ, очищающие память, проверяющие регистр
состояния, организующие данные и устанавливающие все, что еще нужно для
выполнения обработки данных.
Illegal operation - недопустимая операция. Инструкция программы, которую
не может выполнить ЭВМ.
Increment - инкремент (приращение). Увеличение значения числа на
фиксированную величину, часто на единицу.
Information - информация. Данные, организованные в осмысленную
последовательность.
Information retrieval - информационный поиск. Процесс классификации и
индексации данных на устройстве памяти по формату, удобному для
взаимодействия с пользователем.
Input - ввод. Пересылка данных из внешних устройств в устройство
внутренней памяти ЭВМ.
Input unit - устройство ввода. Устройство, используемое для передачи
данных в центральный процессор.
Input/output - ввод-вывод. Общее название для - периферийных устройств,
используемых для связи с ЭВМ, и передаваемых данных.
Instruction - инструкция (команда). Последовательность символов, с
помощью которых определяют базовые операции и сообщают ЭВМ, где найти
данные, нужные для выполнения операции.
Instruction repertoire - репертуар команд. Полный набор машинных
инструкций для данной ЭВМ.
Integer - целое. Целое число, которое может быть положительным,
отрицательным или нулем. Оно не имеет дробной части. Примерами целых являются
числа 526, -378 или 0.
Integrated circuit - интегральная схема. Электронная схема на маленькой
кремниевой пластинке.
Intelligent terminal - интеллектуальный терминал. Устройство ввода-вывода,
в котором определенный объем вычислительных возможностей физически
встроен в само устройство.
Interactive - интерактивный диалоговый. Высокий уровень взаимодействия
между пользователем и вычислительной системой.
Interface - интерфейс. Объединяющее звено между двумя частями
аппаратуры или двумя системами.
Internal storage - внутренняя память. Адресуемая память, непосредственно
управляемая центральным процессором ЭВМ.
244
Interprete - интерпретатор. Программа, которая переводит, а затем
выполняет другую компьютерную программу шаг за шагом.
Interrupt - прерывание. Временное прекращение нормального выполнения
программы по специальному сигналу.
Iterative process - итеративный процесс. Процесс, в котором одна и та же
процедура повторяется много раз, пока не достигается нужный результат.
Job -задание. Определенная группа задач, описанная как единица работы
ЭВМ.
К-К. Сокращенный способ описания объема памяти ЭВМ. Соответствует
210(1024) бит. Так, 4 К памяти вмещают 4096 бит.
Keyboad - клавиатура. Набор клавиш, как на пишущей машинке,
предназначенный для ручного ввода данных в компьютер.
Language - язык. Символы, фразы, буквы и цифры, используемые для связи
с ЭВМ.
Light pen - световое перо. Указатель, используемый с другими устройствами
визуализации для добавления, изменения и стирания информации на экране
дисплея.
Line printer - строчный принтер, печатающее устройство. Печатающее
устройство, выводящую полную строку за одну операцию.
Logic circuit - логическая схема. Вентиль или другая схема, с двумя
(обычно) входами и одним выходом.
Loop - цикл. Последовательность инструкций ЭВМ, повторяющаяся один раз
или более, пока не достигается требуемый результат.
Machine address - машинный адрес. Адрес, присвоенный постоянно
разработчиком ЭВМ определенной ячейке памяти. Называется также абсолютным
адресом.
Machine independent - машинно-независимый. Этот термин используют,
чтобы указать на то, что программа разработана в большей степени с ориентацией
на задачу, нежели на характеристики вычислительной техники.
Machine language - машинный язык. Базовый язык ЭВМ. Программы,
написанные на машинном языке, не требуют дальнейшей интерпретации.
Macroinstruction - макроинструкция. Инструкция ЭВМ, состоящая из
последовательности микроинструкций.
Magnetic disc memory - память на магнитных дисках. Устройство памяти,
с которого происходит накопление и на которое производится поиск двоичных
данных, выполненное в виде похожих на пластинку металлических или.
пластиковых дисков, покрытых магнитным материалом.
Magnetic tape memory - память на магнитной ленте. Устройство,
используемое для чтения и записи данных и выполненное в виде намагниченных точек
на бобине ленты, покрытой магнитным слоем.
Mainframe - основная структура (см. ЦПУ), ядро ЭВМ. Часть ЭВМ,
которая содержит устройство упрвления, арифметическое устройство и внутреннюю
память.
Matrix printing - матричная печать. Метод печати символов и других
данных путем нанесения рисунка из маленьких точек.
Medium - носитель. Физический носитель, на который записывают данные
(например, дискета или магнитная лента).
245
Megahertz - мегагерц. Миллион циклов в секунду.
Memory - память. Часть ЭВМ, где хранятся данные.
Menu - меню. Перечень возможностей для выбора, обычно на экране
дисплея.
Microcomputer - микроЭВМ. ЭВМ, выполненная из микропроцессора и одной
или нескольких микросхем памяти. Существуют также микроЭВМ на одном
чипе.
Microelectronics - микроэлектроника. Область, имеющая дело с технологией
производства микросхем (например, интегральные схемы, технология тонких
пленок, твердотельные логические модули).
Microinstruction - микроинструкция. Базовая операция, выполняемая ЭВМ.
Microprocessor - микропроцессор. Процессор для ЭВМ (арифметическо-логи-
ческое устройство, управления и несколько регистров) на одном кремниевом
чипе.
Microsecond - микросекунда. Миллионная доля секунды. Сокращенно мкс.
Millisecond - миллисекунда. Тысячная доля секунды. Сокращенно мс.
Minicomputer - мини-ЭВМ. Небольшая и относительно недорогая ЭВМ (но
не микроЭВМ).
Mistake - ошибка. Ошибка человека (например, арифметическая ошибка,
неправильный набор с пульта, неверная формула, неверная машинная инструкция).
Mnemonic - мнемоника. Облегчение запоминания, как например сокращение
или аббревиатура.
Modem - модем. Сокращение от модулятор/демодулятор. Его функция -
взаимодействовать с устройствами обработки информации и придавать данным
форму, удобную для пересылки и приема с помощью передающих средств.
Monitor - монитор. Телевизор без электронных схем для приема передач.
Широко используется в микроЭВМ.
Multiplexor - мультиплексор. Связующее устройство, которое объединяет
логические сигналы с одного или нескольких входов на один выход.
Multiprocessing - мультиобработка. Независимое и одновременное
выполнение программ, поддерживаемое конфигурацией ЭВМ, содержащей несколько
арифметических и логических устройств, каждое из которых имеет доступ к
общей памяти.
Multiprogramming - мультипрограммирование. Соисполнение ЭВМ двух
программ или более. Программы исполняются попеременно на одной
вычислительной системе.
Nanosecond - наносекунда. Одна биллионная доля секунды. Сокращенно не.
Negative logic - отрицательная логика. Система логики, в которой двоичный
бит 0 представляется высоким напряжением, а бит 1 - низким напряжением.
Network - сеть. Соединение нескольких узлов средствами для передачи
данных.
Nonvolatile storage - энергонезависимая память. Память, для сохранения
данных в которой не нужно электропитания.
Number - число. Представление величины. В ЭВМ числа могут представлять
данные, символы, инструкции и т.д.
Numeric pad - цифровая клавиатура. Специальная совокупность клавишей,
позволяющая вводить цифры от 0 до 9.
246
Object program - объектная программа. Программа, написанная или
представленная на машинном языке.
Octal - восьмеричный. Система счисления с основанием 8.
Off-line - режим офлайн (автономный). Функционирование периферийных
устройств, независимо от центрального процессора.
On-line - режим онлайн (в линию). Функционирование периферийных
устройств под непосредственным управлением центрального процессора.
Operating system - операционная система. Часть программного обеспечения,
управляющая выполнением программ на ЭВМ и тем самым обеспечивающая
планирование, ввод-вывод, компиляцию, управление данными, распределение
памяти, протоколирование и другие возможности.
Operation code - код операции. Часть инструкции, задающая операцию,
которая будет выполнена ЭВМ (например, сложение, деление, пересылка). Также
называют командой.
Output - вывод. Данные, пересылаемые из внутренней памяти ЭВМ в иную
память или на периферийное устройство.
Output section - куст вывода. Принтер, видеодисплей и другие устройства,
которые делают доступной оператору или внешним электронным устройствам
информацию, выдаваемую компьютером.
Output unit - устройство вывода. Устройство, предназначенное для записи
данных, пересылаемых из внутренней памяти ЭВМ (например, перфокарточное
устройство вывода, принтер, дисплей, магнитный диск, телетайп).
Parallel processing - параллельная обработка. Обработка данных в виде
набора битов одновременно.
Parity bit -bum контроля по четности. Бит, дополняющий двоичное слово,
чтобы сделать полное число единиц четным или нечетным.
PASCAL - ПАСКАЛЬ. Язык программирования, представляющий особый
интерес для ученых в области вычислительной техники, находит все большее
распространение для различных приложений.
Patch - "заплата". Аварийное изменение аппаратных средств или
программного обеспечения ЭВМ.
Peripheral devices - периферийные устройства. Устройства внешней памяти
и ввода-вывода, объединенные с ЭВМ.
Personal computer - .лшкроЭВМ с клавиатурным вводом, разработанная с
учетом простоты использования и максимальной экономии.
Picosecond - пикосекунда. Одна триллионная доля секунды. Сокращенно пс.
PL/1 - ПЛ/1. Аббревиатура от Programming Language. Универсальный язык
программирования.
Positive logic - положительная логика. Система логики, в которой двоичный
бит 1 представляется высоким напряжением, а бит 0-низким напряжением.
Precision - машинная точность. Степень точности представления величин.
"Машинная" точность результата вычислений может быть большей, чем
"арифметическая". Например, верное значение числа с шестью значащими цифрами
есть 3,14159, а значение 3,14162 имеет машинную точность шесть цифр, но
верно только до пяти цифр.
Printer - принтер, печатающее устройство. Периферийное устройство,
распечатывающее на бумагу информацию с ЭВМ.
247
Problem-oriented language - проблемно-ориентированный язык. Язык
программирования, разработанный для удобного представления определенного класса
задач.
Procedure - процедура. Точный метод для последовательного решения задачи.
Procedure-oriented language - процедурно-ориентированный язык. Язык
программирования, разработанный для удобного представления процедур,
используемых при решении широкого класса задач (например, ФОРТРАН, АПЛ, ПЛ/1,
БЕЙСИК, ПАСКАЛЬ).
Program - программа. Набор инструкций, которые сообщают ЭВМ, что и
как ей делать.
Programming - программирование. Процесс перевода задачи из ее
естественной постановки на язык, который может понять и воспринять ЭВМ.
Programming language - язык программирования. Язык, используемый для
написания программ для ЭВМ.
PROM - программируемое ПЗУ. Постоянное запоминающее устройство,
используемое только для чтения и программируемое пользователем.
Prompt - приглашение. Символы, печатаемые программой и сигнализирующие
пользователю, что требуется ввод.
Random-access memory - память с произвольным доступом. Память,
которая предполагает одинаковое время доступа к любой точке хранения. Обычно
ее обозначают RAM (ОЗУ).
Raw data - "сырые" данные. Еще не обработанные данные.
Read - считать. Воспринять данные с магнитной ленты, диска или
перфокарты или сделать информацию из памяти доступной другой электронной схеме.
Reader - читающее устройство. Любое устройство, которое может
пересылать данные с накопителя на входе.
Readonly memory - постоянное запоминающее устройство. Устройство
памяти, содержащее постоянные данные, которые не могут быть изменены или
стерты. Обычно его обозначают ROM (ПЗУ).
Read/write memory - оперативное запоминающее устройство. Устройство
памяти, содержащее информацию, которая может быть изменена или стерта.
Real time system - система реального времени. Система, где оперативные
запросы обрабатываются по мере поступления.
Record - запись. Совокупность связанных данных, рассматриваемых как
единое целое. Полный набор записей образует файл.
Register - регистр. Цепочка триггеров, хранящая слово двоичных данных.
Регистр - временная память.
Reliability - надежность. Мера способности функционировать без сбоев.
Relocate - перемещать. Переслать программу из одной части памяти в
другую и при этом установить необходимую адресную ссылку так, чтобы эта
программа могла быть выполнена на новом месте.
Remote processing - удаленная обработка. Запуск программы для ЭВМ с
устройства ввода-вывода, удаленного относительно вычислительной системы.
Remote terminal - удаленный терминал. Устройство ввода-вывода,
расположенное удаленно относительно вычислительной системы.
Resolution - разрешение. Разрешающая способность видеодисплея.
Response time - время отклика. Время, которое требуется программе или
устройству ввода-вывода на то, чтобы откликнуться на ввод пользователя или
его команду.
248
Run - прогон. Единоразовое выполнение программы на ЭВМ.
Scan - сканировать. Поиск или запись данных с начала до конца страницы
или таблицы.
Screen - экран. Экран видео-дисплея.
Semiconductor memory - полупроводниковая память. Память ЭВМ с
использованием интегральных схем на кремниевом чипе.
Sequential logic - последовательная логика. Совокупность логических
вентилей, воспринимающая входную информацию только в том случае, если
поступают импульсы от таймера. Схемы последовательной логики используют триггеры
так, что на каждую операцию влияет предыдущая операция.
Serial processing - последовательная обработка. Операции над данными по
биту за один раз.
Simulate - имитировать, моделировать. Представлять функционирование
одной системы с помощью другой (например, представлять физическую систему
путем выполнения компьютерной программы).
Software - программное обеспечение. Накопленные программы для ЭВМ и
документация к ним.
Solid state - твердотельный. Электронные компоненты, где внутри твердых
материалов происходит перенос и управление электронов (например,
транзисторы, германиевые диоды, интегральные схемы).
Sort - сортировать. Организовывать числовые или текстовые данные в
заданную последовательность.
Source document - исходная документация. Оригинальная документация,
откуда берут базовые данные (например, проспекты, списки, комплектации,
инвентарные ярлыки).
Source language - исходный язык. Начальная форма, в которой подготовлена
программа перед выполнением на ЭВМ (например, ФОРТРАН или язык
Ассемблера).
Special character - специальный символ. Графический символ, который не
является ни цифрой, ни буквой (например, знак плюс или пробел).
Special-purpose computer - специализированная ЭВМ. ЭВМ, разработанная для
решения специального класса узко очерченных задач.
Standard - стандарт. Принятый и узаконенный критерий для написания
компьютерных программ, рисования блок-схем, построения компьютеров и т.д.
Statement - предложение. Элементарная инструкция компьютеру на языке
программирования высокого уровня, таком, как, например, БЕЙСИК или
ФОРТРАН.
Storage - память, хранение данных. Сохранение данных для того, чтобы
использовать их в дальнейшем.
Storage location - ячейка памяти. Место в памяти, где может храниться
символ, байт или слово.
Storage map - распределение памяти. Средство, используемое пользователем
ЭВМ для оценки частей памяти, занятых данными и инструкциями.
Storage protection - защита памяти. Устройство или средство, которое
защищает компьютерные программы от разрушения или от записи в память
компьютера данных сверх определенных ограничений.
Storage unit - устройство памяти, память. Часть ядра ЭВМ, используемая
для хранения инструкций и данных.
249
Structured programming - структурное программирование. Методика,
связанная с усовершенствованием процесса программирования путем лучшей
организации программ и лучшей программной нотации для достижения правильного и
ясгого описания данных и управляющих структур.
Subroutine - подпрограмма. Последовательность инструкций в программе,
которая используется в основной программе более чем один раз (обычно).
Symbolic address - символический адрес. Адрес, представленный символически
(именем).
Symbolic coding - символическое кодирование. Кодирование, где инструкции
написаны не на машинном языке (например, программа на ФОРТРАНе).
Synchronous - синхронный. Работа компьютера, происходящая под
управлением тактового генератора.
System - система. Организованная совокупность оборудования, методов и
персонала, требуемая для выполнения определенной цели.
System analysis - системный анализ. Исследование деятельности, процедуры,
метода, технологии или выяснение, что требуется сделать и какие операции
нужны для того, чтобы сделать это наилучшим способом, с использованием для
обработки информации электронного оборудования.
System analyst - системный аналитик. Человек, способный решать задачи с
помощью ЭВМ, анализирующий и развивающий информационные системы.
System programs - системные программы. Компьютерные программы,
обеспечиваемые производителем ЭВМ. Примерами являются операционные системы,
ассемблеры, компиляторы, средства отладки, программы ввода-вывода.
System study - системные исследования. Детальный процесс определения
процедур, необходимых при использовании компьютера для определенных
операций, и выработки спецификации, служащей основанием для выбора оборудования,
требуемого для определенных нужд.
Telecommunications - телекоммуникации. Прием или передача данных на
дальние расстояния по телефону или спутниковыми средствами.
Teletypewriter - телетайп. Устройство, подобное пишущей машинке, которое
может быть использовано для передачи данных и программ в ЭВМ и для
печати информации, выведенной из ЭВМ на бумажную полосу.
Terminal - терминал. Компьютерное устройство для ввода и вывода.
Text editing - редактирование текста. Возможность автоматизированным
образом изменять текст.
Time sharing - разделение времени. Такой режим обработки, при котором
компьютерные системы автоматически распределяют процессорное время между
многими работающими как бы одновременно пользователями.
Track - дорожка. Дорожка, на которой записываются данные на магнитном
диске.
Translate - транслировать. Преобразовывать данные из одной формы
представления в другую без существенного изменения их смысла.
Translation - трансляция. Перевод программы с языка высокого уровня или
с языка ассемблера в форму, доступную для ЭВМ. См. также ассемблер,
компилятор и интерпретатор.
Variable - переменная. Величина, которая принимает заданный набор
значений.
250
Virtual memory - виртуальная память. Такая методика обращения с
ограниченным объемом "быстрой" памяти и (вообще говоря) с гораздо большим
объемом "медленной" памяти, при которой они неразличимы для пользователя ЭВМ.
Volatile storage - энергозависимая память. Устройство памяти, сохраняющее
данные только при наличии электропитания.
Word -слово. Цепочка двоичных разрядов, используемая для представления
числа, символа, инструкции ЭВМ.
Word lenght-длм/ш слова. Число двоичных разрядов, байтов, символов в
слове.
Word processing - обработка слов. Система текстовой обработки. Ее
используют для подготовки текстов.
Write - записывать. Помещать информацию в память или регистр.
ЛИТЕРАТУРА
1. Бахвалов Н. С, Жидков Я. Я., Кобельков Г. М. Численные
методы. - М.: Наука, 1987.
2. Боор де К Практическое руководство по сплайнам. - М.: Радио и
связь, 1985.
3. Бут Э. Д. Численные методы. - М.: Физматгиз, 1959.
4. Воеводин В. В. Вычислительные основы линейной алгебры. - М.:
Наука, 1977.
5. Цолков Е. А. Численные методы. - М.: Наука, 1987.
6. Гринчишин Е. Г., Ефимов В. Я, Ломакович А. И. Алгоритмы и
программы на бейсике.-М.: Просвещение, 1988.
7. Демьянович Ю. К Вычислительные методы для решения задач
математической физики.-Л.: Изд-во ЛГУ, 1986.
8. Дьяконов В. Н. Справочник по алгоритмам и программам на языке
бейсик для персональных ЭВМ. - Наука, 1987.
9. Дьяченко В. Ф. Основные понятия вычислительной математики. - М.:
Наука, 1977.
10. Завьялов Ю. С, Квасов Б. Я., Мирошниченко В. Л. Методы
сплайн-функций. - М.: Наука, 1980.
11. Иванов В. В. Методы вычислений на ЭВМ. Справочное пособие. - Киев:
Наукова думка, 1986.
12. Икрамов X. Д. Численные методы для симметричных линейных
систем. - М.: Наука, 1988.
13. Калиткин Н. И. Численные методы. - М.: Наука, 1978.
14. Кетков Ю. Л. Диалог на языке бейсик для мини- и микро-ЭВМ. - М.:
Наука, 1988.
15. Крылов В. Я., Бобков В. В., Монастырный П. Я. Начала теории
вычислительных методов. Линейная алгебра и нелинейные уравнения. - Минск: Наука
и техника, 1982.
16. Крылов В. Я, Бобков В. В. Начала теории вычислительных методов.
Дифференциальные уравнения. - Минск: Наука и техника, 1982.
17. Лоусон Ч., Хенсон Р. Численное решение задач метода наименьших
квадратов. - М.: Наука, 1986.
18. Мак Кракен Д, Дорн У. Численные методы и программирование на
фортране. - М.: Мир. 1977.
252
19. Марчук Ч. И. Методы вычислительной математики. - М.: Наука, 1980.
20. Парлетт Б. Симметричная проблема собственных значений. - М.: Мир,
1983.
21. Программирование на языке Бейсик-плюс для СМ-4. - М.: Финансы и
статистика, 1978.
22. Самарский А. А. Введение в численные методы. - М.: Наука, 1982.
23. Сборник научных программ на фортране. - М.: Статистика, 1974.
24. Теннант-Смит Дж. Бейсик для статистиков. - М.: Мир, 1988.
25. Трэктон К. Программы на Бейсике для инженерно-технических
расчетов. - М.: Радио и связь, 1985.
26. Турчак Л/. И. Основы численных методов. - М.: Наука, 1987.
27. Уилкинсон Дж., Райнш К. Справочник алгоритмов на языке АЛГОЛ.
Линейная алгебра. - М.: Машиностроение, 1976.
28. У орт Т. Программирование на языке бейсик. - М.: Машиностроение,
1981.
29. Фадеев Д. К., Фадеева В. Н. Вычислительные методы линейной
алгебры. - М.: Наука, 1980.
30. Форсайт Дж., Малькольм М., Моулер К. Машинные методы
математических вычислений. - М.: Мир, 1980.
31. Хаусхолдер А. С. Основы численного анализа. - М.: ИЛ, 1956.
32. Хемминг Р. В. Численные методы для научных работников и
инженеров. - М.: Наука, 1972.
33. Хованский А. Я. Приближение ценных дробей и их обобщений к
вопросам приближенного анализа. - М.: Гостехиздат, 1956.
34. Шуп Т. Решение инженерных задач на ЭВМ. - М.: Мир, 1982.
35. Эберт К., Эдерер X. Компьютеры. Применение в химии. - М.: Мир,
1988.
ОГЛАВЛЕНИЕ
Предисловие 5
1. Введение 7
1.1 Цифровые компьютеры 8 1.2 Архитектура микрокомпьютера 13
1.3 Микрокомпьютер как инструмент для решения численных задач 17
2. Корни алгебраических и трансцендентных уравнений . 19
2.1 Корни нелинейного уравнения 19 2.2 Метод половинного деления 20
2.3 Метод хорд 22 2.4 Метод Ньютона 24 25 Метод секущих 26 2.6 Метод
простой итерации 26 2.7 Определение корней алгебраических уравнений 31
2.8 Метод Лина для комплексных корней 32 2.9 Определение корней
полинома методом Берстоу 34 2.10 Соображения о выборе алгоритма для
малого компьютера 41
3. Решение систем линейных уравнений 44
3.1 Метод исключения Гаусса 44 3.2 Метод исключения Гаусса-Жордана
46 3.3 Отыскание обратной матрицы методом исключения Гаусса-Жордана 57
3.4 Метод Холесского для систем линейных уравнений 56 3.5 Итерационные
методы решения систем линейных уравнений 62 3.6 Метод Якоби 63 3.6
Метод Гаусса-Зейделя 63 3.8 Метод последовательной верхней релаксации
64 3.9 Решение систем нелинейных уравнений 67 3.10 Простая итерация 68
3.11 Метод Ньютона 69 3.12 Метод возмущения парамтеров 76 3.13
Соображения по поводу выбора алгоритма для малого компьютера 77
4. Задачи на собственные значения 79,
4.1 Фундаментальные положения задачи на собственные значения 80 4.2
Итерационные методы решения 82 4.3 Вычисление собственных значений
методами преобразований 88 4.4 Нахождение собственных значений
симметричной трехдиагональной матрицы 99 45 Непосредственное
приведение матрицы к форме Гессенберга 101 4.6 Другие методы
вычисления собственных значений 103 4.7 Выбор алгоритма решения задачи
на собственные значения 112
254
5. Обыкновенные дифференциальные уравнения 115
5.1 Задачи Коши и краевая задача 115 5.2 Одношаговые методы решения
задачи Коши 117 5.3 Методы прогноза и коооекции 134 5.4 Краткая
характеристика методов прогноза и коррекции 138 55 Выбор шага 139 5.6
"Жесткие задачи" 140 5.7 Методы решения краевых задач 141 5.8 Выбор
алгоритма решения обыкновенных дифференциальных уравнений 144
6. Интерполяция и приближение кривыми 146
6.1 Линейная интерполяция 146 6.2 Интерполяция по Лагранжу 148 6.3
Метод разделенных разностей 151 6.4 Итерационные методы интерполяции
156 65 Обратная интерполяция 160 6.6 Аппроксимация кривых методом
наименьших квадратов 160 6.7 Сглаживание кривых с помощью сплайнов 168
6.8 Соображения по поводу выбора метода интерполяции, приближения
кривой или сглаживания 174
7. Численное дифференцирование и интегрирование 177
7.1 Численное дифференцирование 177 12 Численное интегрирование 188
7.3 Интегрирование по методу трапеций 189 7.4 Интегрирование по методу
Симпсона 191 15 Формулы интегрирования Ньютона-Котеса старших
порядков 193 7.6 Интегрирование по методу Ромберга 198 1.1 Квадратурные
формулы Гаусса 202 7.8 Обсуждение выбора метода численого
дифференцирования и численного интегрирования 206
Приложение 1. Начальное обучение бейсику в системе ОС ДВК 208
Приложение 2. Задачи и упражнения 223
Приложение 3. Словарь терминов вычислительной техники 239
Литература 252
Шуп Т.
Прикладные численные методы в физике и технике
Зав. редакцией Е. С. Гридасова. Редактор С. А. Крылов. Художник В. В. Коренев.
Художественный редактор В. И. Пономаренко. Технические редакторы
Е. В. Фельдман, JI. А. Муравьева. Корректор Г. И. Кострикова. Оператор
А. Н. Аль-Хаффаф.
ИБ № 7904
Изд. № ФМ - 39 Сдано в набор и печать 28.12.89.
Формат 60x88/16. Бум. офс. № 2. Гарнитура Тайме. Печать офсетная.
Объем 15,68 усл. печ. л. 15,68 усл. кр.-отт. 14,13 уч. изд. л.
Тираж 10 000 экз. Заказ №522. Цена 1 р. 30 коп.
Набрано на персональном компьютере издательства с использованием дискетт
переводчика.
Издательство "Высшая школа", 101430, Москва, ГСП-4, Неглинная ул., д. 29/14.
Отпечатано в Московской типографии № 8 Госкомиздата СССР,
101898, Москва, Центр, Хохловский пер., 7.