close

Вход

Забыли?

вход по аккаунту

?

Tarasov Bahareva Chislennye metody teoriya algoritmy programmy

код для вставкиСкачать
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ РФ
ПГУТИ
ФГБОУ ВО «Поволжский государственный
университет телекоммуникаций
и информатики»
В.Н. Тарасов, Н.Ф. Бахарева
ЧИСЛЕННЫЕ МЕТОДЫ
ТЕОРИЯ
АЛГОРИТМЫ
ПРОГРАММЫ
ИЗДАНИЕ ТРЕТЬЕ,
ПЕРЕРАБОТАННОЕ
Рекомендовано ГОУ ВПО МГТУ им.
Н.Э.
Баумана в
качестве
учебного
пособия для студентов высших учебных
заведений, обучающихся по направлению
подготовки
«Информатика
и
вычислительная техника».
Регистрационный № рецензии 119 от
16.07.2008 г. МГУП
Самара 2017
ББК 22 .1 9я7
Т 19
УДК [519.95+004.421](075.8)
Рецензенты:
Заведующ ий кафедрой «И нформационные
системы и
технологии» СГАУ, Заслуж енный работник высшей школы
РФ, А кадем ик МАИ, д.т.н., профессор С.А. П р о х о р о в ;
кафедра
«П рограммное
обеспечение
ЭВМ
и
информационные технологии» М ГТУ им. Н.Э. Баумана,
д .т.н., профессор В.М . Г р а д о в .
Т арасов В .Н ., Б ахарева Н.Ф .
Численные методы. Теория, алгоритмы,
п р о г р ам м ы . - Самара: П Г У Т И , 2017. - 264
с.
T19
ISBN 5-7410-0451-2
Учебное пособие предназначено для студентов
специальностей направления 230100 - И нф орм атика и
вычислительная техника.
ISBN 5-7410-0451-2
©Тарасов В.Н., Бахарева Н.Ф.
©Самара, 2017
Содержание
1
1.1
1.1.1
1.1.2
1.1.3
1.1.4
1.2
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1.2.6
2
2.1
2.2
3
3.1
3.1.1
3.1.2
3.2
3.2.1
4
4.1
4.1.1
4.1.2
4.1.3
Предисловие
Введение
Решение систем линейных алгебраических уравне­
ний
Точные методы решения систем линейных алгебраических уравнений
Метод Г аусса
Связь метода Гаусса с разложением матрицы на
множители. Теорема об LU разложении
Метод Г аусса с выбором главного элемента
Метод Холецкого (квадратных корней)
Итерационные методы решения систем линейных
алгебраических уравнений
Метод Якоби (простых итераций)
Метод Зейделя
Матричная запись методов Якоби и Зейделя
Метод Ричардсона
Метод верхней релаксации (обобщенный метод Зейделя)
Сходимость итерационных методов
Плохо обусловленные системы линейных алгебраических уравнений
Метод регуляризации для решения плохо обусловленных систем
Метод вращения (Гивенса)
Решение нелинейных уравнений и систем нелинейных уравнений
Метод простых итераций
Условия сходимости метода
Оценка погрешности
Метод Ньютона
Сходимость метода
Решение проблемы собственных значений
Прямые методы нахождения собственных значений
Метод Леверрье
Усовершенствованный метод Фадеева
Метод Данилевского
7
8
15
15
15
18
20
21
22
23
24
25
26
27
27
29
31
32
36
39
40
40
41
43
44
46
46
47
47
3
Метод итераций определения первого собственного
числа матрицы
Задача приближения функций
Интерполяционный многочлен Лагранжа
Оценка погрешности интерполяционного многочле­
на
Интерполяционные полиномы Ньютона
Интерполяционный многочлен Ньютона для равно­
отстоящих узлов
Вторая интерполяционная формула Ньютона
Интерполирование сплайнами
Построение кубического сплайна
Сходимость процесса интерполирования кубически­
ми сплайнами
Аппроксимация функций методом наименьших
квадратов
Численные методы решения задачи Коши для обык­
новенных дифференциальных уравнений и систем
дифференциальных уравнений
Семейство одношаговых методов решения задачи
Коши
Метод Эйлера
Методы Рунге-Кутта
Многошаговые разностные методы решения задачи
Коши для обыкновенных дифференциальных урав­
нений
Задача подбора числовых коэффициентов ak, bk
50
53
55
58
58
58
61
62
63
65
66
71
72
72
73
76
78
Устойчивость и сходимость многошаговых разност­
ных методов
Примеры m-шаговых разностных методов Адамса
79
80
Численное интегрирование жестких систем обыкно­
венных дифференциальных уравнений
Понятие жесткой системы обыкновенных дифферен­
циальных уравнений
Некоторые сведения о других методах решения же­
стких систем
81
82
84
6.3.2.1 Методы Гира
6.3.2.2 Метод Ракитского
6.4
Краевые задачи для обыкновенных дифференциаль­
ных уравнений
6.5
Решение линейной краевой задачи
6. 6
Решение двухточечной краевой задачи для линейно­
го уравнения второго порядка сведением к задаче
Коши
6.7
Методы численного решения двухточечной краевой
задачи для линейного уравнения второго порядка
6.7.1
6.7.2
7
Метод конечных разностей
Метод прогонки
Решение дифференциального уравнения в частных
производных
7. 1
Метод сеток для решения смешанной задачи для
уравнения параболического типа (уравнения тепло проводности)
7.2
Решение задачи Дирихле для уравнения Лапласа
методом сеток
7.3
Решение смешанной задачи для уравнения гипербо­
лического типа методом сеток
Лабораторная работа № 1. Решение систем линейных алгеб­
раических уравнений. Точные методы
1.1 Метод Гаусса
1.2 Метод Холецкого
Лабораторная работа № 2. Решение систем линейных алгеб­
раических уравнений. Приближенные методы
2.1 Метод Якоби
2.2 Метод верхней релаксации
2.3 Метод Зейделя
Лабораторная работа № 3. Решение плохо обусловленных
систем линейных алгебраических уравнений
3.1 Метод регуляризации
3.2 Метод вращения (Гивенса)
Лабораторная работа № 4. Решение нелинейных уравнений и
систем нелинейных уравнений
4.1 Метод простых итераций
4.2 Метод Ньютона
84
86
88
91
91
93
93
95
97
99
101
103
106
117
131
138
5
Лабораторная работа № 5. Решение проблемы собственных
значений и собственных векторов. Точные методы
5.1 Метод Леверрье
5.2 Метод Фадеева
5.3 Метод Крылова
Лабораторная работа № 6. Решение проблемы собственных
значений и собственных векторов. Итерационные методы
6.1 Метод QR-разложения
6.2 Метод итераций
Лабораторная работа № 7. Приближение функций
7.1 Интерполяционный полином Лагранжа
7.2 Интерполирование функций с помощью кубиче­
ского сплайна
7.3 Интерполяционные формулы Ньютона
7.4 Аппроксимация функций методом наименьших
квадратов
Лабораторная работа №8. Решение задачи Коши. Одношаго­
вые методы
8.1 Метод Эйлера
8.2 Метод Эйлера-Коши
8.3 Метод Рунге-Кутта 4-го порядка
Лабораторная работа №9. Решение задачи Коши. Многоша­
говые методы
9.1 Метод Адамса (явный)
Лабораторная работа №10. Решение жестких систем ОДУ
10.1 Метод Гира
10.2 Метод Ракитского (матричной экспоненты)
Лабораторная работа №11. Численное дифференцирование
11.1
Дифференцирование с помощью сплайнов
Лабораторная работа №12 Численное интегрирование
Лабораторная работа №13 Приближенное вычисление преоб­
разования Фурье
Список использованных источников
6
149
167
177
194
204
211
225
236
248
263
ПРЕДИСЛОВИЕ
Данное издание учебного пособия «Численные методы. Теория,
алгоритмы, программы» включает все основные (классические)
разделы дисциплины «Вычислительная математика», предусмот­
ренные государственным образовательным стандартом для студен­
тов направления подготовки 230100 — Информатика и вычисли­
тельная техника. Учебное пособие рассчитано на стандартный се­
местровый курс.
Наряду с теоретическими основами численных методов, посо­
бие содержит также полный комплекс лабораторных работ, вклю­
чающий схемы алгоритмов методов, коды программ, решения кон­
трольных примеров и варианты заданий. На взгляд авторов, такое
представление материала учебного пособия наиболее полно отра­
жает специфику направления подготовки —Информатика и вычис­
лительная техника, т.к. простое использование закрытых математи­
ческих пакетов типа MathCAD и Matlab с точки зрения построения
алгоритмов вычислительных методов мало информативно. Наобо­
рот, умение программировать вычислительные методы поможет
лучше понять содержимое математических пакетов программ и их
работу.
Все результаты расчетов контрольных примеров лабораторной
части учебного пособия проверены в пакете MathCAD.
Читатель, заинтересованный в более глубоком и детальном изу­
чении курса численных методов, должен обратиться к более пол­
ным руководствам. Некоторые из них приведены в списке литера­
туры. Так же можно обратиться к Internet ресурсам. Например, со­
временные достижения в этой области можно увидеть на Web —
сайтах
Института
вычислительной
математики
РАН:
www.inm.ras.ru и научного журнала «Вычислительные методы и
программирование.
Новые вычислительные технологии»
www.num- meth .srcc.msu.ru.
7
В в ед ен и е
М атематическое моделирование и вы чи слительны й
эксперимент
1.
С х е м а в ы ч и с л и т е л ь н о г о э к с п е р и м е н т а . Эффектив ное решение крупных естественнонаучны х и народнохозяй ственных задач сейчас невозможно без применения б ы ст­
родействую щ их
электронно - вы числительны х
машин
(ЭВМ). В настоящее время выработалась технология и с следования сложных п р о б л е м , основанная на построении и
анализе с помощью ЭВМ математических моделей и зуч ае­
мого о б ъ е к т а . Такой метод исследования называют вычис лит ельны м эк сп ер и м е н т о м .
П у с т ь , н ап р и м ер , требуется исследовать какой - то физи ческий объект, яв л е н и е , п р о ц е с с . Тогда схема в ы чи сл и ­
тельного эксперимента выглядит т а к , как показано на ри сунке 1. Ф ормулирую тся основные з а к о н ы , управляю щ ие
данным объектом исследования (I) и строится со отв етствующая м ат ем ат ическая модель (II), представляющая
обычно запись этих законов в форме системы уравнений
(алгебраических, диф ференциальны х, интегральных и
т. д.).
Рисунок 1 - Этапы построения и анализа с помощью
ЭВМ математической модели объекта
8
При выборе физической и , сл ед о ват ел ь н о , математиче ской модели мы пренебрегаем ф а кто р а м и , не оказы ваю щ и ми существенного влияния на ход изучаемого процесса.
Типичные математические м о д е л и , соответствую щ ие физи ческим явлениям, формулирую тся в виде уравнений м ате­
матической ф и зи к и . Больш инство реальны х процессов опи сывается нелинейным и ур авнениям и и лишь в первом при ближении (при малых значениях параметров, малых о тк л о ­
нениях от равновесия и д р .) эти уравнения можно заменить
линейными.
После того как задача сф ормулирована в математиче ской форме, необходимо найти ее решение. Но что значит
решить математическую задачу ? Только в исклю чительны х
случаях удается найти решение в явном виде, например в
виде р я д а . Иногда утверж дение «задача р е ш е н а » о зн ач ает,
что доказано существование и единственность р е ш е н и я .
Я с н о , что этого недостаточно для практических приложе н и й . Необходимо еще изучить качественное поведение ре шения и найти те или иные количественны е х а р ак тер и сти ­
ки.
Именно на этом этапе требуется привлечение ЭВМ и ,
как с л ед ств и е, развитие численны х методов (с м . III на р и с .
1). Под численным м ет одом здесь понимается такая и н тер претация м атем атической модели («дискретная м о д е л ь »),
которая доступна для реализации на Э В М . Н ап р и м е р , если
математическая модель представляет собой д и ф ф ер ен ц и альное у р а в н е н и е , то численным методом может быть ап проксим ирую щ ее его разностное уравнение совместно с ал го р и тм о м , позволяю щ им отыскать решение этого разност ного у р а в н е н и я . Результатом реализации численного мето да на ЭВМ является число или таблица ч и с е л . О тм е т и м ,
что в настоящее время помимо собственно численных ме тодов имеются также м ето д ы , которые позволяю т п р ово дить на ЭВМ аналитические в ы к л а д к и . Однако аналитиче ские методы для ЭВМ не получили пока достаточно широ кого р асп р о стр ан ен и я .
Чтобы реализовать численный м е т о д , необходимо со ставить программу для ЭВМ (с м . IV на р и с . 1) или вос пользоваться готовой п р о г р ам м о й .
9
После отладки программы наступает этап проведения
вычислений и анализа результатов (V). П олученные ре зультаты изучаются с точки зрения их соответствия иссле дуемому явлению и , при н ео б х о д и м о с ти , вносятся исправ ления в численный метод и уточняется математическая мо дель.
Такова в общих чертах схема вычислительного экспе р и м е н т а . Его основу составляет т р и а д а : модель — метод
(а л го рит м ) — п ро гр ам м а . Опыт решения крупных задач
п о казы вает, что метод м атематического моделирования и
вычислительны й эксперим ент соединяю т в себе преимуще ства традиционны х теоретических и эксперим ентальны х
методов и с сл ед о в ан и я . Можно указать такие крупные об ласти применения вычислительного э к с п ер и м ен т а, как
э н ер гети к а, аэрокосмическая т е х н и к а , обработка данных
натурного эк сп ер и м ен т а, соверш енствование технологиче ских п р о ц есс о в .
2.
В ы ч и с л и т е л ь н ы й а л г о р и т м . Предметом данной
книги является изложение вопросов, отраж аю щ их этапы
III, IV, V вычислительного эксперимента. Таким образом,
здесь не обсуждаются исходные задачи и их математиче ская п о с та н о в к а .
Н еобходимо п о д ч ер к н у ть , что процесс исследования
исходного объекта методом математического м о д е л и р о в ания и вычислительного эксперим ента неизбежно носит
приближ енный х а р а к т е р , потому что на каждом этапе вно сятся те или иные п о гр еш н о ст и . Т а к , построение математи ческой модели связано с упрощ ением исходного я в л е н и я ,
недостаточно точным заданием коэффициентов уравнения
и других входных д а н н ы х . По отношению к численному
м ето д у , реализую щ ему данную математическую м о д е л ь ,
указанные погреш ности являются неустранимыми, по скольку они неизбежны в рамках данной м о д е л и .
При переходе от м атем атической модели к численному
методу возникаю т п огр еш н о ст и , называемые погреш но стями м е т о д а . Они связаны с т е м , что всякий численный
метод воспроизводит исходную математическую модель
п р и б л и ж ен н о .
10
Наиболее типичны ми п огреш ностями метода являются
погреш ность дискрет изации и погреш ность о к р углен и я.
П оясним причины возникновения таких п огр еш н о ст ей .
Обычно построение численного метода для заданной
м атем атической модели разбивается на два э т а п а : а) фор мулирование дискретной за д а ч и , б) разработка в ы ч и сл и тельного ал го р и т м а, позволяю щ его отыскать решение дис кретной з а д а ч и . Н ап р и м е р , если исходная м атематическая
задача сф ормулирована в виде системы д иф ф еренциальны х
у р а в н е н и й , то для численного решения необходимо заме нить ее системой к о н еч н о го , может б ы т ь , очень большого
числа линейных или разностны х алгебраических у р а в н е н и й . В этом случае г о в о р я т , что проведена дискрет изация
исходной м ат ем ат ическо й задачи. П ростейш им примером
дискретизации является построение ра зн о с т н о й схем ы, п у тем замены диф ф ерен ци альны х выражений конечно разностны ми о т н о ш ен и я м и . В общем случае дискретную
модель можно рассматривать как конечномерны й аналог
исходной м атематической з а д а ч и . Я с н о , что решение дис кретизированной задачи отличается от решения исходной
з а д а ч и . Разность соответствую щ их реш ений и называется
погреш ностью дискретизации. Обычно дискретная модель
зависит от некоторого параметра (или множ ества парамет р о в ) д и с к р ети за ц и и , при стремлении которого к нулю
долж на стремиться к нулю и погрешность д и с к р ети за ц и и .
При этом число алгебраических у р а в н е н и й , составляю щ их
дискретную м о д е л ь , неограниченно в о зр аст ает. В случае
разностны х методов таким параметром является шаг с е т к и .
Как уже о тм е ч а л о с ь , дискретная модель представляет
собой систему большого числа алгебраических уравнений.
Невозможно найти решение такой системы точно и в явном
в и д е . Поэтому приходится использовать тот или иной чис ленный алгоритм решения системы алгебраических уравне н и й . Входные данные этой с и стем ы , а именно коэффициен ты и правые ч а с т и , задаются в ЭВМ не т о ч н о , а с округле нием.
В процессе работы алгоритма погреш ности округления
обычно накапливаю тся, и в результате реш ение, п о луч ен ­
ное на ЭВМ, будет отличаться от точного решения д и с к р е ­
11
тизированной з а д а ч и . Результирую щ ая погрешность назы вается погреш ностью округления (иногда ее называют вы числит ельной п огр еш но с т ь ю ).
Величина этой погреш ности определяется двумя факто р а м и : точностью представления вещ ественны х чисел в
ЭВМ и чувствительностью данного алгоритма к погрешно стям о к р у гл е н и я .
А лгоритм называется у с т о й ч и в ы м , если в процессе его
работы вычислительны е погреш ности возрастаю т незначи т е л ь н о , и неуст ойчивы м — в противоположном с л у ч а е . При
использовании неустойчивых вы числительны х алгоритмов
накопление погреш ностей округления приводит в процессе
счета к переполнению арифметического устройства Э В М .
И т а к , следует различать погреш ности м о д е л и , метода и
в ы ч и сл и тел ь н у ю . Какая же из этих трех погреш ностей яв ляется п р ео б л ад аю щ ей ? Ответ здесь н ео д н о зн ач ен . В и д и м о , типичной является с и ту ац и я , возникающая при ре шении задач м атем атической ф и зи к и , когда погрешность
модели значительно превы ш ает погрешность м ето д а, а по грешностью округления в случае устойчивы х алгоритмов
можно пренебречь по сравнению с погреш ностью м е т о д а . С
другой сто р о н ы , при р еш е н и и , н ап р и м ер , систем обыкно венных д и ф ф ерен ци альны х уравнений возможно примене ние столь точных м ето д о в , что их погреш ность будет срав нима с погрешностью о к р у гл ен и я . В общем случае нужно
стр ем и ть ся, чтобы все указанные погреш ности имели один
и тот же п о р я д о к . Н ап р и м е р , нецелесообразно пользоваться
разностны ми сх ем а м и , имею щ ими точность 10 -6, если ко эффициенты исходных уравнений задаются с точностью
10 -2.
3.
Т р е б о в а н и я к в ы ч и с л и т е л ь н ы м м е т о д а м . Одной и
той же математической задаче можно поставить в соответ ствие множество различны х дискретны х м о д е л ей . Однако
далеко не все из них пригодны для практической реализа ции.
В ы числительные ал го р и т м ы , предназначенны е для бы стродействую щ их Э В М , должны удовлетворять много образным и зачастую противоречивы м т р еб о в ан и я м .
12
Попытаемся здесь сф ормулировать основные из этих
требований в общ их ч е р т а х .
Можно выделить две группы требований к численным
м ет о д а м . Первая группа связана с адекватностью д и с к р е т ной модели исходной м атем атической з а д а ч е , и вторая
группа - с реализуем остью численного метода на Э В М .
К первой группе относятся такие т р еб о в ан и я , как схо димость численного м ето д а, выполнение дискретны х ана логов законов сох р ан ен и я , качественно правильное поведе ние решения дискретной з а д а ч и .
Поясним эти тр е б о в а н и я . П р е д п о л о ж и м , что дискретная
модель матем атической задачи представляет собой систему
большого, но конечного числа алгебраических уравнений.
Обычно, чем точнее мы хотим получить реш ение, тем
больше уравнений приходится б р а т ь . Г о в о р я т , что ч и с л ен ный метод сходит ся, если при неограниченном увеличении
числа уравнений решение дискретной задачи стремится к
решению исходной з а д а ч и .
Поскольку реальная ЭВМ может оперировать лишь с
конечным числом у р а в н е н и й , на практике с х о д и м о сть , как
п р ав и л о , не д о с т и г а е т с я . Поэтому важно уметь оценивать
погреш ность метода в зависимости от числа у р а в н е н и й , со ставляю щ их дискретную м о д е л ь . По этой же причине ста раются строить дискретную модель таким о б р азо м , чтобы
она правильно отражала качественное поведение решения
исходной задачи даже при сравнительно небольшом числе
уравнений.
Н ап р и м ер , дискретной моделью задачи математической
физики может быть разностная с х е м а . Для ее построения
область изменения независимы х переменны х заменяется
дискретным множ еством точек - сеткой, а входящие в и сходное уравнение производные з ам ен я ю тс я , на се т к е , ко нечно - разностны ми о тн о ш ен и я м и . В результате получаем
систему алгебраических уравнений относительно значений
искомой функции в точках с е т к и .
Число уравнений этой системы равно числу точек сет к и . И зв е с т н о , что диф ф еренциальны е уравнения математи ческой физики являются следствиями интегральных з а к о нов с о х р ан ен и я . Поэтому естественно тр е б о в а т ь , чтобы для
13
разностной схемы выполнялись аналоги таких законов со х р а н е н и я . Разностные с х ем ы , удовлетворяю щ ие этому тре б о ван и ю , называются консервативными. О к а зал о сь , что
при одном и том же числе точек сетки консервативны е раз ностные схемы более правильно отраж аю т поведение ре шения исходной за д а ч и , чем неконсервативны е с х е м ы .
Сходимость численного метода тесно связана с его кор р ек т н о с т ь ю . П р ед п о л о ж и м , что исходная математическая
задача поставлена к о р р е к тн о , т . е . ее решение су щ ест в у ет,
единственно и непрерывно зависит от входных д а н н ы х . То гда дискретная модель этой задачи долж на быть построена
таким о б р азо м , чтобы свойство корректности с о х р ан и л о сь .
Таким о б р а зо м , в понятие коррект ност и численного м е т о да включаются свойства однозначной разреш им ости с о о тветствую щ ей системы уравнений и ее устойчивости по
входным д а н н ы м . Под уст ой чи вост ью понимается н еп р ерывная зависимость решения от входных д а н н ы х , равно мерная относительно числа у р а в н е н и й , составляю щ их дис кретную м о д е л ь .
Вторая группа т р еб о в ан и й , предъявляем ы х к численным
методам, связана с возможностью реализации данной д и с ­
кретной модели на данной Э В М , т . е . с возможностью по лучить на ЭВМ решение соответствую щ ей системы алгеб раических уравнений за приемлемое в р е м я . Основным пре пятствием для реализации корректно поставленного алго ритма является ограниченны й объем оперативной памяти
ЭВМ и ограниченные ресурсы времени счета. Реальные в ы ­
числительные алгоритмы долж ны учитывать эти о б сто я­
тельства, т. е. они должны быть эконом ичны м и как по ч и с ­
лу ариф м етических действий, так и по требуемому объему
памяти.
14
Ч и сленн ы е методы алгебры и анализа
1 Решение систем линейных алгебраических уравнений
Рассмотрим систему линейных алгебраических урав нений:
а 11х1+ а 12х2+ - + а 1тхт= Ь1
а 21х 1+ а 22х2+•••+а2тхт=Ъ2
(1.1)
ат 1х 1+ ат 2х 2 +•••+аттх т= Ьт
или в матричной ф о р м е:
A x= b ,
(1.2)
г д е : A = {aijj квадратная матрица разм ерности ( т х т ,) ;
х =(х 1
х т) Т; Т - операция тр ан сп о н и р о в ан и я;
b = (Ъ1,....,Ът) т; detA^D.
П р ед п о л о ж и м , что определитель матрицы A не равен
н у л ю . Тогда решение х сущ ествует и е д и н ств ен н о . На
практике встречаются с и стем ы , имеющие большой поря д о к . М етоды решения системы (1.1) делятся на две г р у п п ы :
1) прямые (точные методы);
2) итерационные методы (приближенные).
1.1 Т о ч н ы е м е т о д ы
В точных методах решение х находится за конечное
число д е й с т в и й , но из - за погреш ности округления и их на копления прямые методы можно назвать т о ч н ы м и , только
отвлекаясь от погреш ностей о к р у г л е н и я .
1.1.1 Метод Г аусса
Вычисления с помощью метода Гаусса (который назы вают также методом последовательного исключения неиз вестных) состоят из двух основных э т а п о в : прямого хода и
обратного х о д а . П рямой ход метода заключается в после довательном исключении неизвестны х из системы для пре образования ее к эквивалентной системе с треугольной
15
матрицей. На этапе обратного хода производят вычисления
значений неизвестных. Рассмотрим простейш ий вариант
метода Г а у с с а , называемый схемой единственного д е л е н и я .
Прямой ход метода
1-й ш а г . П р е д п о л о ж и м , что а ц ^0. Поделим первое
уравнение на этот эл е м е н т , который назовем ведущим эле ментом первого шага :
Х1+ С12Х2 + •••+C1mXm= У1 .
(1.3)
Остальные уравнения системы (1.1) запишем в виде
ал х + сц2х +...+а<„хш=Ь<
(1.4)
где i = 2 , m.
Уравнение (1.3) умнож аем на a i1 и вычитаем из i-го
уравнения системы (1.4). Это позволит обратить в нуль ко эффициенты при х 1 во всех у р а в н е н и я х , кроме п е р в о г о .
Получим эквивалентную систему вида:
х1+ С12Х2 + ...+C1mXm= У1
а22 Х2 + •"+а2mХ1= Ь2 ^
................................
.
(1)
/(1)
(1)mх 1=ъm
(1)
m
m2х2
(1.5)
4 Ц= aij - c1i an
ъ<» =bi - y1an ’
где i,j= 2,m. Система (1.5) имеет матрицу в и д а :
'1
x
...
x 'N
0
x
...
x
v0
x
...
xy
Дальше работаем с укороченной си стем о й , т .к . х 1 вхо дит только в 1 -ое уравнение
16
(i)
(i) Xo +... + a
a 22
2
2m x_m = b 2
(1)
Li,
(1) Xm = b m(1)
2 X2 +... + a mm
m
2-й ш а г . На этом шаге исключаем неизвестное х 2 из
уравнений с номерами i = 3 ,4 ,...,m . Если ведущий элемент
О то из укороченной системы а н а второго шага аM2(1)2 ф
^ w,
логично исключаем неизвестное x 2 и получаем матрицу ко эффициентов такого в и д а :
1
x
x
.. x
О
1
x
.. x
О
О
x . . x
О
0
x
x
Аналогично повторяем указанные действия для н еи звестных х 3,х 4,...,х m-1 и приходим к системе :
' X1 + ci 2 x 2 + - + C1mXm = У1
X2 + - + c 2mXm = У2
<
(1.6)
Xm—1 + Cm—1,mXm ym—1
Cmm Xm y m
Эта система с верхней треугольной м а тр и ц е й :
' 1
x
x
...
x
0
1
x
...
x
x1
x
0
0
1
x
...
x
0
0
0
...
1
x
, 0
0
0
...
x ,
О братный ход м е то д а . Из последнего уравнения сис темы ( 1 . 6 ) находим х m, из предпоследнего х m-1, ..., из пер вого уравнения - х 1.
17
Общая формула для в ы ч и сл ен и й :
x-m
m yу mm
/c^ m
г m>
m
X =y - z
i
i
c x , (i = m -1,...,1).
. . л ij j
j = i +1
Для реализации метода Гаусса требуется примерно
(1/3) m 3 ариф метических о п ер ац и й , причем большинство из
них приходится на прямой х о д .
Ограничение метода единственного деления з ак л ю ч ается в т о м , что ведущие элементы на к - ом шаге исключения
не равны н у л ю , т .е . а ^ Ф 0 .
Но если ведущий элемент близок к н у л ю , то в процессе
вычисления может накапливаться п о гр еш н о ст ь . В этом
случае на каждом шаге исключают не х к, a Xj (при j ^ k ). Та кой подход называется методом выбора главного э л е м е н т а .
Для этого выбираю т неизвестные Xj с наибольшим по аб со лютной величине коэффициентом либо в строке, либо в
сто л б ц е, либо во всей м а т р и ц е . Для его реализации требу m(m + 3m -1)
,
ется — ----- 3--------арифм етических д е й с т в и й .
1.1.2
Связь метода Гаусса с разлож ением матрицы на
м н о ж и тел и . Теорема об L U р а з л о ж е н и и .
Пусть дана система A х =b (1.1), которая при прямом
ходе преобразуется в эквивалентную систему ( 1 .6 ) и за пишем ее в виде
Cx=y,
(1.6*)
где С - верхняя треугольная матрица с единицами на глав ной д и а г о н а л и , полученная из ( 1 .6 ) делением последнего
уравнения системы на с mm.
Как связаны в системе (1.1) элементы b и элементы у из
( 1 .6 *)?
Если внимательно посмотреть на прямой ход метода
Гаусса, то можно увидеть, что
ъ1= а 11У1
Ъ2 = а 21 У1+ а22)У2 '
18
Для произвольного j имеем
bj = d j 1У1 + d j 2 У2 + ••• + j
где j= 1, m, dji - числовые к о э ф ф и ц и ен ты :
djj = a j 1).
Можно записать си с т е м у :
,
(1.7)
0
.8 )
b =D y ,
где D - нижняя треугольная матрица с элементам и a j —
1) на
главной диагонали (j= 1, m, аЦ = ап ).
В связи с т е м , что в методе Гаусса угловые коэффици a (j—
1) ф
енты не равны нулю ajj
ф 00 , то на главной диагонали мат рицы D стоят не нулевые э л е м е н т ы . С л ед о ват ел ь н о , эта
матрица имеет об р атн у ю , тогда y =D ' 1b , Сх = D -1b .
Тогда
D xCx=b.
(1.9)
В результате использования метода Гаусса, получили
разложение матрицы А на произведение двух матриц
A = D xC,
где D - нижняя треугольная матрица, у которой элементы
на главной диагонали не равны н у л ю , а C - верхняя т р е угольная матрица с единичной д и а г о н а л ь ю .
Таким образом, если задана матрица A и вектор b , то в
методе Гаусса сначала производится разложение этой м ат­
рицы А на произведение D и C, а затем последовательно
решаются две системы:
D y =b ,
Cx = y.
(1.10)
Из последней системы находят искомый вектор х . При
этом разлож ение матрицы А на произведение CD - есть
прямой ход метода Г а у с с а , а решение систем (1.10) об р ат­
ный х о д . Обозначим нижнюю треугольную матрицу через
L , верхнюю треугольную матрицу - U .
Теорема об L U разлож ении
19
Введем о б о зн ач ен и я : А . - угловой минор порядка j
матрицы А , т .е .
А 1 —а ц ,
А 2 —det
a 11
a 12
a 21
a 22
А —det (A).
m
Т е о р е м а . Пусть все угловы е миноры мат рицы А не
равны нулю (А.^О для j= 1,m). Тогда м ат риц у А мож но
представить единст венным образом в виде п р о и звед ения А =L *U.
И д е я д о к а з а т е л ь с т в а . Рассмотрим матрицу А второго
порядка и будем искать разлож ение этой матрицы в виде L
и U.
' a11 a 12 ^ —' ln 0 ' * ' 1 u12Л
A—
l a 21 a 22 J l l21 l22у l 0 1 J
Сопоставляя эти два р а в е н с тв а , определяем элементы
матриц L и U (перем ножим и приравняем неизвестные).
Система имеет единственное р е ш е н и е . Методом математи ческой индукции сказанное можно обобщить для матрицы
разм ерности m х m .
С л е д с т в и е . Метод Гаусса (схему единственного деле ния) можно применять только в том случае, когда угловые
миноры матрицы А не равны н у л ю .
1.1.3 Метод Гаусса с выбором главного элемента
М ожет оказаться так, что система (1.1) имеет ед и н ст­
венное решение, хотя какой либо из миноров матрицы А
равен н у л ю . Заранее н еи зв е стн о , что все угловые миноры
матрицы А не равны н у л ю . В этом случае можно и сп о л ь зо вать метод Гаусса с выбором главного э л е м е н т а .
1.
Выбор главного элемента по с то л б ц у , когда на к - ом
шаге исключения в качестве главного элемента выбирают
максим альный по модулю коэффициент при неизвестном х к
в уравнениях с номерами i=к ,к + 1,...,m. Затем у р а в н е н и е ,
20
соответствую щ ее выбранному к о эф ф и ц и ен ту , меняют мес тами с k -ым уравнением с и стем ы , чтобы ведущий элемент
занял место коэффициента а^—1.После перестановки исклю чение неизвестного х k выполняю т как в схеме единственно го д е л е н и я .
П Р И М Е Р . Пусть дана система второго порядка
j a 11 x 1 + a 12 x 2 = b 1
l a 21 X1 +a 22 X2
П р ед п о л о ж и м , что а 21 > а 11
нения
=b2
, тогда переставим урав -
a 21Х1 +a22 Х2 =b2
a11 x1 +a12 x2 = b1
и применяем первый шаг прямого хода метода Г а у с с а . В
этом случае имеет место перенумерация с т р о к .
2. Выбор главного элемента по с т р о к е , т . е . производит ся пе ренумерация неизвестны х системы.
При а 12 > а 11 , на первом шаге вместо неизвестного х 1
исклю чаю т х 2:
a 12x2 + a 11x1 = b1
a 22 x 2 + a 21 x 1 _ b 2
К этой системе применяем первый шаг прямого хода мето да Г а у с с а .
3.
Поиск главного элемента по всей матрице з а к л ю чается в совместном применении методов 1 и 2. Всё это
приводит к ум еньш ению вычислительной погреш ности, но
может замедлить процесс решения з а д а ч и .
1.1.4 Метод Холецкого (метод квадратных к о р н ей )
Пусть дана система
А х =b.
(1.11)
где А - симметричная положительно определенная м атр и ­
ца.
Тогда решение системы (1.11) проводится в два э т а п а :
21
1.
Симметричная матрица А представляется как про изведение двух матриц
А = L • L Т.
Рассмотрим метод квадратны х корней на примере сис темы 4 -го п о р я д к а:
0
0
0 N ГI11 l21 l31 ll41Л
( 1ц
a11
a 14
0
0
0
l21 l22
l22 l32 l42
*
Va41
a 44J
0
0
Vl41 l42 l43 l44j V0
0
l31 l32 l33
0
l33 l34
0
l44J
Перемнож аем матрицы в правой части разложения и
сравниваем с элементам и в левой ч а с т и :
13
г _ a 14
1ц =^[а 11 li21 _ aI12 , гl 3 1__ a/---’ l 441'
1_
l 21
’ l 22 _ л / a 22
Van
д/ a 11
l _ a 32 l21131
, l33_д/a33 l31 l32 , 144 д/a 44 -141-142 -143 •
l32 ~
l22
2. Решаем последовательно две системы
Ly =b ,
L Tx =у .
Замечания
1) Под квадратным корнем может получиться о тр и ц а­
тельное ч и с л о , следовательно в программе необходимо
предусмотреть использование правил действия с к о м п л ек с­
ными числами.
2) Возможно п ер еп о л н ен и е, если угловые элементы
близки к н у л ю .
1.2
И т е р а ц и о н н ы е м е т о д ы р е ш е н и й си стем ал геб раических уравнений
И терационны е методы обычно применяются для реше ния систем больш ой разм ерности и они требую т п р и в ед е­
ния исходной системы к специальному в и д у .
Суть итерационны х методов заклю чается в т о м , что ре шение х системы (1.1) находится как предел п о след ов ательности lim x(n).
n
22
Так как за конечное число итераций предел не может
быть д о с т и гн у т , то задаётся малое число £ - т о ч н о с т ь , и
последовательные приближения вычисляю т до тех п о р , по ка не будет выполнено неравенство
x n _ x n -l
<£,
где n =n (£) - функция £, llxII - норма в е к т о р а .
Определения основных норм в пространстве векторов и
матриц.
Для вектора x =( х ь х 2,..., x n)T нормы вычисляю тся по
следующ им ф о р м у л ам :
x |1 = m a x | xi|;
l< i<n
2 = Z lxi
i=1
3
Z Xi
2
Согласованные с ними нормы в пространстве м а тр и ц :
n
l - m ax z aIJ
l< i<n VJ=l )
\
^n
2 - m ax z a iJ
i< j <n Vi=1 )
n
2
- в е л и ч и н а , называемая евклидовой нор A
3 3 z a ij
Vi,J=l
мой матрицы A .
Прямые методы рассчитаны для решения с и с те м , поря док которых не больше 1 0 0 , иначе для практических вы числений используются итерационные методы.
1.2.1 Метод Я коби (простых и терац и й )
Исходную систему (1.11)
А х =b
преобразуем к в и д у :
23
У aiJ
a l4
b
Xi = — £ — x j ~ X — Xj + b - ,
г
j= iaii J j = + 1 aii J
aii
m
( 1 .1 2 )
где i = 1 , 2 ,...,m ; a ^ O .
Первая сумма равна н у л ю , если верхний предел сум мирования меньше н и ж н е г о .
Так (1.12) при i =1 имеет вид
m a1j + b
X1 = —£ — x J + —ц
1 J= 2 a 11 J a 11
По методу Я коби
формуле
x" +1
(n +1 приближение x i) ищем по
i —1a-.
m
a ••
b
Xn —
J x n + ^-.
b
= —T -_Ji Jj xn
— V
£ -bLxn
J
.
.
.
л
aa
J
a
J=1aii J J=i+1 aii J aii
xn
nг
(1.13)
где n - номер итерации ( 0 , 1 ,...); i = 1,m .
И терационны й процесс (1.13) начинается с начальных
значений
x 0 , которые в общем случае задаются п р о и з-
в о л ь н о , но предпочтительнее за х 0 взять свободные члены
исходной с и стем ы .
Условие окончания с ч е т а :
max x n+1 —x n <£,
i i
i
где i = 1, m .
1.2.2 Метод Зейделя
Система (1.11) преобразуется к виду (1.12) и
зуется итерационная п р о ц ед у р а, где неизвестные x
шаге определяются по формулам
1
i—
1a••
1 m a-•
h
X +1 = —£ ^ x f 1 — £ - j- x ,) + К
1
J.=1лaiiU J
J..+
=1+11aii
U J aiiU
Н ап р и м е р ,
,,
m a-i :
b
xn+l = —
+_L
J=2a11
a 11
x ) +1 =
2
24
—m a L x"j + b —«21 x +1,
J=3 a22 J a22 a22 1
о р ган и ­
на n + 1
(1.14)
(1.15)
(1.16)
и так д а л е е .
И терационны е процессы (1.13) и (1.14) сх о д я тся , если
норма матрицы А (А - матрица коэффициентов при н еизвестных в правой части систем (1.13) и (1.14)) у д о в л е т в о ряет у с л о в и ю :
IIA 11<1.
1.2.3 М атричная запись методов Я коби и Зейделя
Исходную матрицу системы (1.11) представим в виде
суммы трёх матриц
A =A 1 + D + A 2,
где D - диагональная м ат р и ц а ;
D di Qg [Q11Q22 ••• Qmm] ;
A 1 - нижняя треугольная м а т р и ц а ;
A 2 - верхняя треугольная м а тр и ц а .
П р и м е р : Дана матрица разм ерности (3 х 3):
' 0 0 o'! fo q12 Q13 f Q11 0 0 !
q21 0 0 + 0 0 q23 + 0 q22 0
vQ31 q32
V0 0 0 J V0 0 q33j
А1
А2
D
= А
Тогда исходную систему (1.11) можно записать в виде
x = - D -1A 1 x - D ' 1A 2 x +D ' 1 b .
Тогда метод Якоби можно записать в виде:
x n+1 = - D - 1A 1x n - D - 1A 2x n + D ~1b
или
D х n+1+ (A1+ A 2) x n = b .
(1.17)
В матричной форме метод Зейделя будет в ы гл я д еть :
x n+1= - D - 1A 1x n+1- D - 1A 2x n + D - 1b
или
(D + А,)х n+l+ А2 х n =b .
(1.18)
25
Преобразуем формулы (1.17) и (1.18):
D( х n+1- x n)+А х n = b ,
(1.19)
(D + А1)(х"+1- x n)+ A x n = b .
(1.20)
Из (1.19) и (1.20) в и д н о , что если итерационны й метод
с х о д и тс я , то он сходится к точному р е ш е н и ю . Иногда при
решении задач большой р а з м ер н о сти , в итерационные ме тоды вводятся числовые п ар ам етр ы , которые могут з а в и сеть от номера итерации.
Пример для метода Я к о б и .
х n+1—x n
D —----- — +A x n = b ,
*n+1
.
w _
где t - числовой п ар а м е т р .
Возникаю т в о п р о с ы :
1) При каких значениях t сходимость будет н аи б о лее быстрой ?
2) При каких значениях t метод сх о д и тс я?
На примере двух методов просматривается вывод о т о м ,
что одни и те же методы можно записывать несколькими
сп о с о б а м и . Поэтому вводят каноническую (стан д артн ую )
форму записи:
x n+1—x n
D n+1x ----- x—+A x n= b .
(1.21)
t n+1
Формула (1.21) получена путем объединения (1.19) и
( 1 . 2 0 ).
М атрица D n+1 здесь задает тот или иной м е т о д . Если
сущ ествует обратная матрица к этой м атр и ц е, то из по следней системы мы можем найти все н еи зв е стн ы е.
1. Метод (1.21) - я в н ы й , если матрица D n совпадает с
единичной матрицей и неявный - в противном с л у ч а е .
2. Метод (1.21) - стац и о н ар н ы й , если матрица D n+i=D, и
параметр t не зависит от номера итерации и н естац и о нарный - в противном с л у ч а е .
1.2.4 Метод Ричардсона
Явны й метод с переменным параметром t :
26
x n+1—x n
x
— + A x n= b ,
tn+1
называется методом Ричардсона.
1.2.5
Зей д ел я )
(1.21 а)
Метод верхней релаксации (обобщ ённый метод
x n+1 —x n
(D+mA1)
+A x n = b ,
(1.21 б )
w
где w - числовой п ар а м е т р .
Если матрица А - симметричная и положительно о п р ед е л е н а , то последний метод сходится при (0 < w < 2). По следнюю формулу запишем в следующ ем виде:
(E + wD—A1) x n+1 = ((1 - w) E —wD—A2) x n + wD ~lb ,
(1.22)
где Е - единичная м а т р и ц а .
Тогда для вычисления неизвестных х i (i =1, m ) можно за писать итерационную процедуру в виде:
,
i—
1 a
,
m a ■■
h
x"+1+ w z -2-x n+1= (1—ю)x n—w Z — xn+w-h - .
(1.23)
1=
1 a ii
j=i+1a ii
a ii
Н ап р и м ер , для х 1 это будет такое в ы р аж ен и е:
1
x1= (1—w) Х \—w Z
т \Лл •
— xj + ю
1=2 ац
ац
1.2.6 Сходимость итерационны х методов
Р ассмотрим систему
Ax=b,
где А - невы рожденная действительная матрица.
Для решения системы рассм отрим однош аговы й с т а ­
ционарный метод
x n+1 —x n
D —------— + A x n = b,
(1.24)
t
при n = 0 , 1 , 2 __
П р ед п о л о ж и м , что задан начальный вектор р е ш е н и я .
Тогда метод (1.24) с х о д и тс я , если норма вектора
x —x n — 0 .
n—
—
^
27
Т еор е м а . Условие сходим ост и ит ерационного м е т о д а .
Пусть А - симмет ричная полож ит ельно определенная
м ат рица и выполнено услови е D - 0.5tA > 0 (где t > 0). То гда ит ерационны й метод (1.24) сход и т ся.
С л е д с т в и е 1. Пусть А - симметричная и положительно
определенная матрица с диагональны м преобладанием, то
есть
m
I aJJ 1> £ I a iJ I,
i =1
i* i
при J = 1 , 2 , . , m . Тогда метод Якоби с х о д и т с я .
С л е д с т в и е 2. Пусть А - симметричная и положительно
определенная матрица с диагональны м п р ео б л ад ан и ем , то гда метод верхней релаксации сходится при
(0< ю<2).
П р о в ер я е тся , при каком значении ю метод достигает
заданной точности б ы с т р е е .
В ч а с тн о с ти , при ю = 1 метод верхней релаксации пре вращается в метод З е й д е л я , сл ед о ват ел ь н о , при ю = 1 метод
Зейделя с х о д и т с я .
Т е о р е м а . И т ерационны й мет од (1.24) сходится при
лю бом начальном векторе x 0 тогда и только тогда, когда
все собст венные значения мат рицы
S =E —tD-1A
по модулю м еньш е ед и н ицы .
28
2 П л о х о о б у с л о в л е н н ы е с и с т е м ы л и н е й н ы х ал геб раических уравнений
Дана система линейных алгебраических уравнений
Ах= Ь
(2.1)
Если система плохо об у сл о в л ен а, то это з н а ч и т , что по греш ности коэффициентов матрицы А и правых частей b
или же погреш ности их округления сильно искажают ре шение системы.
Для оценки обусловленности системы вводят число
обусловленности Мл
ы л = 1-1
Чем больше значение Мл , тем система хуже обусловле на.
Свойства числа о б у сл о в л ен н о сти :
1) М е =1;
2) Мл > 1;
3) Мл >\Ятах 1/1 ЯтЬ\, где XМах, Xmin - соответственно макси мальное и минимальное собственные числа матрицы А ;
4) Млв < Мл * М в ;
5) Число обусловленности матрицы А не меняется при
умнож ении матрицы на произвольное число а ^ 0.
Найдем выражение для полной оценки погреш ности
решения системы.
Пусть в системе (2.1) возмущены коэффициенты м атр и ­
цы А и правая часть b , т .е .
SA = A - A , Sb = b - b , S x = x - x .
Т е о р е м а . Пусть м ат р ица A имеет обратную матрицу,
-1
и выполняется условие SA < A
. Тогда м а т риц а л = SA+A
имеет обратную и справедлива следующая оценка относи тельной п огр еш н о с т и :
Sx <
x
f
N
S
A
Sb
Ма
_L
SA V A
b J
1 М аA
29
Рисунок 2 - а) система имеет единственное р е ш е н и е ;
б) система не имеет р е ш е н и я ;
в ) система плохо о б у сл о в л ен а.
В случае в ) малейшее возмущение системы сильно ме няет положение точки пересечения п р я м ы х .
В качестве примера рассмотрим систему
Г1.03* J+0.991* 2 = 2.51
10.991* 1+0.943х 2=2.41.
Решение этой системы
* 1 * 1.981
х 2 * 0.4735.
Оценим влияние погреш ности правых частей на резуль т а т . Рассмотрим “ возмущ енную ” систему с правой частью
*
b = (2.505 , 2.415) и решим эту с и с т е м у :
*
х 1 * 2.877
*
х 2 * -0.4629.
Относительная погреш ность правой части
5 (b) = 0.005/2.51 * 0.28% привела к относительной по грешности решения 5 (* ) =0.9364/1.981 * 47.3%.
П огрешность возросла примерно в 237 р а з . Число обу словленности системы (2.1) приблизительно равно 237.
Подобные системы называются плохо обусловленными.
Возникает вопрос: какими методами можно решать такие
системы?
30
2.1
М етод р е г у л я р и з а ц и и д л я р е ш е н и я п лохо обу с л о в л е н н ы х систем
Рассмотрим систему
А х =Ь .
(2.1)
Для краткости перепишем эту систему в эквивалентный
форме
( A x - b, Ax - b) = 0.
(2.2)
Для примера рассм отрим систему
Г2х1 - Х1 = 1
(Х1 - 2x2 = 2
Тогда ее можно представить как
(2 х 1-х 2- 1)2+(х1- 2 х 2- 2 )2=0.
(2.2*)
Решение системы (2.2) совпадает с решением системы
(2.2*).
Если коэффициенты A или b известны н ето ч н о , то ре шение также является не т о ч н ы м , поэтому вместо равенст ва (Ax -b, A x - b )=0 можем потребовать приближенного вы полнения равенства (Ax- b , A x - b ) ~ 0 и в этом виде задача
становится не определенной и нужно добавить д о п о л н и ­
тельные условия.
В качестве дополнительного условия вводят тр е б о в а н и е , чтобы решение как можно меньше отклонялось от за данного х 0 т .е . (х-х0, х - х 0) было м и н и м ал ь н ы м . С л ед о ват е л ь н о , приходим к регуляризованной задаче вида
( А х -b, A x - b ) + a ( x - x 0, x - x 0) = min,
(2.3)
где а >0.
Используя свойства скалярного п р о и звед ен и я, выраже ние (2.3) перепишем в виде
(x,A TA x )-2(x,A Tb ) + (b ,b ) + a [(x,x )-2(x,x 0) + (x0, x 0)] =min. (2.4)
Варьируя x в уравнении (2.4), получим уравнение вида
(A ТА + а Е )x =A Tb + ax 0.
(2.5)
31
Система (2.5) - система линейных алгебраических
у р а в н е н и й , эквивалентная системе (2.1). Систему (2.5) ре шаем с помощью метода Гаусса или с помощью метода
квадратных к о р н е й . Решая систему (2.5) найдем р е ш е н и е ,
которое зависит от числа а .
В ы б о р у п р а в л я ю щ е г о п а р а м е т р а а. Если а=0, то си стема (2.5) перейдет в плохо обусловленную систему (2.1).
Если же а - в е л и к о , то система (2.5) переходит в хорошо
обусловленную систему и решение этой системы может
сильно отличаться от решения системы ( 2 . 1 ).
О птимальное значение а - это такое ч и с л о , при кото ром система (2.5) удовлетворительно о б у сл о в л ен а.
На практике пользуются невязкой вида га = A x а - b , и эту
невязку сравнивают по норме с известной погрешностью
правых частей Sb и с влиянием погреш ности к о эф ф и ц и ен тов матрицы SА .
Если а - слишком в е л и к о , то га >>Sb или SА . Если а м а л о , то га <<Sb или SА .
П оэтому проводят серию р а с ч е то в , при различны х а и в
качестве оптимального значения выбираю т то значение а ,
когда выполнено следующее условие
га * Sb + S A •x .
Для выбора вектора х 0 нужно знать приближенное ре шение или ж е , если приближенное решение трудно опреде л и т ь , то х 0 = 0 .
2.2 М етод в р а щ е н и я ( Г и в е н с а )
Метод Г и в е н с а , как и метод Гаусса состоит из прямого
и обратного х о д о в .
Прямой ход м е т о д а . Исключаем неизвестное х 1 из всех
у р а в н е н и й , кроме п е р в о г о . Для исключения х 1 из 2-го урав нения вычисляю т числа
32
2
2
где а и р т а к и е , что
+ в 12= 1 , - Р 12ац + a ^ 2 1 = 0 .
Первое уравнение системы заменяем линейной к о м б и нацией первого и второго уравнений с коэффициентами a i 2
и в 12 , а второе уравнение такой же комбинацией с a i 2 и в 12 . В результате получим систему
1>*—
(1)—
- и^ (1)
aД
11
1+a 1
(2)* + L
...+ ai,mхт=
(1)
a22Х2+•••+a 2?mXm—b2 )
a31 Х1+a 32 Х2+...+a3mXm—b3 .
(2.6)
a m1,x1+ a m20x20 +...+ammx m—bm
Здесь
a\j —a 12a 1j + e 12a 2j ,
a 21)
—a 12a 2j - e 12a1j , ^
—a 12b1 + в 12Ь2’
—a 12b2 - в 12Ь1,
где j = 1, m .
П реобразование системы (2.1) к системе (2.6) э к в и в а­
лентно ум нож ению слева матрицы A и вектора b на м атр и цу С 12 вида
' а 12 в 12 0 . . 0 Л
а 12
0
..
0
0
0
1
..
0
• О
• о
C 12 —
О
- Р12
•
b211)
Г
. 1,
Аналогично для исключения х1 из третьего уравнения
вычисляем числа
(1)
a 11
a31
И в 13—
а 13—
,(1)\2
1)\2
' К ' ) 2 +(a<1)) 2
-- д / К
Т +, /„(
(a31)'
т а к и е , что a j 3+pj 3 —1, a 13a 31 - p 13a 1(1) —0 .
Затем первое уравнение системы (2.6) заменяем линей ной ком бинацией первого и третьего уравнений с коэффи циентами а 13, р 13, а третье уравнение системы ( 2 . 6 ) заменя ем линейной комбинацией тех же у р а в н е н и й , но с коэффи циентами а 13 и - р 13. Это преобразование эквивалентно ум ножению слева на матрицу
33
' a 13
0
0
1
—р13 0
C13_
0
0
. 0
0
в13 0 . . 0N
0
0 .. 0
a 13 0 . . 0
1 .. 0
0
0
0 . . 1,
Исключая неизвестное x 1 из всех п оследую щ их уравне ний получим систему
(1) х =b (1)
где матрица на первом шаге A (1) = C 1m... C 13C 12A , , а вектор
правых частей b (1) = C1m...C13C12b .
Здесь и далее через Сkj обозначена матрица эл е м е н тар ного п рео б р азо в ан и я, отличаю щаяся от единичной матрицы
Е только четырьмя э л е м е н та м и .
Действие матрицы Сkj на вектор x эквивалентно п о вор оту вектора x вокруг о с и , п ерпендикулярной плоскости
OXkXj на угол фkj та к о й , что
а j = cos фц > Pkj = sin фц •
Операцию умнож ения на матрицу Сkj называют плоским
вращением или преобразованием Г и в е н с а .
Первый этап состоит из m -1 ш а го в , в результате чего
получается система
(m-1) _
(m-1),
(m—
1) _ Am-1)
a11
x1 + a 12 ^ .. + a1m4xm = b1
a 22X2 + ... + a2mxm = b2)
(1)
(1)
am2x2 + ... + ammxm
(2.7)
(1)
bm•
В матричной форме получаем А х =b.(1)
На втором э т а п е , состоящем из m -2 ш а г о в , из уравнений
системы (2.7) с номерами 3 ,4 ,. . . , m исклю чаю т неизвестное
x2. B результате получим систему
34
(m—
1)x + a(m—
1)x + a(m—
1)x + a(m—1)x _ h(m—
1)
x1 i- a 12 x 2 -r a13 x3... ”*”a1m xm ~ h1
11
am —1x2+ a2m—1)*>..+a z —)xm _ b p —1)
a33)x3 + ... + aS i xm _ hm
aam3
(2)x
(2) x _ h(2)
x3 + ...+ aammxm
hm .
В
матричной
форме
получаем
A (2)x _ b (2),
где
C 24 C
A(1) , bb (2) _ C
C 24C
C 23bb (1) .
Aa (2) _ C
C 2 m .C
C 23 A
C 2 m .C
После завершения (m-1)-го шага придем к системе с
верхней треугольной матрицей вида
A (m—1)x _ b (m—
1),
т-тт^
1д е
А ( m—-1) —Г
A
А ( m—2)
—C m—1,m A
’ bh ( m—1) —Г m—1,mbh ( m—2)
О братный ход метода вращений проводится точно так
ж е , как и для метода Г а у с с а .
35
3 Р е ш е н и е н е л и н е й н ы х у р а в н е н и й и си стем н е л и н е й ных уравнений
Рассмотрим систему нелинейных уравнений с m н еи звестными вида
' / , ( хт ) = о
Л ( Х1 Хт) = 0
.......................
.
(3.1)
fm (х1>-.Хт) = 0
Задача решения такой системы является более сл о ж н о й ,
чем нахождение корней одного нелинейного у р а в н е н и я , и
чем задача решения линейных алгебраических у р а в н е н и й .
ТЛ
w
w______________ _
В отличие от систем линейны х уравнений здесь использо вание прямых методов исключено и решение находится с
использованием итерационны х м ето д о в , т . е . находится
приближенное решение
*
*
*
X = (x 1 , ... , Хт ),
удовлетворяю щ ее при заданном 8 > 0 условию х - X < 8 .
Задача (3.1) совсем может не иметь решения или же
число реш ений может быть п р о и зв о л ь н ы м . Введем вектор ную запись решения з а д а ч и :
X= (Х1,...,Хт )
f = (/1 ,..;fm ) Г,
f ( X ) = 0.
(
3.2)
Будем сч и т а т ь , что функции f непрерывно д и ф ф ер ен цируемы в некоторой окрестности точки х . Введем матрицу
Якоби
д /1 ^
д /1
f '(x >
36
Э х1
дх2
d f2
д /2
Э х1
дх2
d fm
d fm
dfm
{ дх1
дх2
дхm У
”
дХ m
д /2
"
^m
Как и в случае решения одного уравнения начинаем с
этапа локализации решения (отделения корней).
П р и м е р . Дана система 2-х уравнений с двумя н еи зве стными
3 3
Х 1 + х2 = 8%i%2
Х ln ^ 2 = ^ 2 ln Xi
Найдем на плоскости место расположения р е ш е н и я .
Строим графики уравнений этой с и с т е м ы : а) - график
1 -го у р а в н е н и я , б) - график 2 -го у р а в н е н и я , в ) - совмещ ен ные графики.
а)
в)
Рисунок 3 - Графики уравнений системы
Определяем границы координат пересечения гр а ф и к о в .
Данная система имеет три реш ения. Координаты точек
(B, C,A):
B : x 1=4, x2=4
C : 3,5 < x 1 < 4; 1,5 < х 2 < 2,5.
Точки А и С симметричны относительно прямой х 1=х 2 .
Координаты точки С определим п р и б л и ж ен н о : х 1~ 3,8, х 2~ 2.
37
О бусловленность и корректн ость реш ения системы
(3.1). П редположим что система (3.1) имеет решение х и в
некоторой окрестности этого решения матрица Я коби не
в ы р о ж д ен а. Это о зн ач ает, что в указанной окрестности нет
других реш ений си с т е м ы .
В одномерном случае нахождение корня нелинейного
уравнения приводит к определению интервала неопреде *
*
ленности (х - о, х + о). Так как значения функции f(x) чаще
всего вычисляю тся на ЭВМ с использованием приближен ных методов нельзя о ж и д а ть , что в окрестности корня от носительная погреш ность окажется м а л о й . Сама п о гр еш ность корня ведет себя крайне нерегулярно и в первом
приближении может восприниматься как некоторая с л у чайная в ел и ч и н а . На рисунке 4 а п редставлена идеальная
си ту ац и я, отвечающ ая исходной математической п о ста­
новке за д а ч и , а на рисунке 4 б - р еал ь н а я , соответствующ ая
вычислениям значений функции f на Э В М .
Рисунок 4 - Графическое изображение определения ин тервала неопределенности
В этом случае мы не можем о п р ед ел и ть , какая же точка
в интервале неопределенности является р е ш е н и е м . Радиус
интервала н еопределенности 8 прямо пропорционален по грешности вычисления значения f . Кроме т о г о , 8 возраста ет (обусловленность задачи ухудш ается) с ум еньш ением
f \ x *). Оценить величину 8 довольно с л о ж н о , но выпол нить это необходимо по следующ им п р и ч и н ам :
38
не имеет смысла ставить задачу о вычислении корня с
точностью 8 < 8 ;
- после попадания очередного приближения в интервал
неопределенности или близко от н е г о , вычисления сле дует прекратить (этот момент для итерационны х мето дов определяется крайне нерегулярны м поведением
приближений).
Если случай м н о го м ер н ы й , то получаем некоторую об ласть неопределенности D , и можем получить оценку ра диуса £ этой о б л а с т и :
£ < (f '(x ))-1 Д( f )
II/(x) - f ( x *) < A ( f ).
Роль абсолютного числа обусловленности играет норма
м атр и ц ы , обратной матрице Якоби f (x). Чем число о б у словленности больш е, тем хуже эта система обусловлена.
3.1 М етод п р о с т ы х и т е р а ц и й
Систему (3.1) преобразуем к следующему эквивалент ному виду:
Х1= Ф1( x 1,....xm)
Х2 = ф2( x, ,...,xm)
xm= Фт(x 1>...,xm)
(3.3)
Или в векторной форме
х=ф (х)
(
3.4)
Пусть задано начальное приближение x (0) = (xf0)..., xm0))r .
Подставляем его в правую часть системы (3.4) и получаем
/ (0 )\), продолжая п о д ста н о в к у , находим х(2) и т .д .
x (1) - ф—(x
Получим последовательность точек {х(0), х(1),..., х(к+1)|, кото рая приближается к искомому решению х .
39
3.1.1 Условия сходимости м е то д а .
Пусть р' (х) - матрица Я к о б и , соответствую щ ая системе
(3.4) и в некоторой А - окрестности решения х функции ф (х)
(i = 1 , 2 ,... ,m) д иф ф еренцируем ы и выполнено неравенство
вида:
\ ф \ х )||< q ,
где
< q < 1 ), q - п о сто я н н ая .
Тогда независимо от выбора х (0) из А-окрестности корня
итерационная последовательность {х к} не выходит за пре делы данной окрестности, метод сходится со скоростью
геом етрической прогрессии и справедлива оценка погреш ности
х (п) - •'хV < q' J\/
х <0>- х•'V
J\/
(0
3.1.2 Оценка п о гр еш н о ст и .
В данной окрестности решения с и стем ы , производные
функции р (х) ( i = 1 , . , m ) долж ны быть достаточно малы по
абсолютной в е л и ч и н е . Таким о б р азо м , если неравенство
||фг( х )||<q не в ы п о л н ен о , то исходную систему (3.1) следует
преобразовать к виду (3.3).
П р и м е р . Рассмотрим преды дущ ий пример и приведем
систему к удобному для итераций виду
X1 = 3 8x1X2 - х 2,
X2
xi
x2 = x 2 +--------------ln x2 ln x1'
П роверяем условие сходимости вблизи точки С . Вычис лим матрицу Якоби
40
2
8 Xi —Ъх'2
8х2
ф' (хь х 2) = 3(8 X!X2 - х | )
1
V
2/3
1
ln 2 х1 ln х1
3(8X!X2 - х3) 2 3
1+
1
1
ln хп ln 2 х 2
Так как х 1~ 3,8, х 2~ 2, то при этих значениях вычисляем
норму матрицы ф'( x )
II ф'(x ) 11~ II ф (3,8 ; 2) II ~ 0,815.
Запишем итерационную процедуру
х (к+‘>= 3/8х * )х 2к) - ( х 2к>)3 ,
(к)
х 1(к)
х(к+1) _ х(к) + х 2
х2
х2
ln х(к)
2
1ln х( к)
С л ед о вател ь н о , метод простых итераций будет сходить ся со скоростью геометрической п р о гр есси и , знаменатель
которой q ~ 0,815. Вы числения поместим в таблице 1.
Таблица 1 Решение системы нелинейных у равнений
1
к
0
•»»
8
9
3,8000
х(к)
3,75155
—
3,77440 х 1=3,77418
х1
0
х(к)
х2
2 ,0 0 0 0
0
2,03895
•
2,07732 х 2=2,07712
При к=9 критерий окончания счета выполняется при
£= 1 0 -3 и можно положить х 1= 3 , 7 7 4 ± 0,001 и х2=2,077± 0,001.
3.2 М етод Н ь ю т о н а
Суть метода состоит в том, что система нелинейных
уравнений сводится к решению систем линейных ал геб р аи ­
ческих у р а в н е н и й . Пусть дана система (3.1) и задано на чальное приближение x (0). П риближение к реш ению х с тр о им в виде последовательности x (0) x (1)
x (n)
41
В исходной системе (3.1) каждую функцию f i(x1, x2,..., xn),
где i =1, m , расклады ваю т в ряд Тейлора в точке х (п) и заме няют линейной частью её разложения
д/- ( х (п)) 1
j =1 dx;j
т
В результате получим систему линейных алгебраиче ских уравнений
от d/j( х (п))
Л (х (п))+
---- -( x j - x (п))=0
j=1 dx;j
<
f m( х ^ + ъ Щ
^ ^ - x (п)) = 0
j=1 dx j
(
)
В матричной форме
f ( х (п)) + f '(х (п)) *(х - х (п)) = 0,
(
3.6)
где f ' - матрица Я к о б и .
П р ед п о л о ж и м , что матрица н евы р о ж д ен н ая, то есть су ществует обратная матрица [ f '(х (n-)]"1.
Тогда система (3.6) имеет единственное р е ш е н и е , кото рое и принимается за очередное приближение х (п+1). Отсю (п+1)
1
да выражаем решение х
по итерационной ф о р м у л е:
х С+1) = х М - [ f ' (х <п))]-1*f (х (п)).
( 3 -7)
Ф ормула (3.7) и есть итерационная формула метода
Н ью тона для приближенного решения системы н ели н ей ных у р а в н е н и й .
З а м е ч а н и е . В таком виде формула (3.7) используется
редко в виду того, что на каждой итерации нужно находить
обратную м а т р и ц у . Поэтому поступают следующ им о б р а­
зом : вместо системы (3.6) реш аю т эквиваленту ей систему
линейных алгебраических уравнений вида
42
f Xx(n)) *Ax(n+1 = - f ( x (n)).
(
3.8)
Это система линейных алгебраических уравнений отно л (П+1)
(П+1)
(П) г»
сительно поправки Ax
=x
- x . Затем полагают
.(n+1) =
_ x(n)
v(n) +Ax (n+1)
(
3.9)
3.2.1 Сходимость метода
Т е о р е м а . Пусть в некот орой окрест ност и р еш ен и я х
системы (3.1) функции f (при i= 1,m ) дважды непрерывно
диф ференцируемы и м а т риц а Я к о би не вы рож д ен а. Тогда
найдется такая малая д окрестност ь вокруг р еш ен и я х,
что при выборе начального приближ ения x 0 из эт ой окре стности ит ерационны й метод (3.7) не выйдет за пределы
этой окрест ност и р еш ен и я и справедлива оценка вида
x (n+1) _ x < 1 X(n) _ X
д
2
где n - номер ит ерации.
Метод Нью тона сходится с квадратичной с к о р о сть ю . На
практике используется следующ ий критерий о с та н о в к и :
x (n) _ x (n+1)
•Л'
<£.
43
4 Решение проблемы собственных значений
Пусть дана квадратная матрица A размерностью (m *m )
и сущ ествует такое число X, что выполняется равенство
A ■x =A-x, x Ф0,
тогда такое число X называется собственным значением
матрицы А , а x - соответствую щ им ему собственным векто ром.
П ерепишем это равенство в эквивалентной форме
(A - X E )x = 0 .
(
4.1)
Система (4.1) - однородная система линейных ал г еб раических у р а в н е н и й . Для сущ ествования нетривиального
решения системы (4.1) должно выполняться условие
det(A - XE) = 0 .
(
4.2)
Определитель в левой части уравнения является много членом m - ой степени относительно X, его называют - ха рактеристическим
определителем
(характеристическим
многочленом). Следовательно, уравнение (4.2) имеет m
корней или m собственны х з н а ч е н и й . Среди них могут быть
как действительны е, так и комплексные корни.
Задача вычисления собственны х значений сводится к
нахождению корней характеристического многочлена (4.2).
Корни могут быть найдены одним из итерационны х мето дов (в частности методом Ньютона).
Если найдено некоторое собственное значение матрицы
A , т о , подставив это число в систему (4.1) и решив эту сис тему однородны х уравнений, находим собственны й вектор
х , соответствую щ ий данному собственному з н а ч е н и ю .
Собственные вектора будем при нахождении нормиро вать (вектор х ум нож аем на 11хII-1, и таким образом они б у дут иметь единичную длину), нахождение собственны х
значений матрицы A и соответствую щ их им собственны х
44
векторов и есть полное решение проблемы собственных
з н а ч е н и й . А нахождение отдельны х собственны х значений
и соответствую щ их им векторов - называется решением
частной проблемы собственны х значений.
Эта проблема имеет самостоятельное значение на прак т и к е . Н ап р и м е р , в электрических и м еханических системах
собственные значения отвечают собственным частотам ко л еб а н и й , а собственные вектора характери зую т соответст вующие формы к о л е б а н и й .
Эта задача легко решается для некоторых видов м а т р и ц :
д и аго н ал ь н ы х , треугольны х и трехдиагональны х м а т р и ц .
К п р и м е р у , определитель треугольной или диагональ ной матрицы равен произведению диагональны х э л е м е н то в ,
тогда и собственные числа равны диагональны м элементам.
^аа 0 0^
П р и м е р . М атрица А - диагональная А= 0 а
V0
0
0
аJ
Тогда det(А - Я Е ) = (а - X) , а характеристическое уравне ние (а - X) = 0 имеет трехкратны й корень Я=а .
С обственным и векторами для матрицы А будут ед и н и ч ные векторы
(01
(01
(11
ei = 0 , е2 = 1 , е3= 0
10 J
V0J
V1J
П р и м е р . Найдем собственные числа матрицы
( 2
-9
5Л
1,2 -5,999
6
- 11
-7,5 j
V 11
Составим х арактери сти ческий многочлен
г 2-Я
-9
А =
Р 3 (Я) = det (A - Я E ) = det
5
1 ,2
-5,3999 - Я
6
1
-1
-7 ,5 -Я
= - Я 3-10,8999 Я2-26,49945 Я - 2 1 ,0 0 2 .
45
Используя метод Н ь ю т о н а , определим один из корней
уравнения Р 3( X)=0, а именно X—-7,87279.
Разделив многочлен P 3(A) на (X- X1) получим многочлен
второй сте п е н и : P2(A)=X2+ 3 ,02711X+2,66765. Решив к в а д ратное у р а в н е н и е , находим оставшиеся два к о р н я :
X2,3—-1,51356± 0,613841 * i (комплексные сопряженные
корни).
Сущ ествую т прямые методы нахождения собственны х
значений и итерационные м е т о д ы . Прямые методы неудоб ны для нахождения собственны х значений для матриц в ы ­
сокого п о р я д к а . В таких случаях с учетом возм ожностей
компьютера более удобны итерационные методы.
4.1 П рямые методы нахождения собственных значений
4.1.1 Метод Леверрье
Метод разделяется на две стадии:
- раскрытие характеристического уравнения,
- нахождение корней многочлена.
Пусть det(A - XE) - есть характеристический многочлен
матрицы А = {a ij } (i,j =1,2,..., m ),
т . е . det (A-XE )=Xm+ p 1Xm-1+•••+p m, и X1, X2>..., Xm - есть полная
совокупность корней этого м ногочлена (полный спектр
собственны х значений).
Рассмотрим суммы вида
Sfc = Xk +
(к = 1 , 2 , . , m ), т .е .
S =^1+^2+...+^m=SpA
S2=^2+^2+—+^m=spA2
1
Sm=xm +^m +-+^m =spAm
(
4.3)
m
где SpA= Xa u - след м а т р и ц ы .
i=1
В этом случае при к<m справедливы формулы Ньютона
для всех (1 <к< m )
46
Sk + P 1Sk-1 + L + Pk- 1S1 - -kpk ,
(
4.4)
Откуда получаем
при k = 1 р 1 = -S 1,
при k=2 р 2 = -1 / 2 • (S 2 + р 1 •S1),
при k= m р m = - 1/n • (S m + р 1 •S m-1 + р 2 •S m-2 +. . .+
+ р m-1•S 1).
(
4.5)
Следовательно,
коэффициенты
характеристического
многочлена р i можно о п р ед ел и ть , если известны суммы
S 1,S 2, ... ,S m. Тогда схема алгоритма раскрытия х ар а к т е р и ­
стического определителя методом Леверрье будет следую щей:
1) вычисляю т степень м атр и ц ы : А к=А k-1 •А для k= 1,...,m ;
2) определяю т S k - суммы эл е м е н т о в , стоящих на глав k
ной диагонали матриц А ;
3) по формулам (4.5) находят коэффициенты характери стического уравнения р t(i = 1 , 2 , .. . , m ).
4.1.2 У соверш енствованны й метод Фадеева
Алгоритм метода:
1) вычисляю т элементы матриц A 1,A 2 ,.., A m:
m
(в конце подсчета Bm - нулевая матрица для контроля);
2)
определяю т коэффициенты характеристического
уравнения р t: q 1 = - р 1, q 2 = - р 2,..., qm = - ^ .
С ущ ествую т и другие методы раскрытия х а р ак тер и сти ­
ческого о п р ед ел и тел я : метод К р ы л о в а , Данилевского и д р .
4.1.3 Метод Данилевского
47
Две матрицы A и B называются п о д о б н ы м и , если одна
получается из другой путем преобразования с помощью не w
w
гг
которой не вырожденной матрицы S :
B =S ■1•A S ,
если это равенство сп р ав ед л и во , то матрицы A и B п о д о б н ы , а само преобразование называется преобразованием
подобия (переход к новому базису в пространстве m - мер ных векто ров).
Пусть у - результат применения матрицы A к вектору х
у =A •х .
Сделаем замену п ер ем ен н ы х :
x =S •x ', у =S у ' .
Тогда равенство у =A •х преобразуется к виду
у '=S -1•A •S •x'.
В этом случае матрица B и матрица A имеют одни и те
же собственные ч и с л а . Это можно легко увидеть раскрыв
определитель
det( S _1A S - X E ) = det( S _1( A - X E ) S )=
= det (S ~l)-det (A - X E )d et (S ) = det ( A - X E ).
С л ед о вател ь н о , матрицы A и B - п о д о б н ы е, имеют одни
и те же собственные з н а ч е н и я . Но собственные векторы х и
x не с о в п а д аю т, они связаны между собой простым соот ношением
х = S •х
Такую матрицу A с помощью преобразования подобия
или же последовательности таких п реобразований можно
привести к матрице Ф робениуса в и д а :
”
/ 1,m-1
L
0
0
F= 0
1
^
0
0
, 0
0
^
1
0 ,
1
48
/ 1m Л
/ 12
0
( fii
Д етерм инант матрицы F - d e t( F ) можно разложить по
элементам первой ст р о к и :
det (F -X E )= (-1) m (Xm- а Г -1------ p m ).
Тогда коэффициенты характеристического многочлена
матрицы А будут
р 1 = f 11 ’ p 2 = f 12,--’ Pm = f 1m-.
Второй с л у ч а й . Матрицу А преобразованием подобия
можно привести к матрице В верхнего треугольного вида
b1m
b2m
b11 b12
B=
V
0
b22
0
0
•••
bmmJ
Тогда собственны ми числами будут диагональны е эле менты матрицы B :
det ( B - X E ) = (b„ -X )(b22 -X )L(bmm -X) .
Третий с л у ч а й . М атрицу A с помощью преобразования
подобия можно привести к Ж ордановой форме S ~lA S = Л
Л=
X
0
V
0
о
X0 s 0
о
о
0
0
0
0
X
s1
0
где Xi - собственные числа матрицы A ; S i - константы (0
или 1); если S i=1, то Xi= Xi+1.
К четвёртому случаю относятся м атр и ц ы , которые с по мощью преобразования подобия можно привести к д и а г о ­
нальному виду (матрица простой струк тур ы ):
49
S - A S =D =
X1
0
0
0
X,
0
0 0
XnJ
у к о то р о й , как и зв естн о , собственны ми числами являются
диагональны е э л е м е н т ы .
V
50
4.1.4
Метод итераций определения первого собственно го числа м атр и ц ы .
Пусть дано характеристическое у р а в н е н и е :
det(A - X•E ) = 0,
где Xь X2,..., Xn - собственные значения матрицы А .
П р ед п о л о ж и м , что IX11>1X21> IX31> ... > IXmI, т . е . X1 - наи большее по модулю собственное ч и с л о .
Тогда для нахождения приближенного значения X1 и с­
пользуется следующая с х е м а :
1) выбираю т произвольно начальный вектор у (0);
2) строят последовательность итераций вида:
У(1) = Ay (0),
у (2) = А-A y (0) = A 2у (0),
у (m) = A-Am-1у (0) = A mу (0),
У(m+1) = a - A mу (0) = Am+1у (0).
3) выбирают у (m) =A mу (0) и у (m+!) = A m+lу (0), тогда
y (m+1)
y (m+1)
Xi1= lim „.(
1,m)Л или X^
11 У1(m)
n^~ yi(m)
'
где yi( m) и yi( m+1) - соответствую щ ие координаты векторов
(m) (m+1)
у
иу
\
Возникает вопрос выбора начального вектора у (0). При
неудачном выборе можем не получить значения нужного
к о р н я , или же предела может не су щ ест в о в ать . Этот факт
при вычислении можно заметить по прыгающим значениям
этого отношения, следовательно, нужно изменить у (0). В
качестве первого собственного вектора можно взять вектор
у (n+1) и пронормировать е г о .
П р и м е р . Найти наибольшее по модулю собственное
значение и соответствую щ ий ему собственны й вектор м а т ­
рицы А
51
A=
3
1
O'
1
2
2
O 1
1
1) Выбираем начальный вектор y (0) = 1
кЬ
о2)\ оВычисляем последовательно векторы y(1) , у(2) , ...
y (10). Вы числения помещаем в таблицу 2.
(n+1)
Таблица 2 - Вычисление векторов у
(0 ) А у <0 )
А Уу (0) А 10 •у (0)
А 2 у (0) А 3 у (0)
У
1
4
17
69
243569 941370
1
5
1
2
18
7
67
25
210663 812585
73845 284508
3) Вычисляем отношения координат векторов
у(10)
и
у,(9>
у (10)
у (10)
у (10)
X® = А —=3,865; X f =
=3,857; X f = Уз(9- =3,853.
У
у2
У3
4)Вычисляем X1 как среднее арифметическое А.®, Ар, Ар
А(1) + а(2) + А(3)
А1 = ^ + А3 + ^ = 3 ,8 5 8 .
5)
вектор:
Определим соответствую щ ий числу X1собственный
f 941370Л
У
= А(10) •у (0) = 812585
284508
Нормируем вектор у (10), разделив на его длину
V
(10) =л/9413702+8125852+ 2845082 =1,28 106
У
3
получим вектор
52
f 0,74л
x 1= 0,64
v0 ,2 2 J
Далее можем определить второе собственное число
,(n+1)
Г Г ' У ,
(n+1)
У,
(n)
(n -1)
- ^1 y i
где i= 1 , 2 , n.
При вычислении собственны х чисел подобным образом,
будет накапливаться ошибка. Данная методика позволяет
приближенно оценить собственные значения м а т р и ц ы .
53
5 Задача приближения функции
П остановка з а д а ч и .
Пусть на отрезке [a , b ] функция у = f(x) задана таблицей
своих значений y0 = f (x0),..., Уп = f (xn).
Допустим, что вид функции f (x ) неизвестен. На п ракти ­
ке часто встречается задача вычисления значений функции
у =f(x) в точках х , отличных от x0 ,...,xn. Кроме т о г о , в не которых случаях, не смотря на то, что аналитическое в ы ­
ражение у =f(x) и зв естн о , оно может быть слишком гр о моздким и неудобным для математических преобразований
(н ап р и м ер , специальные ф ун кци и ). Кроме этого значения y ,
могут содержать ошибки э к с п ер и м ен т а.
О п р е д е л е н и е . Точки Х0 , ..., xn называются узлам и и н терполяции.
Требуется найти аналитическое выражение функции
F(x), совпадаю щ ей в узлах интерполяции со значениями
данной функции, т.е.
F (x0) = У0 >F (x1) = Уъ ...’ F(xn) = У п.
О п р е д е л е н и е . Процесс вычисления значений функции
F (x ) в точках отличных от узлов интерполирования н азы ва­
ется интерполированием функции f ( x ) . Если x е [x q,xn], то
задача вычисления приближенного значения функции в т . х
называется интерполированием, иначе - эк стр ап о л и р о ва н и ­
ем.
Геометрически задача интерполирования функции од ной переменной означает построение кривой, проходящ ей
через заданные точки (xq, Уэ),^, y1),...,(xn, yn) (рисунок 5). То
есть задача в такой постановке может иметь бесконечное
число р е ш е н и й .
54
у
X0 X1
X2 X3
X
Р исунок 5 - Геометрическая иллюстрация задачи
интерполирования функции
Задача становится од н о зн ач н о й , если в качестве F( x )
выбрать многочлен степени не выше n , такой ч т о :
Fn (X0 )=У0 , Fn (x 1)=у 1 , ..., Fn (Xn)=Уп.
О п р е д е л е н и е . М ногочлен Fn(x), отвечаю щ ий в ы ш ен азванным у с л о в и я м , называется интерполяционным много членом.
Знание свойств функции f позволяет осознанно в ы б и рать класс G аппроксим ирую щ их ф у н к ц и й . Ш ироко и с пользуется класс функций вида
Фш(X) = С{)ф{)(X) + Сф1(X) + ... + стфт(X),
(5.1)
являю щ ихся линейны ми комбинациями некоторых базис ных функций (р0(х), ..., (рт(х).
Будем искать приближаю щ ую функцию в виде много члена степени т , с коэф ф ициентам и с 0 , ..., ст, которые на ходятся в зависимости от вида п р и б л и ж ен и я. Функцию
Фт(х) назы ваю т обобщенным многочленом по системе
функций (р0(х), ^ 1(х), ...,фт(х), а число т - его сте п е н ь ю .
Назовем обобщ енный м ногочлен Ф т(х) и н тер п о л я ц и о н н ы м ,
если он удовлетворяет условию
Фт (х i)=yi, (i= 0 , 1 ,..., n ).
П о к а ж е м , что условие (5.2) позволяет найти
жающую функцию единственны м образом
(5.2)
прибли -
55
СоФо(x0 )+ СФ (x 0 )+•••+СтФт(x0 ) = Уо
C0^ 0 (x 1)+C1^ 1(x 1)+- + Cm^m, (x 1) = У1
СоФо (xn)+ Ф
xn)+...+СтФт(xn) = Уп,
Система (5.3) есть система линейных алгебраических
уравнений относительно коэффициентов с0, с 1
с m.
Эта система n линейных уравнений имеет единственное
р е ш е н и е , если выполняется условие m =n и определитель
квадратной матрицы Р
Фо^
’Ф ^ ’- ’ Фп^
Фо(л1)’ Ф 1( x1) ’•••’ Фп(x1)
* о•
detP =
Фо(*ЛXф 1(xn )’...’ ф п ( xn)
О п р е д е л е н и е . Система функций <Po(x),..., Фп(x) н азы вается Ч ебы ш евской системой функций на [a,b ], если опреде литель матрицы отличен от нуля detP^O при любом р асп о ложении узлов x, е [ a,b ], i= 0 , 1
n , когда среди этих узлов
нет совпадающих.
Если мы имеем такую систему функций, то можно у т ­
в ер ж д ать , что сущ ествует единственны й для данной систе мы функций и нтерполяционны й многочлен Ф m(х), коэффи циенты которого определяются единственны м образом из
системы (5.3).
П р и м е р . При m<n система функций 1, х, х 2,..., х т л и ­
нейно независима в точках х 0, х 1,
хn, если они попарно
различны.
5.1 Интерполяционный многочлен Лагранжа
Рассмотрим сл у ч ай , когда узлы интерполирования не
равноотстоят друг от друга на отрезке [a,b ].
56
Тогда шаг h=x i+ 1 - x i Фconst. Задача имеет единственное
р е ш е н и е , если в качестве и нтерполирую щ ей функции F(x)
взять алгебраический многочлен
L n(х) =a 0 +a 1 х +a 2 х +...+anx n,
где а i неизвестные постоянные к о э ф ф и ц и ен ты .
Используя условие (5.2) можем записать
Ln(х0 ) = У0 > Ln(х 1) = У1- - Ln(Xn) = Уп•
(5.4)
Запишем это в виде:
2
a0+ a 1X0 + a 12X02 + . . . + a 1nX0п= У0
a0+ a 1х1 + a 12х1 +...+a 1nx1 = У1
(5.5)
2
n
a 0 + a 1Xn+ a 12Xn+ . . . + a 1nXn = Уn
Эта система однозначно р аз р е ш и м а , так как система
2
n
функций
1 ,х,х
х
линейно
независима
в
точках
х 0, х 1
х п. О днозначная разреш имость следует из того фак т а , что определитель этой системы (определитель В а н д е р м он д а)
n
Хг Хг
X
X
хя
X
X.
X
=
П
(Xi - Xj) * 0.
0<j <i<n
X
Без вывода приведем одну из форм записи интерполя
ционного м ногочлена Лагранжа
А, (х)= У0 •( (Х-Х1) - ( Х-Х") ,+
( Х0 - х1)...( Х0 - хп )
^ ( х -х 0 )(х-х 2 )...( х - х п) ,
( х - х 0 )...( Х-Хп-1 )
У1Э------- “ ------- ------------Т+-+ УП
(х - Х0 )( Х1- х2)...( Х1- X, )
(хп- Х0 )...( Хп- Хп-1)
(5.6)
57
О п р е д е л е н и е . Этот многочлен называется интерполя ционным многочленом Лагранж а и сокращенно записыва ется в виде
x )= »
(X~Xq )(x-x 1)... (X-Xj_ 1)(X-Xj+1)... (x~Xn)
(5
"
i=0 ' (xi_x )(xi- x 1)...(xi-Xi-1)(xi- x i+1)...(xi- x nУ
'
На практике часто пользуются линейной и квадратич ной и н тер п о л яц и ей . В этом случае формула Лагранж а и м е ет вид
(x-xq ) , (x-xq)
„
„
L 1(x )= y0----- 0—+y1------ 0--- при линейной и н тер п о л я ц и и ;
(XQ-X1) (X1-XQ)
г
.
(x_X1)(x_x2)
(x_x0)(x_x2)
(x-xq Xx-x,)
L 2 (x )= y0—— —— ——by-^ — — — — +y9—— — — — - при квадра (xq- x )(xq- x2) (X1-X0)(X1-X2) (X2-X0)(X2-X1)
тичной и н тер п о л яц и и .
Рассмотрим теперь случай с равноотстоящ им и узлами.
Тогда интерполяционная формула Лагранж а заметно упро щ а е т с я . В этом случае шаг h = xi+1-х , = const. Введем в рас смотрение многочлен вида
Q (x) (х-хЬ)(х~х1)...(х~Х~1)...(х~х")
' (х, ~Х))(х1- х1)...(х, -xi-1)...(xi-x")'
X _ X0
Введем обозначение q =
h , отсюда с л ед у ет, что
x- xq= q •h ,
x _ x = q •h —h = h •(q —1),
x Xi = q • h —i • h = h • (q —i),
x _ xn= q •h - n •h = h •(q - n).
Тогда м ногочлен Qi примет вид
Q (x) = q (q -1)•[q - (i-!)]•[q _ (i+ 1 ) ] - ( q - " ) •h"
(
i •h (i-1)-h... h ( - h )...[ - (n - i) •h ]
'
Произведя простейш ие преобразования, получим в ы р а­
жение в и д а :
58
Q (q)= q ■(q - 1)...(q - n ) ■(-1)n = ( 1)n-i C, q(q - 1)...(q - n)
Qi ( q ) (q - i) ■i!(n - i)!
= (-1) ■q - i ----------П---------где C ni - число сочетаний из n элементов по i C ni =
n!
i !(n - i)!
Тогда интерполяционны й многочлен Лагранжа для рав
ноотстоящ их узлов имеет вид:
L(x) = q(q - 1)^^-(q - n) ■]п0 ( - 1)п- 1 ■C
5.1.1
члена
. . у! .
Оценка погреш ности интерполяционного много -
Оценить погрешность интерполяционной формулы Л а ­
гранжа можно только тогда, когда известно аналитическое
выражение интерполируемой ф ун к ц и и , а т о ч н е е , если из вестно м аксимальное значение (п + 1 )-ой производной функ ции f ( x ) на отрезке [a,b ]. Пусть
IR n (х)I =1 f ( x ) - L n (х ) I,
где R n(х) - п о г р еш н о ст ь ;
f ( x ) - точное значение функции в точке х ;
L n(х) - приближенное з н а ч е н и е , полученное по полино му Л а г р а н ж а .
Если обозначить через M n+1= f (n+1)(£) = maх f (п+1)(х), где
xg[ a,b ]
£ g[ a,b ], причем х 0=а , х n= b , то
M n+1
(£ - X0 )(£ - х{)....(£ - Xn)
Rn (X) <
(n + 1)/
5.2 И н т е р п о л я ц и о н н ы е п о л и н о м ы Н ь ю т о н а
5.2.1
И нтерполяционны й многочлен Н ью тона для рав­
ноотстоящ их узлов
Вычисление значений функции для значений аргумента,
лежащ их в начале таблицы удобно проводить, пользуясь
первой интерполяционной формулой Н ь ю т о н а . Для этого
введем понятие конечной р а з н о с т и .
59
О п р е д е л е н и е . Конечной разностью перового порядка
называется разность между значениям и функции в с о сед ­
них узлах и н тер п о л я ц и и . Тогда конечные разности в точках
х 0,х 1>• ">х п-1
АУо = У1 _ Уо = f (x1) _ f (x0) = Af(х0) ,
АУ1 = У2 _ У1 = f (x2) _ f (x1) = Af (х1) ,
АУп—1 = У" _ У" —1 = f (x") _ f (x"—
1) = а /(х "—
1) .
Конечная разность второго
порядка имеет в и д :
2
А У, = а У;+1 -А У ;.
А" у , = А( А"-1 у , ) .
Рассмотрим некоторые свойства конечных р а з н о с т е й .
Вторая конечная разность в точке х ,
А У, =[f (Х;+1+AX) - f (X, +АХ) ] -[/ (Х;+1) - / (X, )] =
=f (Х;+2 ) - 2 'f (Х;+1)+f (Xi) = У;+2 _ 2 ^У,+1+ У,
А налогично третья конечная разность
А yi = yi+3_ 3^у,+2+ yi+1_ yi.
Общее выражение для конечной разности n - го порядка
имеет вид
A"yi = y"+i _ C"yn+i-1 +
yn+i-2 _ ...
K + (_ 1)"'C"my„+i_m + и - Х Т у ^
а в о о б щ е , конечная разность порядка m от конечной разно сти порядка n
A m(A "y)= Am+ny .
Конечные разности n - го порядка от многочлена степени
n - есть величины п о сто ян н ы е, а конечные разности n + 1 -го
порядка равны н у л ю .
60
Для вычисления значений функции в начале таблицы
требуется построить интерполяционны й многочлен степени
п та к о й , что выполнены условия интерполяции
Рп(Х0 ) = У0 >—>Рп(X ) = Уп.
В силу единственности м ногочлена степени п , п о строенного по п +1 значениям функции f ( x ) многочлен Рп(х), в
конечном счете, совпадает с многочленом Л агранж а. Н а й ­
дем этот многочлен в в и д е :
Р,(х) = О) + a ■(х - х ) + a (x - х)(х - х) +...+a,(x - Х0)...(х - Хп-1),
где а i(i= 0 ,1 ,
п ) - неизвестные к о э ф ф и ц и ен ты . Для н ах о ждения а 0 положим х = х - Тогда Р(х0) = a0, отсюда а 0=у0.
Для вычисления a1 рассмотрим первую конечную раз ность для многочлена Р п(х) в точке х .
АРп(х)=Рп(x+h)-Pn(х)=[a0 +a 1(х -х 0 +h)+...+an(х -х 0 +h>...
■...(х-Xn-1+h)]-[fl0 + ^ ( x-X0 )+...+an (х-Х0 )...(х-Хп-1)].
В результате п реобразований получим
АРп (х)=h a 1+2ha 2 (х - x0 )+...+n h a n (х - x0 )... (х -xn-1).
Вычислим первую конечную разность м ногочлена Р п(х)
в точке х 0
АРп(Х0 ) = a 1h , но АРп(Х0 ) = f (Х1) - f (Х0 ) = У1- У0 =АУ0 ’
АУо .
откуда a1 =~у°
Чтобы определить коэффициент а 2, составим конечную
разность второго порядка А Рп ( х ) = А Рп ( х + h ) - А Рп (х ). От А2
сюда после преобразования получим a 2 = — У2^. Вычисляя
2 !h
конечные разности более высоких порядков и полагая х=х 0,
придем к общей формуле для определения коэффициенki
т о в : ai = —У° (i= 0 , 1 , 2 , ,п ).
i i!hi
Подставим значения a i в м н о го ч л ен , в результате полу чим первую интерполяционную формулу Нью тона:
61
Первую интерполяционную формулу можно записать в
том в и д е , в котором ее удобнее использовать для интерпо лирования в начале т а б л и ц ы . Для этого введем переменную
q=(x-x 0 )/h , где h - шаг и н тер п о л и р о в ан и я . Тогда первая
формула примет вид
P"(x)= Уо+9'АУо 1q(q2, 1),а2Уо+...+
5.2.2 Вторая интерполяционная формула Н ью тона
Эта формула используется для интерполирования в
конце т а б л и ц ы . Построим и нтерполяционны й многочлен
вида
P"(x)=ao+a1(x-X" ^ ( x - X " )(x-x„~1)+...+an(x_Xn)...(x_X1).
Н еизвестные коэффициенты а0, а 1
чтобы были выполнены равенства
а п подберем т а к ,
Pn ( xo) = Уо> Pn (х 1)= Ур— Pn (xn ) = Уп
Для этого необходимо и д о с та то ч н о , чтобы
В сл у ч ае, если положить x = x n, то сразу определяется
коэффициент а 0
Pn(х) = Уп = a o.
Из выражения для первой конечной разности найдем a 1:
APn(x) = 1 •ha 1+ 2 •ha2(x - xn—
1) +... + n •h a n(x - x n—
1)(x - x n_2)...(x - x1).
О тсю д а, полагая х = х п-ь получим a 1 = Ay" 1. Из выражения
62
для второй конечной разности найдем а 2: a2 =
Д2
2
. Об -
д1
щая формула для коэффициента а i имеет вид at = —Уп - 1 .
i! h l
П одставим эти коэффициенты в формулу многочлена и
получим вторую интерполяционную формулу Н ь ю т о н а :
Р,,(х)=Уп+— П-1(х-Хп)+.. ++—У (х-хп)... (х-х1).
На практике используют формулу Нью тона в другом
в и д е . П оложим q =(х-хп)/h . Тогда
п/ ч
Л
q(q+ 1) л2
q(q+ 1)...(q+ п- 1)
Рп(х)= Уп+ q^n-1 + ^ г ^ а 2 Уп-2 +.. .^ ^
-------- —пУ0
2!
п!
5.3 И н т е р п о л и р о в а н и е с п л а й н а м и
М ногочлен Лагранж а или Нью тона на всем отрезке [a , b ]
с использованием большого числа узлов интерполирования
часто приводит к плохому п ри б л и ж ен и ю , что объясняется
накоплением погреш ностей в ходе в ы ч и сл ен и й . Кроме то го, из-за расходимости процесса интерполирования ув ел и ­
чение числа узлов не обязательно приводит к повышению
точности вычислений.
Поэтому построим такой вид приближ ения, который:
- позволяет получить ф ун к ц и ю , совпадающ ую с таб л и ч ной функцией в узлах;
- приближаю щ ая функция в узлах таблицы имеет н еп р е­
рывную производную до нужного п о р я д к а ;
В силу выш есказанного на практике весь отрезок [a,b ]
разбивается на частичные интервалы и на каждом из них
приближаю щ ая функция f ( x ) заменяется многочленом не высокой сте п е н и . Такая интерполяция называется кусочно полином иальной и н тер п о л яц и ей .
О п р е д е л е н и е . Сплайн - функцией называют кусочно полином иальную функцию, определенную на отрезке [a ,b ]
и имеющую на этом отрезке некоторое число непрерывных
производных.
63
Слово сплайн означает гибкую л и н е й к у , которую ис пользуют для проведения гладких кривых через оп р ед ел ен ­
ное число точек на п л о с к о с т и . П реимущ ество сплайнов сходимость и устойчивость процесса в ы ч и сл ен и я . Р ассм о т­
рим частный случай (часто используем ы й на п ракти к е), ко гда сплайн определяется многочленом третьей сте п е н и .
5.3.1 Построение кубического сплайна
Пусть на отрезке [a,b ] в узлах сетки заданы значения
некоторой
функции f ( x ),
т .е .
a = x0 < x1 < x2... < xn = b ,
Уi = f (x,) (i = 0 , 1 ,..., n ).
С п л а й н о м , соответствую щ им этим узлам функции f (x )
называется функция S (х), к о т о р а я :
1 ) на каждом частичном отрезке является многочленом
третьей сте п е н и ;
2 ) функция S (х ) и ее две первые производные
Sr(x), S*(x)
непрерывны на [a ,b ];
3) S (xi) = f (xi) .
На каждом частичном отрезке [xi-1,xi] будем искать
сплайн S(x) = Si (x) , где Si(x ) многочлен третьей степени
С
2
3
Si(x) = ai + bi( x _ xi) + у •(x_ xi) + y •(x_ xi) .
(5.8)
То есть для x e [x,- 1,xi] нужно построить такую функ цию S,(x), где a ,,b, , с, ,di подлежат о п р ед ел ен и ю . Для всего
отрезка интерполирования [a,b ], таким о б р азо м , необходи мо определить 4 п неизвестны х к о э ф ф и ц и ен та.
d
2
S (x )= bt + ct (x- х, ) + • ( x- х,) ,
S" (x ) = ct + d t (x - xt),
Si(x) = ai = Уi.
Д оопределим a 0 = f (x0 ) = Уо. Требование непреры вности
функции S (x) приводит к условия St (х, )= Si+1(xi),
(i= 0 , 1 , . , n - 1 ).
Отсюда из (5.8) получаем следующие у р а в н е н и я :
a = a+ 1+ bi+1(xi _ x+1) + с2 г(х, _ x+1)2 + d 6+1 (x _ x+1)3 (i= 1 ,2 ,. J" -1 ).
64
Введем шаг интерполирования ht = х , - х ,_j.
Тогда последнее равенство можно переписать в виде
h2
h3
h ■bi _ h r ' ci + ~T d i = f _ / i - i (i =
2
6
1 ,2
>--->n ).
Из непреры вности первой производной следует
h2
hi ‘ci _ ~ y ' di “ bi _ bi-1 (i= 2 ,3 ,...,n ),
а из непреры вности второй производной
hidi = c i - c t - 1 (i=2,3,..., n ).
Объединив все три вида у р а в н е н и й , получим систему из
3n -2 уравнений относительно 3n неизвестны х Ц,,c,,dt . Два
недостаю щ их уравнения п о л у ч и м , задав граничные условия
для функции S (x). Для этого воспользуемся граничными
условиям и для сплайн - функции в виде S"(a) = S"(b) = 0( концы
гибкой линейки свободны).
Тогда получим систему уравнений
hi 'd i = ci _ ci_1, c 0 = cn = 0,(<= 1-2 - - n )
h2
hi •c i _ - £ - ' d i = bi _ b#_i,( 1= 2 >3- - n)
h22
h3
h ,' b, _ ' c, +
' d, = f - f _i,(i = 1 , 2 ,..., n ).
2
( 5 -9)
6
Решая систему методом подстановки
(5.9) неизвестные bi,di), получим си с т е м у :
(исключаем
h c _1 + 2 (h(+ h M)-c(+ h Mcw = 6 ' ( ^ l A - A _ Z m ) , (i= 1,2 ,...,n)
из
(510)
c0 = cn= 0
Система (5.10) имеет трехдиагональную м а т р и ц у . Эта
система может быть решена методом прогонки или Г а у с с а .
Метод прогонки рассматривается в пункте 6.7.2.
После решения системы коэффициенты сплайна di?Ц
определим через коэффициенты с с помощью явных фор мул
65
d i = ci - ci-1
h
bt = h-L-c, - — •di + y i Ум
i 2 ' 6 '
hi
С ущ ествую т
(i = 1 , 2 ,..., n ).
с п е ц и а л ь н ы е в и д ы з а п и с и с п л а й н о в на ка -
ж д о м и з п р о м е ж у т к о в [ Xi , x i+ 1] [ 9 ] , к о т о р ы е п о з в о л я ю т
ум еньш ить число неизвестны х коэф ф ициентов сп лай н а.
Вводятся обозначения
S '( xi ) = mi , i = 0,1,...,n
hi = xi+i - x i
На отрезке
,
и t = ( x - x i )/h i .
[ x i , x i+1] к у б и ч е с к и й
сплайн записы вается в
виде
S (x) = y i (1 - 1 ) 2 ( 1 + 2t) + yi+i12(3- 2t) + m ih it(1 - 1 ) 2 - m i+it 2(1 + t)h iК у б и ч е с к и й с п л а й н , за п и с а н н ы й в так ом в и д е , на к а ж д о м
и з п р о м е ж у т к о в [ x i , x i+ 1] н е п р е р ы в е н в м е с т е с о с в о е й п е р в о й п р о и з в о д н о й н а [ a,b ].
Вы берем
mi таким
обр азом , чтобы и вторая производная
б ы л а н е п р е р ы в н а во в с е х в н у т р е н н и х у з л а х . О т с ю д а п о л у чим си стем у ур а в н ен и й :
X i m i _! + 2 m i + Ц i m i +! = 3 ( Ц i У‘+ 1
У‘ + X У'
h i-1
h i
hi -1
г д е ц i= --------------,
h i- 1+ hi
Xi
i
h
У1 - 1 ) ,
= 1 - ц i= ----- ,
i=
1,2,...,n - 1 .
hi-1 + hi
К э т и м у р а в н е н и я м д о б а в и м у р а в н е н и я , п о л у ч е н н ы е из
граничных условий
2 m 0 + m 1 = 3 У1 , У0 >
h0
m n -1 + 2m n = 3 J n
Jn -1 .
h n -1
В результате получаем аналогичную си стем у с т р ехд и аго­
нальной м атрицей. Реш аем систем у линейны х уравнений
относительно коэффициентов
5 .3 .2
mi
м етодом пргонки.
С ходим ость процесса интерполирования кубиче -
скими сплайнами
Д ок азы в ается , что при н еогр ан и ч ен н ом ув ел и ч ен и и
66
числа узлов на одном и том же отрезке [a ,b ] S(x) ^ f (x).
Оценка погреш ности интерполяции R(x) = f (x) - S (x) зависит
от выбора сетки и степени гладкости функции f( x ).
При равном ерной сетке
x = a + i •h (i= 0 , 1 ,..., n )
I ry , e f ^ M 4 • h 4
\f ( x >- Sh(x >
— .
о
где M 4 = max I f IV(x) I.
[a,b]
Другие постановки задачи интерполирования функций.
1. Если функция п ер и од и ч еская, то используется три гонометрическая интерполяция с периодом l , которая стро ится с помощью тригонометрического многочлена
'Г Г
Пkx— + bk sin. ——),
Пkx
Tn
(x \) = a 0 ++ 2W(a k cos —
k =1
l
l
коэффициенты которого находятся из системы уравнений
Tn (x) = f ( x ) (i= 1 , 2 , . , 2n +1).
2. В ы деляю т приближение функций рациональны ми,
дробно - рациональны ми и другими ф ун к ц и ям и . В данном
пособии эти вопросы не р а ссм ат р и в аю тся .
5.4 А п п р о к с и м а ц и я ф у н к ц и й м етод ом н а и м е н ь ш и х
квадратов
К такой задаче приходят при статистической обработке
эксперим ентальны х данных с помощью
регрессионного
ан а л и з а . Пусть в результате исследования некоторой вели чины x значениям x1,x2 ,x3,...,xn поставлены в соответствие
значения у 1,у 2,у 3,...,у п некоторой величины у .
Требуется подобрать вид ап проксим ирую щ ей зависимо сти y = f (x ), связы ваю щ ей переменные х и у . Здесь могут
иметь место следующие с л у ч а и . Во - п е р в ы х : значения
функции f ( x ) могут быть заданы в достаточно большом ко личестве у з л о в ; во - в т о р ы х : значения таблично заданной
функции отягощены п о гр еш н о ст я м и . Тогда проводить при ближения функции с помощью интерполяционного много члена нецелесообразно, т.к.
67
- число узлов велико и пришлось бы строить несколько
интерполяционны х м н о г о ч л ен о в ;
- построив интерполяционные м н о го ч л ен ы , мы повтори ли бы те же самые о ш и б к и , которые присущ и т а б л и ц е .
Будем искать приближаю щ ую функцию из следующих
соображений:
1 ) приближаю щ ая функция не проходит через узлы т а б ­
лицы и не повторяет ошибки табличной функции;
2 ) чтобы сумма квадратов отклонений приближаю щ ей
функции от таблично заданной в узлах таблицы была м и ­
н и м ал ь н о й .
отклонения
Рисунок 6 - Графическое изображение отклонений
приближ аю щ ей функции от таблично заданной
Рассмотрим линейную задачу наименьш их к в а д р а то в .
О п р е д е л е н и е . Уровень п о гр еш н о ст и , допускаем ы й при
снятии характеристики измеряемой величины, называется
шумом т а б л и ц ы .
Пусть функция y=/(x) задана таблицей приближенных
значений y г^f(xг•), i = 0 , 1 ,...,n, полученны х с ошибками
е( = yi _ yi > где yi = / 0 x0 .
Пусть даны функции %(x ),^1( x),..(f^Jsx), назовем их базис ными функциями.
Будем искать приближаю щ ую (аппроксимирую щ ую )
функцию в виде линейной комбинации базисных функций
у
68
= Фт(x) = c 0^ 0 (x ) + c 1^ 1(x ) + - + cmVm (x) .
(5Л1)
Такая аппроксимация называется л и н е й н о й , а Фт(х) обобщ енным м н о го ч л ен о м .
Будем определять коэффициенты обобщ енного много члена c 0,...,c m используя критерий метода наименьших
к в а д р ато в . Согласно этому критерию вычислим сумму
квадратов отклонений таблично заданной функции от и с комого многочлена в у з л а х :
п
о п
8m= Z (yi ~Фт(Х1)) = Z (y ~С0%(Х1)- - ~ Cm(Pm(Xi)) •
( 5 . 12)
г=0
i=0
Вы ражение для 8 m можно рассматривать как функцию
от неизвестны х с 0
cm. Нас и нтер е су ет, при каких з н а ч е ниях с 0
cm, значение 8 m будет м и н и м ал ь н о .
Для этого воспользуемся условием сущ ествования экс тремума ф у н к ц и и , а и м е н н о , найдем частные производные
от 8 m по всем переменным c 0
cm и приравняем их к ну л ю . Получим систему в и д а :
68
п
— Sm= - 2 Z (yi - c M ( xi) - ••• - cm9m (Xi )) •M (Xi ) = 0
dc0
i=0
.............................................................................................
n
-d Jm = - 2 Z (yi M cm
<=0
(5.13)
68
c 0^ 0 (Xi) -
••• - cmMm(Xi)) Mm (Xi) =
0
Система (5.13) - система линейны х уравнений относи тельно co,..., cm.
Чтобы систему (5.13) записать к ом п ак тн о , ведем опре деление.
О п р е д е л е н и е . Скалярным произведением функций f на
g на множестве точек x 0 ^••,Xn называется выражение
п
( f , g ) = Z f (Xi )• g (Xi ).
i=0
Тогда систему (5.13) можно записать в в и д е :
69
c<M >%) +
P
+ - + CmP ’Pm) = (P >y)
c0(<P1P ) + ^ ( P P ) + ■■■+ c„ ( p ,p „ ) = ( p ,y)
.
(5.13а)
[c0 (Pm.P0 ) + c1(P„.P 1) + ■■■+ cm(Pm’Pm) = (9 т,У)
Системы (5.13) или (5.13 а) будем называть нормальной
системой уравнений.
Решив е е , мы найдем коэффициенты c 0,...,c m и сл ед оват е л ь н о , найдем вид аппроксимирую щ его м н о го ч л ен а. На помним, что это возможно, если базисные функции л и н е й ­
но независимы , а все узлы различны.
Осталось определить степень многочлена m . Прямому
вычислению поддаются только значения ср ед н екв ад рати ч­
ного отклонения 8 m, анализируя которые будем выбирать
степень многочлена.
А лгоритм выбора степени многочлена m .
В сл у ч а е , когда m=n мы получим интерполяционны й
м н о го ч л ен , поэтому выберем m << n . Так же необходимо за дать числа £1 и £2, учитывая с л ед у ю щ ее:
1 ) £1 > 0 и £2>0 долж ны быть т а к и м и , чтобы 8 m находи лось между ними;
2 ) первоначально m выбирают произвольно, но у ч и т ы ­
вая у с л о в и е , что m << n ;
3) выбрав m , строят системы (5.13) и (5.13a), решив ко т о р ы е , находят c 0
cm;
4) используя найденные к о э ф ф и ц и ен ты , вычисляется 8 m и
п р о вер яет ся, попало ли оно в промежуток между £1 и £2.
Если п о п ал о , то степень м ногочлена выбрана п р ави л ьн о ,
иначе
а ) если 8 m> £ , то степень необходимо уменьш ить хо тя бы на единицу;
б ) если 8 m <£ 2 , то степень необходимо увеличить хотя
бы на е д и н и ц у .
5 ) затем строим приближаю щ ую функцию .
Очень часто для приближения по методу наименьших
квадратов используются алгебраические многочлены сте70
пени m<n, т .е . <pk(x) = Xk. Тогда нормальная система (5.13)
принимает следующ ий вид:
m п
п
Z ( Z xj+k) cj = Z y X , (k= 0 ,1 ,...,m).
(5.14)
j=0 i=0
i=0
Запишем систему (5.14) в развернутом виде в двух наи более простых случаях m = 1 и m = 2 .
В случае многочлена первой степени P 1(x) = c 0 + c 1X, нор мальная система имеет вид
п
п
(п + 1) c0 + ( Z Xi) c = Z yi
i =0
i =0
<
п
п
(5.15)
п
( Z x ) c0 + ( Z Xi ) c 1 = Z y X r
i=0
i=0
i=0
Для многочлена второй степени
нормальная система имеет вид
п
п
P 2 (x) = c 0 + c iX+c2x ,
п
(п + 1)c0 + ( Z xi)c1+ ( Z xi )c2 = Z yi
i=0
i=0
i=0
п
п
п3
п
( Z xi)c0 + ( Z xi )c1+ ( Z xi )c2 = Z ytxi .
i=0
i=0
i=0
i=0
п
п
п
(5.16)
п
( Z x2)c0 + ( Z x3)c1+ ( Z x4)c2 = Z yiX2
i=0
i=0
i=0
i=0
71
Ч и сленн ы е методы реш ения задачи Коши для
о б ы к н о в е н н ы х д и ф ф е р е н ц и а л ь н ы х у р а в н е н и й и си стем
диф ф еренциальны х уравнений
6
Будем рассматривать задачу Коши для системы обык новенных д иф ф еренциальны х уравнений (ОДУ). Запишем
систему в векторной форме
(6 . 1 )
г д е : и —искомая вектор - ф у н к ц и я ; t—независимая перемен н а я ; u(t) = ( u (t),■■■,Um(t)); f (t,u) = ( / 1,■■■,/„), m— порядок с и с т е м ы ; u1(t),■■■,um(t) - к о о р д и н а ты ; t> 0 ; u( 0 ) = u 0 .
Запишем систему (6.1) в развернутом виде
- i = / i (t,U1, : ; Um) ,
dt
(
6 .2 )
г д е : i = 1 ,...,m ; u,(0) = u0.
В случае i=1 - это будет ОДУ 1-го порядка, а при i=2 система из двух уравнений первого п о р я д к а .
В случае i=1 решение задачи Коши предполагает н а ­
хождение интегральной кривой, проходящ ей через з а д а н ­
ную точку и уд овлетворяю щ ую заданному начальному ус ловию.
Задача состоит в том, чтобы найти искомую векторфункцию и , уд овлетворяю щ ую ( 6 . 1 ) и заданным начальным
условиям.
Известны у с л о в и я , гарантирую щ ие сущ ествование и
единственность решения ( 6 . 1 ) или ( 6 . 2 ).
П р ед п о л о ж и м , что функции / (i= 1,
m ) непрерывны
по всем аргументам в некоторой замкнутой области
D ={ t < a,ui - u 0 < b }, где a,b —известные к о н с т а н ты .
Из непреры вности функций следует их ограниченность,
т.е. функции /i сверху ограничены некоторой константой
М: I / !<М (где М > 0) всюду в области D и пусть в области
72
D функции fi у д овлетворяю т условию Липшица по ар гу м ен там щ,..., um. Это з н а ч и т , что
\ f i (t,Uv ....,Um ) - f i (t,UV~ ;U"m)l < L( \Щ- u[\ + .... + \Um ~ U}n \ )
для любых двух точек ( t,uv ....,um) и (t,u1,...,u'm) из области
D . Тогда сущ ествует единственное решение задачи (6.1)
U1 = U1(t),...., Um = Um (t ) ,определенное при
t < T = mm{ a ,b /M }
(
6.3)
и принимающ ее при t= 0 заданные начальные з н а ч е н и я .
Сущ ествует два класса методов для решения задачи
( 6 . 1 ):
1) семейство однош аговы х методов (Рунге - К у тта);
2 ) семейство многош аговы х (m - ш аговы х) м е т о д о в .
Сначала рассмотрим однош аговы е м е т о д ы . Для просто ты возьмем одно уравнение
t
где:
u
= f ( t ’U)’
6.4)
(0) = U0; t >0.
По оси t введем равном ерную сетку с шагом т>0 , т .е .
рассмотрим систему точек сот= { t n = п •т,п = 0,1, 2,...}. Обо значим через u (t) точное решение (6.4) , а через yn = y(tn)
приближенные значения функций u в заданной системе то чек.
Приближенное решение является сеточной функцией,
т .е . определено только в точках сетки ют .
6.1 Семейство одношаговых методов решения задачи Коши
6.1.1 Метод Эйлера (частный случай метода Рунге-Кутта)
Уравнение (6.4) заменяется разностным уравнением
Уп+1
т
Уп = f ( t n>yn), п = ° 4 , 2 ,...,. y0 =
u0
73
В окончательной форме значения yn+1 можно определить
по явной формуле
Уп +1 = Уп + Т ' / ( t n , y n ) .
( 6 ' 5)
Вследствие систематического накопления ошибок метод
используется редко или используется только для оценки
вида интегральной к р и в о й .
О п р е д е л е н и е 1. Метод сходится к точному решению в
некоторой точке t , если yn - u(tn) ^ 0 , при т ^ 0 , tn _ t .
Метод сходится на интервале (0,t], если он сходится в
каждой точке этого и н те р в а л а .
О п р е д е л е н и е 2. Метод имеет р -й порядок т о ч н о сти ,
если
сущ ествует
такое
число
р > 0 , для
которого
yn - u(tn) = 0 ( т р), при т -^ 0 , г д е : т — шаг и н тегр и р о в ан и я; О
—малая величина порядка тр.
Так как Un±1— — = u \ tn) + О(т), то метод Эйлера имеет
т
первый порядок т о ч н о с т и .
Порядок точности разностного метода совпадает с по рядком аппроксим ации исходного диф ференциального
уравнения.
6.1.2 М етоды Рунге - Кутта
Метод Рунге-К утта второго порядка точности
О тличительная особенность методов Рунге-К утта от м е ­
тода (6.5) заключается в т о м , что значение правой части
уравнения вычисляется не только в точках сетки, но и т а к ­
же в середине отрезков(пром еж уточны х точках).
П редположим, что приближенное значение yn решения
задачи в точке t=tn уже и зв е с тн о . Для нахождения y n+ 1 по ступают следующим образом:
1) использую т схему Эйлера в таком виде
y n+1/ 2
0 ,5
74
yn
т
/(
)
~ Ktn,Jn)
(
6 .6 )
и отсюда вычисляю т промежуточное значение y n+1/2;
2 ) воспользуемся разностны м уравнением вида
Уп+1т Уп = f(tn ± 0,5 т ,У п+12),
6
7)(
откуда найдем значение y n+1. Далее подставим значение
Уп±1/2 = Уп ± 0, 5 тf n в уравнение (6.7). Тогда получим раз ностное уравнение
Уп+1 - Уп
= f (tn + 0 ,5 •Т,Уп ± 0 ,5 •т •f n) ,
(6 .8 )
т
гд е f n = f (П Уп) Можно п о к азать , что метод ( 6 . 8 ) имеет второй порядок
точности, т .е . yn - u(t) = O( t ).
Реализация метода ( 6 . 8 ) в виде двух этапов (6.6),(6.7)
называется методом предиктор - корректор (прогноза и кор рекции) в том с м ы сл е, что на первом этапе ( 6 .6 ) прибли женное значение предсказывается с невы сокой точностью
O (т), а на втором этапе (6.7) это предсказанное значение
исправляется и результирую щ ая погреш ность имеет второй
порядок O(т ).
Будем рассматривать явные м е т о д ы . Задаем числовые
коэффициенты a i, bij , i=2,...,m ; j = 1,2, m -1 и о i, i =1,2,...,m .
Последовательно вычисляем функции
k1 = f (tn,yn) ;
k2 = f (tn ± a 2т У ± b21т • k1) ;
k3 = f (tn ± a3т’ Уп ± Ь31т •k1 ± b32т • k2) ;
п
k n = Jf (t
y ± bmлт
Vn ± a nт’, Jn
1 • k 1 ± ... ± bmm—
1iт•k m—
1i).
/
y n±i----+1 —y пn_= m
Затем из формулы —
' k находим новое з н а _
7X'-i-i
т
i=1
чение yn±1= y (tn+1). Здесь at, b j , oi - числовые п ар ам етр ы , ко торые определяются или выбираются из соображений т о ч ­
ности в ы ч и сл ен и й . Чтобы это уравнение аппроксимировало
уравнение (6.4), необходимо потребовать выполнения ус 75
m
ловия ^ а = ' . При m = 1 получается метод Э й л ер а, при m =2
i=1
получаем семейство методов
т(° ' к' + а 2к2 ) >
(6.9)
где: ki = f (t„,y„ ) ; k2 = f ( t n + а 2 т- Уп + Ь21т k1 ) ; У о= И0 .
Семейство определяет явные методы Рунге - Кутта • Под ставив нужные а 1 и а 2, получаем окончательную ф о р м у л у .
Точность этих методов совпадает с точностью аппроксим и гу
рующего метода и равна O (т ).
Н е в я з к о й , или погреш ностью аппроксим ации метода
(6.9) называется величина
u
u
8n =
—---- + a 1f (tn,Un) + a 2f (tn + a2T>un + b21Tf (tn,Un)) >
т
полученная заменой в (6.9) приближенного решения точ ным р е ш е н и е м .
При а 1+а 2=1 получим первый порядок т о ч н о с т и . Если
же потребовать дополнительно ^2b21 = ° 2a 2 = 0,5, то получим
методы второго порядка точности вида
Уп+1 = Уп +
У = (1 _ a ) f ( t - , y -) + Of(t- + ат, у- + a r f ( t n,yn)) при о •а = °,5.
т
Приведем один из методов Рунге - Кутта третьего поряд ка точности
Уп+1
п
Уп+1 _ Уп = i(k ,
т
6
где: k, = f ( t-,yл);
k2 =
+ 4k2 + k3),
т т
f ( t - + - ,У + 2 k,) ;
п
kз = f (t- + Т , У п _ тк1 + 2тк 2 ) .
Метод Рунге - Кутта 4 - го порядка точности
где: ki = f (tn,y-);
Уп+' Уп= ' ( ki+ 2 •к 2 + 2 •кз+ к 4),
т
6
т
т
—,>У
у п+
+—— •к i);
к 2 = f ( t- + —
2 Уп 2
к з = f (tn + 2 > Уп+ 2 •к 2);
76
к 4 = f ( t- + т,Уп + т• к з)•
Методы Р у н ге -Кутта сходятся и порядок их точности
совпадает с порядком аппроксим ации разностным отноше нием.
Т е о р е м а . Пусть правая часть уравн ен ия (6.4) f ( t ,и )
уд овлет воряет условию Л ипш ица по аргум ент у u с кон стантой L, и пусть дп- невязка м ет о д а Рунге -К у т т а . То гда для погреш ност и м ет од а при п • т< T справедлива
оценка
yn - u (tn)
гд е :
< Te aT max
S1
a = oLm (1 ± Lbт)m 1 ; ' = max
; b = max bj
i,j
На практике обычно пользуются правилом Р у н г е . Для
этого сначала проводят вычисления с шагом т , затем - т/ 2 .
Если y l - решение при шаге т, а у2П2- при шаге т/ 2, p - по рядок точности м е то д а , то справедлива о ц е н к а .
y tn - u (tn) <
ПУ
у2 2
п
2p- 1
Тогда за оценку погреш ности для метода четвертого
порядка точности при шаге т/ 2 принимаю т величину
max
i
уп
- уХ
15
6.2
М н о г о ш а г о в ы е р а з н о с т н ы е м е т о д ы р е ш е н и я за дачи Коши для обы кновенны х диф ф ерен ци альны х
уравнений
Р ассмотрим задачу Коши для обыкновенного д и ф ф е ­
ренциального уравнения
d
= f(t,u),
(6 . 1 0 )
где u ( 0 ) = u 0 .
Для решения задачи Коши для уравнения (6.10) при t>0
введем равномерную сетку с постоянным шагом т
шт = { t n = п • т,п = 0 ,1 ,... } .
77
Введем понятие линейного m шагового разностного ме тода для решения задачи (6.10). Линейным т -шаговым раз ностным методом называется система разностны х уравне ний
a0Уп + а1yn- 1 + ••• + amy n- т _ b f , b f
, ,b f
(6 1 1 )
---------------------------------- _ U0Jn + blJn- 1 + - + bmJn- m,
( 6 -11)
T
г д е : n =m ,m + 1 ...; ak ,bk - числовые к о эф ф и ц и ен ты , не з а в и сящие от n; k= 0 , 1
m , причем а 0^ 0 .
Систему (6.11) будем рассм атривать как рекуррентные
со о тн о ш ен и я , выражающие новые значения yn _ y(tn) через
ранее найденные значения yn- 1, yn- 2,..., yn- m, причем расчет
начинают с индекса n = m , т . е . с уравнения
а 0ym + а 1уm-1 + - + am,y 0 _ b f + b f + + b f
—b0Jm^~b1Jm-1^~
bmJ 0.
T
Отсюда сл ед у ет, что для начала расчета по формулам
( 6 . 1 1 ) надо знать m преды дущ их значений функции у , при чем y 0 = u0 определяется исходной задачей (6.10). Эти п р едыдущие m значений могут быть найдены одним из од н о­
шаговых методов Рунге - К у т т а .
Отличие от однош аговы х методов состоит в том, что по
формулам ( 6 . 1 1 ) расчет ведется только в точках с е т к и .
О п р е д е л е н и е . Метод (6.11) называется я в н ы м , если ко эфф ициент b 0 = 0. Тогда значение y n легко выражается ч е рез yn- 1, yn- 2 ,...,yn- m. В противном случае метод называется
н е я в н ы м , и для нахождения y n придется решать нелиней ное уравнение вида
a
m
a
- Уп - b f (tn,yn ) _ Z ( bktn_k - ^ Уп- k) .
(6 . 1 2 )
T
k _1
T
Обычно это уравнение реш аю т методом Н ью тона при
начальном значении уП0) _ Уп- 1 . К оэфф ициенты уравнения
( 6 . 1 1 ) определены с точностью до м н о ж и тел я, т о г д а , чтобы
m
устранить этот п р о и зв о л , вводят условие Z bk _ 1 , с тем ус k _0
л о в и е м , что правая часть ( 6 . 1 1 ) аппроксим ирует правую
часть диф ференциального уравнения ( 6 . 1 0 ).
78
На практике использую т частный случай методов
(6.11), т .н . методы А д а м с а , когда производная u(t) ап п р о к симируется разностны м о тн о ш ен и ем , вклю чаю щ им две со седние точки tn и tn-1. Тогда a 0 = —ai = 1; ak = 0 , k=2,...,m и
v —V 1 m
y ^ Jn—
L = £ bkfn—k .
(6.13)
T
k=0
Это и есть методы А д а м с а . При b 0=0 метод будет яв н ы м , в противном случае - н е я в н ы м .
6.2.1 Задача подбора числовы х коэффициентов ак , bк
В ы я с н и м , как влияют коэффициенты ak, bk на п о гр еш ность аппроксим ации уравнения ( 6 . 1 1 ), на устойчивость и
с х о д и м о сть .
О п р е д е л е н и е . Н е в я з к о й , или погрешностью ап п р ок си ­
мации методов ( 6 . 1 1 ) называется функция
та
m
rn = —£ — un—k + £ bk f (tn—k , un—k ) ,
(6.14)
k =0 T
k =0
которая получается в результате подстановки точного р е ­
шения u (t) диф ференциального уравнения ( 6 . 1 0 ) в разност ное уравнение ( 6 . 1 1 ) .
Если разложить функции un—k = u(tn —k т) в ряд Тейлора
в точках t = tn равном ерной сетки, окончательно получим
функцию
та
pm
k
u(l)(t )
rn = —( £ - )u(tn) + £ ( £ (—kT)1—
1(ak - + bk)) — ■ + 0 ( t p). (6.15)
k=0 T
l=1 k=0
1
(l —1)!
Из вида функции rn с л ед у ет, что порядок ап п р о к си м ации будет равен p , если выполнены условия
m
£ ak = °k=0
£ kl—1(kak + lbk) = 0 ;
k=0
m
£ bk = 1,
k=0
)
(6 . 16)
где l = 1 ,...,p .
79
Условия (6.16) представляю т собой систему линейных
уравнений из р + 2 уравнений относительно неизвестных
a0,...,a m, b0,...,Ьт . Их количество равно 2 (т +1). Решив с и с тему (6.16), получаем неизвестные числовые коэффициен т ы . Для неявных т - шаговых методов наивысшим достиж и мым порядком аппроксимации будет р = 2 т , а для явных р =2 т - 1 .
Запишем систему (6.16) для методов Адамса
т
I ■у к 1- \ = 1;
k='
т
(6.17)
bo = 1 - у Ьк,
к=1
где 1=2,...,р . Отсюда в и д н о , что наивысш ий порядок ап ­
проксимации для неявного т - шагового метода Адамса
р =т + 1 , для явного (b 0= 0 ) - р =т .
6.2.2
Устойчивость и сходимость многош аговы х разно стных методов
Наряду с системами уравнений (6.11) будем рассматри вать т.н. однородные разностные уравнения вида
a0Vn + a 1Vn-1 + ••• + amVn-m =
(6.18)
где п =т,т + 1 ,... .
Будем искать его решение в виде функции
Vn = q n ,
где q - ч и с л о , подлежащ ее о п р ед ел ен и ю .Подставив Vn в
(6.18) получаем уравнение для нахождения q
ao q rn + a l q m 1 +... + a ^ 1 q + am = 0 .
(6.19)
Уравнение (6.19) принято называть характеристическим
уравнением для разностны х методов (6.11). Г о в о р я т , что
разностны й метод ( 6 . 1 1 ) удовлетворяет условию к о р н е й ,
если все корни уравнения (6.19) q 1, ..., qm лежат внутри или
на границе единичного круга ком плексной п л о ск о сти , при чем на границе нет кратных к о р н е й .
Разностный метод (6.11), у довлетворяю щ и й условию
корней, называется устойчивым методом.
80
Т е о р е м а . Пусть р а зн о ст н ы й метод (6.11) удовлет вори df (t,u)
ет условию корней и выполнено условие
< L при
du
0 < t < T . Тогда при m •T< tn = n •T< T , n>m и достаточно
малы х Т будет выполнена оценка
\Уп - u(tn )| < M (п
max Vk |),
(v6 . 2 0 ) '
-j <m-1 У] - u(tj ) + 0<k<n-m
0<
<max
г д е : rk- погреш ность а п п р окси м ац ии; y j - u(t j ) - п о гр е ш ность в зад ан и и начальных у с л о в и й ; M - конст ант а , зави сящая от L ,T и не зависящ ая от n.
Методы Адамса у д овлетворяю т условию к о р н е й , т .к .
для них a 0 = -a 1 = 1 , сл ед о ват ел ь н о , q = q 1 = 1 .
6.2.3 П римеры m - шаговых разностны х методов Адамса
Явные м е т о д ы . При m= 1 порядок точности р = 1. Тогда
метод описывается формулой
Уп - Уп-1 = ,
J n-1 .
Т
В этом случае получаем метод Э й л ер а. При m = 2 поря док точности р = 2. Тогда метод описывается формулой
y n y n-1 = 3 f
_1 f
rn j п-1 г\ j п- 2 .
Т
2
2
При m = 3 порядок точности р = 3. Тогда метод описыва ется формулой
Уп^ Уп-1 = -1 (23 fn-, - 1 6 fn - 2 + 5fn _3 ).
т
12
При m = 4 порядок точности р =4. Метод описывается
формулой
Уп ~ Уп-1 = ^ ( 5 5 fn -1 - 59 fn - 2 + 37 f n -3 - 9 f n - 4 ).
Т
24
Неявные m - шаговые методы А д а м с а :
Л
У п
У п-1
1//'|/'Ч
m= 1, р = 2, ------------- = —( J n + J n
Т
2
m = 2, р = 3, Уп ~ Уп-1 = 4 ( 5 f
Т
12
n
- 1
«
->
) - метод т р а п е ц и й ;
+8 f n
- f n - 2 );
81
т = 3, р = 4, Уn
Уп-1 = -1 (9fn
T
24
Неявные методы содержат
нейным образом, поэтому для
итерационные методы решения
+19 fn -1 - 5fn-2 + /,,-з).
искомое значение y n н ел и его нахождения применяют
нелинейных уравнений.
6.3
Численное
интегрирование
жестких
обыкновенны х диф ф еренциальны х уравнений
си стем
Ж есткие системы можно сравнить с плохо обусловлен ными системами алгебраических уравнений.
Рассмотрим систему диф ф ерен ци альны х уравнений(Д У )
du = f f t u )
(6
dt
f
uЛ
.2 1 )
где u(0) = u0. Для решения (6.21) рассмотрим разностные
методы вида
1 m
m
-■ У ak ■У„-к = У Ьк ■/ ( tn-k’yn-к ),
( 6 .2 2 )
т к=0
к=0
где n= m, m + 1 , m + 2 , __
Устойчивость и сходимость методов (6.22) о п редел яет­
ся располож ением корней характеристического уравнения,
т . е . Iq I< 1 - корни п ринадлеж ат единичному к р у г у .
Среди методов (6.22) выделим т е , которые позволяют
получить асим птотически устойчивые р е ш е н и я .
П р и м е р . В качестве частного случая (6.21) рассмотрим
уравнение вида
— = X ■и ,
(6.23)
dt
г д е : u(0) = u0 ; X<0; u(t) = u0elt - решение Д У . При X <0 ре шение есть монотонно убываю щ ая функция при t ^
Для
этого решения можно записать при любом шаге т > 0
u(t + т) < u(t)
что означает устойчивость решения u (t).
Рассмотрим для задачи (6.23) метод Эйлера
82
(6
.24)
г д е : п = 0 , 1 ,2 ,
Уп+1 Уп Т,
------------- = к- Уп ,
т
уп+1 = q • уп, q - промеж уточны й п а р ам етр ,
равный 1 + г к .
Оценка (6.24) для метода Эйлера будет выполнена тогда
и только т о г д а , когда Iq I<1. Шаг т лежит в интервале 0 < Т
< 2/ к . Метод Эйлера для задачи (6.23) устойчив при вы полнении этого условия.
О п р е д е л е н и е 1. Разностный метод (6.22) называется
абсолютно у с т о й ч и в ы м , если он устойчив при любом Т > 0 .
О п р е д е л е н и е 2. Разностный метод называется условно
устойчивым, если он устойчив при некоторых о г ран и чен и ­
ях на шаг т.
Н ап р и м ер , метод Эйлера для (6.23) условно у с т о й ч и в ,
при 0 < Т < 2/ к | . П римером абсолютно устойчивого м ето w
r~\ W
да является неявный метод Эйлера
т .к . в этом случае q
Уп+1 - Уп _
= к • Уп+1 >
т
(1 - к т ) -1 < 1, при любых Т>0.
З а м е ч а н и е . Условная устойчивость является н ед о ст ат­
ком явных методов в связи с тем, что приходится выбирать
мелкий шаг интегрирования.
Пример для задачи (6.23). Если к = -2 0 0 , тогда Т < 0.01.
Если мы рассмотрим интервал (0,1], то необходимо будет
100 ш а го в . Неявные методы со своей стороны приводят к
решению на каждом шаге нелинейного уравнения, но это
уже недостаток неявного метода.
6.3.1 Понятие ж есткой системы ОДУ
З а м е ч а н и е . Все выш ерассм отренны е методы легко р е а ­
лизуются на примере одного уравнения и легко п ерен осят­
ся на системы ДУ, но при реш ении систем возникаю т д о ­
полнительные трудности, связанные с разном асш табностью
описанных п р о ц есс о в .
Р ассмотрим пример системы двух уравнений:
83
d u1
+ $1 • u 1 = 0
dt
du 2
+ a 2 •u 2 = 0
dt
г д е : t > 0 ; a ь a 2> 0 .
Эта система однородны х независим ы х ДУ имеет реше
ние
u 1(t) = u 1( 0 ) •e a t
u 2 (t) = u 2 ( 0 ) •e
a2
t
Это решение монотонно убы вает с ростом t . Пусть ко эфф ициент а 2 на порядок больше а ь т .е . а 2>>a 1. В этом
случае компонента u 2 затухает гораздо быстрее u ь и т о г д а ,
начиная с некоторого момента времени t , решение задачи
u (t) почти полностью будет определяться поведением ком поненты u 1. Однако при численном реш ении данной задачи
шаг интегрирования т будет о п р ед ел ять ся, как п р ави л о ,
компонентой u 2 , не сущ ественной с точки зрения поведения
решения системы. Рассмотрим метод Эйлера для решения
данной системы
u1n+1) - u(n)
1— +a 1 •u1n) = 0
u(n+1) - u(n)
u
+ a 2 •u2n) = 0
т
Он будет у с т о й ч и в , если на шаг т наложены о г ран и чения
т• a1 < 2
т• a 2 < 2 ’
У ч и ты в ая , что a 2 > > a 1 >0, получаем окончательное о г ­
раничение на т
т<
2
an
Такие трудности могут возникнуть при реш ении любых
систем О Д У .
Рассмотрим в качестве примера систему
84
du
— - A •u ,
dt
(6.25)
где А - квадратная матрица m * m .
Если матрица А имеет большой разброс собственных
ч и с е л , то возникают проблемы с разном асш табностью опи сываемых системой процессов.
Д о п у сти м , что матрица А постоянна (т .е . не зависит от
t). Тогда система (6.21) будет называться ж е с т к о й , е с л и :
1 ) вещественные части собственны х чисел Лк < 0 для
всех к , где к = 1 , _ , m ;
max I Re к к I
1<
к <m
велико (десятки и сотни), и
2) число S - 1<к<m
min I Re к к I
1<к <m
число S называется числом ж есткости с и с т е м ы .
Если же матрица А зависит от t , то и собственные числа
зависят от t и к к зависят от t .
Решение жесткой системы (6.25) содержит как быстро
убываю щ ие, так и медленно убываю щ ие составляющие.
Начиная с некоторого t >0 решение системы определяется
медленно убы ваю щ ей составляющей. При использовании
явных разностны х методов быстро убывающ ая со ста вл яю ­
щая отрицательно влияет на у ст о й ч и в о с т ь , поэтому п р и х о дится брать шаг интегрирования Т слишком мелким.
6.3.2
Н екоторые сведения о других методах решения
жестких систем
На практике разностные методы (6.22) для решения же стких систем используются в виде методов Гира (неявный
разностны й метод) и метода матричной экспоненты (метод
Р ак и тского).
6.3.2.1 М етоды Гира
Это частный случай методов (6.22), когда коэффициент
b 0 = 1, b - b - ...= bm - 0. Запишем числовые к оэф ф и ц и ен ты ,
85
которые определяются из условия p -го порядка точности
аппроксим ации системы разностны ми методами
m
a0 = -
Z
m
ak ;
k=1
m
o,
k ■ak = - 1 ; Z k 1 ■aak = 0,
k=1
k=1
Z
(6.26)
где 1= 2 ,...,p .
Решив систему линейных уравнений (6.26) с учетом
преды дущ их у с л о в и й , получаем все нужные к о э ф ф и ц и ен ты .
Г|1
*_/
1'
/
*_/
*_/
Трехшаговый метод 1 ира (частный случай методов
( 6 . 2 2 ) с учетом условий (6.26)) имеет вид
11
— Уп 6
3 Уп- 1 +
3
1
- Уп- 2 - - Уп- 3 = Т ■f (tn . Уп ).
2
3
( 6 -27)
Метод имеет третий порядок т о ч н о с т и .
При m =4, получаем четы рехш аговы й метод Гира
25
■Уп -
48
■Уп- 1 + 3 6 ■Уп- 2 12 ■т
16
■Уп-3 -
3
• Уп-4 =
(6.28)
= f ((,,.Уп ).
Запишем систему (6.26) в виде
а 1 + 2 ■a 2 + .... + m ■am = - 1
а 1 + 2 2 ■a 2 + .... + m2 ■am = 0
(6.29)
a 1 + 2 m ■a 2 + .... + mm ■am = 0
Решив (6.29) для каждого случая можем найти коэффи циенты ak, k = 1 , 2 ,
т.
Чисто неявные разностные методы обладают хорош ими
свойствами у с то й ч и в о с ти , поэтому используются для ре шения жестких систем уравнений.
86
6.3.2.2
Метод Ракитского (матричной эк сп о н ен т ы ) ре шения систем ОДУ
du
* =A u,
(6
.30)
г д е : u - (u x,..., u n ) ; u(0) - u 0 ; А - матрица размерности n * n .
Д о п у сти м , что матрица А - п о сто ян н ая, т .е . ее элементы
не зависят от в р е м е н и . Система (6.30) - о д н о р о д н а я, с по стоянны ми коэф ф ициентам и. Запишем аналитическое ре­
шение (6.30)
u - eA t •u0,
(6.31)
где e At - матричная экспонента и
A^
.
(A •t ) 2
(A •t)n
eA - E + A •t + - ---- —+...+ ---- —+ _ .
2!
n!
(6.32)
Проинтегрируем уравнение (6.30) при значениях t=T, 2т,
3т,_ .
Если точно знать матрицу eA-т, то точное решение в
указанны х точках можно получить по формуле (6.31 ), т.е.
решение можно записать
u I, = , - e A- т •u 0 ;
u | t- 2, - eA- T•u x - '
Таким образом, задача сводится к тому, чтобы д о с т а ­
точно точно знать матрицу eA-T. На практике поступают
следующ им образом: при больш их т нельзя восп о л ь зо в ать ­
ся рядом Тейлора в связи с его бесконечностью, т.е. для
у довлетворительн ой точности пришлось бы взять много
членов р я д а , что т р у д н о . Поэтому поступают т а к : отрезок
[0 ,Т разбиваю т на к ч а с т е й , чтобы длина h =т/к у д о в л е т в о ряла условию IIA•h ll<0.1. Тогда запишем по схеме Горнера
T
ah ^
а
^ A •h , ^ A •h _ A -h
eA-h - E + A -h ( E + ------ ( E + ----- ( E + ---2
3
4
87
Каждый столбец матрицы e A'hмуле
w j вычисляю т по фор -
где w 0 - вектор сто л б ец , в i-ой строке которого
1,
а в ос -
тальных - н у л и .
Если эта матрица н ай д ен а, то решение находится по
(6.31).
Для исследования разностны х методов при реш ении же стких систем рассм атриваю т модельное уравнение
f
= Я■и,
(6 .33)
где А- произвольное комплексное ч и с л о .
Для т о г о , чтобы уравнение (6.33) моделировало и сх о д ную систему (6.30) его нужно рассматривать при таких
значениях А, которые являются собственны ми числами
матрицы А . М ногош аговы е разностные методы (6.31) име ют вид
m
Z ( a k - И ■bk ) ' Уп- k ,
(6.34)
k=0
г д е : n = m, m + 1 _ ; ju=vА .
Если решение уравнения (6.34) искать в виде Уп = q n ,
то для нахождения числа q получим характеристическое
уравнение вида
m
,
Z (ak - И ■bk) ■qm- = 0 .
k=0
Для устойчивости метода достаточно выполнения усло вия корней \q k\ < 1. В случае ж естких систем используются
более узкие определения устойчивости.
П редварительны е свед ени я. Областью устойчивости
разностны х методов называется множество всех точек ком плексной плоскости ц=т-А, для которых разностны й метод
применительно к уравнению (6.33) у с т о й ч и в .
О п р е д е л е н и е 1. Р азностный метод называется А у с т о й ч и в ы м , если область его устойчивости содержит ле вую полуплоскость Re^<0.
88
З а м е ч а н и е . Решение модельного уравнения (6.33)
асим птотически устойчиво при значениях R e ^ < 0 , поэтому
сущность А - устойчивого метода заключается в т о м , что А устойчивы й разностны й метод является абсолютно у с т о й ­
ч и в ы м , если устойчиво решение исходного д и ф ф ер ен ц и ­
ального у р а в н е н и я .
Так как класс А - устойчивы х методов у з о к , то пользуют ся А (а )-у сто й ч и в ы м м е т о д о м .
О п р е д е л е н и е 2. Разностный метод (6.31) называется
А ( а ) - у с т о й ч и в ы м , если область его устой чивости содержит
угол меньш ий а, т . е . Iarg ( - ^ ) 1< а , где ju-тЯ.
Исходя из э т о г о , оп р ед ел яетс я, что при а - 9 0 ° - п / 2
А (п/2) устойчивость
совпадает
с
определением
Аустойчивого метода.
6.4
К раевы е задачи для обы кновенны х дифференци альны х уравнений
Постановка краевой з а д а ч и .
Рассм атриваем диф ференциальное уравнение порядка n
(п> 2 )
у (п) - f (x,у,у',...,у<п- 1)).
(6.35)
Если сделаем замену переменны х вида
У0 - Ур
у( - У2>'
(6
Уп-1 - f ( x , y1
Уп-1 )>'
(к)
Ук( х0) - У0
.36)
г д е : Ук(-Х)) - У0к) ; к = 0 , 1 , _ , ( п -1), то задача (6.35) сводится к
задаче Коши для нормальной системы ОДУ порядка п .
Типовые примеры краевых з а д а ч .
Рассмотрим диф ференциальное уравнение
F (x, У, у',..., у (п)) -
0
.
(6 .37)
89
Для уравнения (6.37) краевая задача формулируется
следующим о б р а зо м : найти решение у =у (х ), у д о в л е т в о ряющее уравнению (6.37), для которой значения ее произ водных в заданной системе точек x = xi у д овлетворяю т п
независимым краевым условиям, в общем виде н ели н ей ­
н ы м . Эти краевые условия связывают значения искомой
функции У и ее производны х до (п -1) порядка на границах
заданного о т р е з к а .
Рисунок 7 - Краевые усло вия для случая 1
1 . Рассмотрим у р а в н е ­
ние
второго
порядка
y ' = f (x, y , у '). Н ео б х о д и мо найти решение у р а в нения, удовлетворяю щ ее
заданным краевым у с л о в и я м : y (a ) = A, y (b ) = B, т . е .
необходимо найти инте гральную к р и в у ю , прохо дящую через две заданные точки (рисунок 7).
2.
ние y * = f (x, y , у ') с краевыми условиям и y'(a) = А1,
у \ Ь ) = В 1.
Из графика на ри сунке 8 видно, что
tg ( а ) = А ь
tg (в)=Вх.
Здесь и н теграль­
ная кривая п ер есек а­
ет прямые x=a и x=b
под заданным и у г л а ­
ми а и в соо тв етственно.
Рисунок 8 - Краевые условия
для случая 2
90
3. Смешанная краевая задача вклю чает оба сл у ч ая .
Рассматривается то же самое уравнение у// = f (х, у, у '),
но с краевыми условиям и у (a ) =A1, у (b ) =B 1 .
Геометрическую иллюстрацию этих краевых условий
легко п р ед ст ав и ть , используя рисунки 7 и 8 .
З а м е ч а н и е . Краевая задача для уравнения (6.37) в об щем случае может не иметь р е ш е н и й , иметь единственное
р е ш е н и е , иметь несколько реш ений или бесконечное мно жество р е ш е н и й .
4. Поражение заданной цели баллистическим с н ар я д о м .
Д иф ференциальны е уравнения движения снаряда с учетом
сопротивления воздуха имеют вид
х = - Е cos 0
у = - E sin 0 - g ’
г д е : х - вторая производная по в р е м е н и ; Е=Е(у,х) - и зв естная функция высоты и ск о р о с т и ; v = X2+у2 ; g=g(y) - у с к о р е ние силы т я ж е с т и ; 0 - угол наклона к горизонту касател ь ной к траектории движения сн а р я д а ; 0 = arctg у
х
П редполагая, что при
t = t 0 снаряд выпущ ен из
точки, совпадаю щ ей с
началом координат с н а­
чальной скоростью v 0 под
углом
0 О , а в момент
t=ti он поразит н еп о д ­
вижную мишень в точке
M (х 1, у 1) получаем крае вые условия
Рисунок 9 - Траектория сна ряда
х = 0,
у = О,
X = v0cos0o,
х = х1,
у = v0sin0o, при t = t0,
у = у 1, при t = tj.
91
Здесь неизвестны значения 0 0 и t ь Решив данную крае вую з а д а ч у , можем найти начальный угол &0 = arctg— , г д е :
x0
x 0 = x(t 0 ); y 0 = y(t 0 ); 0 0 - у г о л , при котором поражается цель
в точке M.
А налогично ставятся краевые задачи для систем диффе ренциальны х уравнений.
6.5 Р е ш е н и е л и н е й н о й к р а е в о й з а д а ч и
Рассмотрим важный частный случай решения краевой
задачи, когда диф ф еренциальное уравнение и краевые у с ­
ловия линейны.
Для этого рассмотрим уравнение
Р0 (x) ■У(п) (x) + Р 1 (x) ■У(п-1) (x) +... + Рп (x) ■У(x) = f (x),
(6 3 8 )
г д е : pi(x) и f ( x ) известные непрерывные функции на отрез ке [a , b ].
П редположим, что в краевые условия входят две а б с ­
циссы x=a, x = b . Это двухточечные краевые за д а ч и . Крае вые условия называются линейными, если они имеют вид
Rv (У) = П а ^ ■У(kV ) + в ■y tk4b))=Y,
(6.39)
k=0
г д е : а , p, у - заданные к о н с т а н ты . Причем они о д н о в р еменно не равны нулю, т.е.
п—
1
Z [I а р{ I + IAkV)|] ^ 0 , при v= 1 , 2 , _ , п .
k=0
Например, краевые условия во всех трех рассмотренны х
ранее задачах л и н е й н ы , т .к . их можно записать в виде
а0 ■y (a ) + а1 ■y \ a ) = у 1
в 0 ■У(b ) + Р \ ■У/(b ) = Y2 ,
причема = 1,а = 0, у1= A, в 0 = 1, в = 0, у2= 5 - для первой задачи.
92
Решение двухточечной краевой задачи для линейного
уравнения второго порядка сведением к задаче Коши
6 .6
Запишем линейное уравнение второго порядка в виде
у " + p (х )• у ' + q (х )• у = f (х ),
(6.40)
г д е : p, q, f - известные непрерывные функции на некотором
отрезке [ a , b ].
Требуется найти решение уравнения (6.40), у д о в л е т в о ряющее заданным краевым условиям
а0 • у(a ) + а • у '(a ) = A,
00 • у (b) + 01 • у '(b) = B.
( 6 '41)
Причем константы а и в одновременно не равны нулю
\а0\ + |а1| Ф0 ,
|Д)| + 1в 1 Ф0.
Решение задачи (6.40), (6.41) будем искать в виде ли нейной комбинации
у= Си+У,
где С - к о н ст ан та, и - общее решение соответствующего
однородного уравнения
и "+ p (х) • и ' + q(х) • и = 0 ,
(6.42)
а У- некоторое частное решение неоднородного уравнения
У" + Р(х) •У' + q(х) •У = f (х ) .
(6.43)
Потребуем ,чтобы первое краевое условие было вы п о л ­
нено при любом С,
С а • u(a) + а 1 • и' (a)) + ( а 0 •У (a) + а 1 •У ' (a)) = A ,
откуда сл ед у ет, что а 0 • и (a) + а 1 • и \ a ) = 0 ,
а 0 •У (a) + a i •У \ a ) = A .
Тогда
и( a ) = алк
и 7( a )! = - аа 0кк ,
(6.44)
где к - некоторая к о н ст ан та, не равная н у л ю .
Значение функции У и ее производная в точке а могут
быть, наприм ер,вы браны равными
93
V (a) = А /а 0
V'(a) = 0 ,
(6 -45)
если коэффициент a 0* 0 и
V (a) = 0
V '(a) = A a , ’
(6 ' 46)
если коэффициент a 1* 0 .
Из этих рассуж дений сл ед у ет, что функция и - есть ре шение задачи Коши для однородного уравнения (6.42) с
начальными условиям и (6.44), а функция V - есть решение
задачи Коши для неоднородного уравнения (6.43) сн ач ал ь ­
ными условиям и (6.45) или (6.46) в зависимости от усло в и й . Константу C надо подобрать т а к , чтобы выполнялись
условия (6.41) (вторая стр о ч к а) в точке x=b
C(P0 ■u(b) + в ■и '(b)) + в ■V(b) + в ■V '(b) = в .
Отсюда сл ед у ет, что
C = в - (в,, ■V (b) + в ■V/(b)
в,) ■и(b) + Р 1 ■и'(b) ’
где знам енатель не должен быть равен нулю, т. е.
в
■u ( b ) + в 1 ■и \ b ) * 0 .
(6.47)
Если условие (6.47) в ы п о л н ен о , то краевая задача
(6.35), (6.36) имеет единственное р е ш е н и е . Если же (6.47)
не в ы п о л н яется , то краевая задача (6.35), (6.36) либо не
имеет решения, либо имеет бесконечное множество реш е­
ний.
0
6.7
М етоды численного реш ения двухточечной крае вой з а д а ч и д л я л и н е й н о г о у р а в н е н и я в т о р о г о п о р я д к а
6.7.1 Метод конечных разностей
Рассмотрим линейное диф ференциальное уравнение
у " + Р (x)
94
■y' + q (x) ■y = f (x)
(6.48)
с двухточечн ы м и краевыми условиям и
а 0 у (a) + a j у '(a) = A
P
( |a
0 у (b)
01 + |a i | Ф
+ Pi у \b ) = B ;
0,
p 01 + p i | Ф
(6.49)
0),
где: p, q, f - известные непрерывные функции на некотором
отрезке [a , b ].
Одним из наиболее
простых методов решения
этой
краевой задачи
является сведение ее ксистеме к о н еч н о разностны х уравнений.
Основной отрезок [a ,b ] делим на n равных частей с ш а ­
гом h = (b-a ) /n , то есть рассматриваем равномерную сетку
х1 = х0 + i •h , i= 0 , 1 ,..., n .
В каждом внутреннем узле диф ференциальное уравне ние (6.48) ап п р о к си м и р у ем , используя формулы численно го диф ф еренцирования второго порядка точности
' = У i+1 - Zj -1 .
уi
2 •h
’
у" = yуi+2 - 22 • yуl + yуi+1
у i
h2
’
(6.50)
где i = 1 ,..., n - 1 .
Для граничных точек х0 = a и хп = b , чтобы не выходить
за границы отрезка,
используем
формулы численного
диф ф еренцирования первого порядка точности
у = ZL—Zo, у' =
J0
h
уn
Уп-1
- h
Уп.
(6.51)
Используя отношение (6.50) исходное диф ференциаль ное
уравнение
(6.48)
аппроксимируем
конечно разностны ми уравнениями
yi+1- 2 • yi + yi- 1 , p yi+1 - yi- 1 , q y = f
h2
+ Pi
Th
+ ^ У‘ =fi ’
52)
( 6 -5 2 )
(6
95
i= 1 ,...,n-1.
где
У читы вая краевы е у с л о в и я , получим ещ е
два уравнения
а 0 • у0 + а
=А
h_
.
(6.53)
во • Уп + 0 1 Ь ^ г Ь -_ B
_h
Таким о б р азо м , получена линейная система п + 1 у р а в нений с п + 1 неизвестны м и у°, у1,..., уп , представляю щ им и
собой значения искомой функции
у = у(х) в точках
х°, Х1,..., хп . Разностная схема (6.52)-(6.53) аппроксим ирует краевую задачу (6.48)- (6.49) с порядком 1 по h за счет
краевых у с л о в и й . Решив эту си стем у , получим таблицу
значений искомой функции y .
6.7.2 Метод прогонки (одна из модификаций метода Гаусса)
При применении метода конечных разностей к краевым
задачам для д и ф ф ерен ци альны х уравнений второго порядка
получается система линейных алгебраических уравнений с
трехдиагональной м а тр и ц ей , т . е . каждое уравнение систе мы содержит три соседних н е и зв е стн ы х . Для решения та ких систем разработан специальны й метод - «метод п рогонки ».
Для этого систему (6.52) перепишем в виде
2
(6.54)
у+1+mi •у +пг у_ 1= I •h
для внутренних точек (i = 1 ,
п - 1 ),
где:
mi
2
_ qi ■h 2
Pi • h ; п
1+
2
1
_ Pi • h
1
+ Pi • h
fi
1 + Pi • h '
2
2
2
На концах отрезка x 0 = a и х п= Ь производные заменяем
разностны ми отнош ениями
, _ у1 _ уо
у 0 _
h
96
и
у
п
_
у п_1 _ у п
_ h
У чи ты вая эту зам е н у , п олучи м ещ е два у р авн ен и я
а о • Уо + а 1 У 1 ■ У° = A;
h
в о • Уn + fii Уп
(6.55)
h y " = В-
Обратим внимание на внешний вид записи системы
(6.54), (6.55). В каждом уравнении системы присутствует
три ненулевых эл е м е н т а . В первом и последнем - по два
ненулевых к о э ф ф и ц и ен та.
Разрешая уравнение (6.54) относительно у ,, получим
—
У1 =h
mi
2
1
У1+1
mi
П:
yi- 1 .
mi
(6 .56)
П р ед п о л о ж и м , что с помощью полной системы (6.54),
(6.55) из уравнения (6.56) исключена неизвестная у ,. 1 . То гда это уравнение примет вид
у, = ci (di - У;+1) ,
(6.57)
г д е : ci , d i- некоторые к о э ф ф и ц и ен ты ; i = 1 , 2 , n -1. Отсюда
у ,- 1 = ci-1(di- 1 - у , ).
П одставляя это выражение в уравнение (6.54), получим
—2
У +1 + ЩУ[ + nici- 1(di- 1 - Уд = fih ,
а отсюда
—2
у. = (fih - nici-1di- 1) - У +1
( 6 58)
■'
m, - n c -1
'
'
Сравнивая (6.57) и (6.58), получим для определения с, и
di рекуррентны е формулы
1
—2
ci = mi
m ‘nici- 1 ; di = f ih - nici-1di- 1; i = 1’_ ’n - 1 - (6.59)
Из первого краевого условия (6.55) и из формулы (6.57)
при i = 0 находим
а
7
Ah
c° = — -------- ; d° = — .
(6.60)
а° h - а 1
а
97
На основании формул (6.59), (6.60) последовательно
определяются коэффициенты с , d i (i = 1 , _ , п - 1 ) до сп-1 и d n.
1 включительно (прямой ход).
О братный ход начинается с определения у п. Для этого
из второго краевого условия (6.55) и из формулы (6.57) при
i =n - 1 найдем
Ро h + р1сп_^п_1
(6.61)
п A h + в 1 (сп_1 + 1)
Далее
по
формуле
(6.57)
последовательно
находим
З а м е т и м , что метод прогонки обладает устойчивым вы числительны м а л го р и т м о м .
7 П риближ енное решение д и ф ф ерен ц и ал ьн ы х урав н ен и й в ч а с т н ы х п р о и з в о д н ы х
В реальны х физических процессах искомая функция за висит от нескольких переменных, а это приводит к у р а в н е ­
ниям в частных производных от искомой ф у н к ц и и . Как и
для обы кновенны х д иф ф еренциальны х уравнений(О ДУ ), в
этом случае для выбора одного конкретного решения,
удовлетворяю щ его уравнению в частных производных,
кроме начальных условий, необходимо задавать д о п о л н и ­
тельные условия (т .е . краевые условия ). Чаще всего такие
задачи на практике не имеют аналитического решения и
приходится использовать численные методы их решения, в
том числе метод с е т о к , метод конечных разностей и так да лее. Мы будем рассматривать класс линейны х уравнений в
частных производных второго порядка. В общем виде в
случае двух переменны х эти уравнения записываются в в и ­
де
Л/
и
д u
д U
ди
А( х,у) —т + B (х,у) ------- + C (х,у) —т + a (х,у) — +
дх
ду
дх
(7.1)
+ b(х,у) — + с(х,у)и _ F (х,у),
ду
98
г д е : A, В, C, a, b, c - заданные непрерывные функции двух
переменных, имеющие непрерывные частные производные,
u - искомая ф у н к ц и я . Для сокращения записи введем обо значения
u = du . u = д 2u . u = d2u . u = Эи .
u = du
Uxx dx 2 ; uху дхЭу ; Uyy Эу2 ; ux d x ; UУ Эу •
Будем рассматривать упрощ енную форму записи (7.1)
вида
A(x, y)uxx + B(x, y)uxy + C(x, y)uyy + a(x, y)ux +
+ b(x, y)uy + c(x, y)u = F (x, y)
(
7.2)
и рассм отрим частный случай (7.2), когда a = b = c = F= 0, т . е .
A(x, y)uxx + B(x, y)uxy + C (x, y)uyy = 0.
(7.3)
Путем преобразований уравнение (7.3) может быть
приведено к каноническому виду (к одному из трех с тан ­
дартны х канонических ф орм ) эллиптическому т и п у , гипер болическому т и п у , параболическом у т и п у . Причем тип
уравнения будет определяться коэффициентами А , В, С, а
именно - знаком дискриминанта
D=B 2 - 4 A C .
Если D <0, то имеем уравнение эллиптического типа в
точке с координатами х, у ; если D =0, то (7.3) - параболи ческого т и п а ; если D >0, то (7.3) - гиперболического т и п а ;
если D не сохраняет постоянного знака, то (7.3) - см еш ан ­
ного т и п а .
З а м е ч а н и е . Если А , В , С - к о н ст ан ты , тогда к ан он и ческое уравнение (7.3) называется полностью элл и п ти ч еск о ­
г о , п араб о л и ч еск о го , гиперболического т и п а .
Введем понятие оператора Лапласа для сокращ енной
записи канонических уравнений вида
Д u = 4 % + d 2u r
d x2
d у2
.
Используя это определение, запишем сокращ енные к а ­
нонические уравнения всех трех типов
1.
A u=0. Это уравнение эллиптического т и п а , так назы ваемое уравнение Л а п л а с а . В механике это уравнение опи 99
сывает стационарные тепловые п о л я , установивш ееся те чение жидкости и т .д .
2. А и= - f , где f - заданная непрерывная ф у н к ц и я . Это
уравнение П уассона имеет эллиптический тип и описывает
процесс теплопередачи с внутренним источником т е п л а .
3. а Аи = ди/д£, где a - к о н ст ан та. Не во всех у р а в н е н и ях в качестве переменны х будут выступать стандартные
переменные х, у . М ожет быть также переменная в р е м е н и .
Это уравнение диф фузии описывает процесс теп л о п р о в о д ности и является уравнением параболического т и п а .
^2
4. -^-2 = а 2 А и , а - к о н с т а н т а . Это уравнение гиперболи дt
ческого типа - так называемое волновое уравнение и оно
описывает процесс распространения волн.
7.1
Метод сеток для решения смешанной задачи для уравне­
ния параболического типа (уравнения теплопроводности)
Смеш анная задача о зн а ч а е т , что следует найти искомую
ф ун к ц и ю , удовлетворяю щ ую заданному уравнению в ч а с т ­
ных п р о и зво д н ы х , к р а е в ы м , а так же начальным у с л о в и я м .
Различить эти условия можно в том сл у ч а е , если одна из
независимы х переменны х - в р е м я , а другая - пространст венная к о о р д и н а та. При этом у с л о в и я , относящ иеся к на чальному моменту в р ем ен и , называются н ач ал ь н ы м и , а ус ловия, относящ иеся к фиксированным значениям координат
- краевыми.
Рассмотрим смеш анную задачу для однородного у р а в ­
нения теплопроводности
=k
2
Эх2
, k=const> 0 .
(7.4)
Задано начальное условие
и(х,0 ) = f (х)
и заданы краевые условия первого рода
100
(7.5)
u ( 0 , t ) = л i( t );
(7.6)
u (a , t ) = л 2 (t).
Требуется найти функцию u (x,t), удовлетворяю щ ую в
области D (0<x<a , 0 < t <T) условиям (7.5) и (7.6).
К задаче (7.4) - (7.6) приводит задача о распростране нии тепла в однородном стержне длины а, на концах кото рого поддерживается заданный тем пературны й режим.
При проведении з а ­
Jl
мены
t —^ tjk
получим
б-i j;
(ij)
^
(i + lj )
9 f
= Ц , т.е. к - 1. Задача
Э х2
решается м ет одом с е ­
т о к : строим в области D
(ij - 1)
равномерную
прямо­
угольную сетку с шагом
h по оси х и шагом т по
--------- ^
оси t (см. рисунок 1 0 ).
П риближенные
зна Рисунок I 0 - Четырехточеч- чения искомой функции
ный ш абл °н не я в ной схемы
u(Xi, t j ) в точках (x ,,tj)
обозначим через uij . Тогда
xi _ i ■h ; h _ a / n ; i=0,1,..., n; tj _ j ■t ; j=0,1,..., m; T _ T / m .
Заменим производные в (7.4) разностны ми отнош ения ми
du
dt
d 2u
ui,j
ui,j -1
+0 ( t );
T
ui+1,j - 2ui,j + ui-1,j ,
+
O
1.2
(h z)
dx'
В результате получим неявную двухслойную разност2
ную схему с погрешностью O(T+h )
ui, j —ui, j -1 _ ui+1,j —2 ui, j + ui- 1,j
T
h2
Используя подстановку X _ т/ h2 , выразим из этой схемы
ui,j-1
ui, j- 1 _
(2 X +
1)ui, j -
X ui+1,j - X ui- 1, j .
(7.7)
101
Получаем разностную с х е м у , которой аппроксимируем
уравнение (7.4) во внутренних узлах с е т к и . Число уравне ний меньше числа неизвестны х utj . Из краевых условий по лучим уравнения
u 0,j Ml( tj^; un,j M^( tj ) ,
которые с (7.7) образую т неявную с х е м у . Ее шаблон изо бражен на рисунке 1 0 .
П олучаем систему линейных уравнений с тр ех д и а го нальной м а т р и ц е й . Решив ее любым способом (в ч а с тн о с ти ,
методом п ро го нк и ), получаем значения функции на опре деленных временных с л о я х . Т а к , на нулевом временном
слое используем начальное условие ut 0 =f(xt), т .к . j =0. На
каждом следующ ем слое искомая функция определяяется
из решения полученной системы. Неявная схема устойчива
для любых значений параметра Х = т/ h 2 > 0 .
Есть и явная схема (рисунок 11), но она устойчива
только при X < 12, т .е . при т < h 2/2. Вы числения по этой
схеме придется вести с малым шагом по т, что приводит к
большим затратам машинного времени.
t
i
(ij + l)
б-i j;
(ij)
(i=l j )
0
Рисунок 11 - Ч еты рехточечны й шаблон явной схемы
7.2
Решение задачи Дирихле для уравнения Л апласа
м етод ом сеток
Рассмотрим уравнение Лапласа
102
(7.8)
Будем рассм атривать уравнение Лапласа в прямоуголь ной области
Q = {(х, у),0 < x < a,0 < у < b} с краевыми условиям и
u(0, у) = fi(у); u(a, у) = f 2 (у); u(x,0 ) = f 3(x); u(x,b) = f A(x),
где
f 2, f 3, —заданные ф у н к ц и и . З а м е т и м , что чаще все го область бывает не прямоугольной.
Введем обозначения utj= u (х ьу^). Наклады ваем на п р я моугольную область сетку xt = h ■i ;
i= 0 , 1 ,..., n; Уj _ l • j ;
j = 0 , 1 , . . . , m . Тогда xn = h ■n , ут = l ■m =b .
Частные производные
1
аппроксим ируем по формулам
а
\2
д u _ ui+i- 2 ■ui,j + ui-i,j
j ' -1,j +
(ij) (i+Ц )
J ~x 2
h
2
д u
(ij-lj
ui,j+i-
2
------
2
2
■ui,j + ui,j-i
2
+ O(l2),
ду
l
и заменим уравнение Л а п ­
ласа
конечно-разностным
уравнением
Рисунок 12 - Схема узлов
«к р е с т»
ui+1,j -
2
■ui,j + ui-1,j + ui,j+1 h
2
2
■ui,j + ui,j -1 _ о
l
2
(7.9)
г д е : i = 1 , . , n - 1 , j = 1 ,...,m -1 (т .е . для внутренних у з л о в ).
П огрешность замены диф ференциального уравнения
разностны м составляет величину О (h2+ 12). Уравнения (7.9)
и значения ui,j в граничных узлах образуют систему ли103
нейных алгебраических уравнений относительно п р и б ли женных значений функции u (x,y) в узлах с е т к и . Выразим
uirj при h = l , и заменим систему
и ч = ( u i + i, j + u i _ i, j + u i , j +1 + u i , j - 1) /
u i0
4;
f 3 ( x i );
u im = f
4 ( x i );
u 0j
=
f 1 ( y j );
u nj
=
f
(7.10)
2 ( y j )’
Систему (7.10) линейных алгебраических уравнений
можно решить любым итерационным методом (Зей д еля,
простых итераций и т.д.).
При построении системы использовалась схема типа
«крест» (рисунок 12). Строим последовательность и тер а­
ций по методу Зейделя
u(s.+1) = i ( u (s+1) + u(s) + u(s) + u(s+1))
ui,j
4 (ui_1j ui+1j ui,j+1 ui,j_1 )?
где s — текущая и тер ац и я . Условие окончания итерационно го процесса
m a x \ u j +1 _ u j | < е .
(7 . 1 1 )
i,j
Условие (7.11) ненадежно и на практике используют
другой критерий
max ' u ^j +«
^ _ u ^j '>' < 8(1 _ V),
i,j
max u j +» _ u(s>
где
v =
max u f _ u j -1)
Схема «к р ест» - явная устойчивая схема ( малое и зм е ­
нение входных данных ведет к малому изменению выход
ных данных).
104
7.3 Р е ш е н и е с м е ш а н н о й з а д а ч и д л я у р а в н е н и я г и п ер б о л и ч е с к о г о т и п а м етод о м сето к
Рассмотрим уравнение колебания однородной и ограни ченной с т р у н ы .
Задача состоит в отыскании функции u(x,t) при t>0,
удовлетворяю щ ей уравнению гиперболического типа
где:
d2u
„ д2u
C ‘ ^д "x 2 ’
дt
0<x< a ; 0<t<T, начальным условиям
u ( x, 0 ) = f ( x );
д u ( * 0 ) = g ( x );
дt
0 < x < a
и краевым условиям
u( 0 ,t) = ^ 1(t);
u (a,t) = /л 2 (t);
/n 104
( 7 . 12)
(7.13)
(7.14)
0 < t < T.
Выполним замену переменны х с t на t и получим у р а в нение
д ^ _ д 2u
д t2
дx2
c= 1 .
и в дальнейш ем будем считать
Для построения разностной схемы решения задачи
(7.12)-(7.14) построим в области D = {(x,t),0 < x < a,0 < t < T }
сетку xt = ih ; i = 0 , 1 ,..., n ; a _ h ■n ; tj = Jt ; j = 0 , 1 ,..., m ; Tm = T .
А ппроксимируем (7.12) в каждом внутреннем узле се т ­
ки на шаблоне типа «к р ест» (рисунок 12). И спользуем для
аппроксим ации частных производны х разностные п р о и зводные второго порядка точности относительно шага и по лучаем разностную аппроксимацию уравнения (7.12)
ui,j _ 1 _
■ui j + u i_ 1j ,
(715)
t2
h2
где uij - приближенное значение функции u (x ,t ) в узле (x i,
tj) .
2
■u ц + ui j +1 _ u i+1j _
2
105
Полагая X=z/h, перепиш ем (7.15), выразив uiyj +1. Таким
образом, получим трехслойную разностную схему
2
2
u i,j+1_Л (u i+1,j - u i-1,j) + 2(1-Л ) u i,j - u ij-1,
( 7 .16)
г д е : i = 1 , . , n; j = 1 , . , m . Задаем нулевые граничные условия
{Л1(t) = 0, ju2(t) = 0. Тогда в (7.16) uoj = 0, unj = 0 для всех j .
Схема (7.16) называется т р е х сл о й н о й , т . к . она связыва ет значения искомой функции на трех временных слоях j 1, j , j +1. Схема (7.16) я в н а я , т . е . позволяет в явном виде
выразить utj через значения функции с преды дущ их двух
слоев.
Численное решение задачи состоит в вычислении при ближенны х значений uij решения u(x , t ) в узлах (x i ,t j ) при
i = 1 , . , n; j= 1 , . , m. А лгоритм решения основан на т о м , что
решение на каждом следующем слое (j=2,3,.., n ) можно по лучить пересчетом реш ений с двух преды дущ их слоев
(j = 0,1,..,n - 1 ) по формуле (7.16). При j= 0 решение известно
из начального условия u t0 _ f (x i ). Для вычисления р е ш е ния на первом слое (j= 1 ) положим
Эи (
e u (x -T) - u (х ,0 ) ,
(7.17)
дt
т
тогда u i1= u i0 - Tg (xi), i= 1 , 2 , . , n . Для вычисления решений
на следую щ их слоях можно использовать формулу (7.16).
Решение на каждом последующ ем слое получается п ер е­
счетом реш ений с двух преды дущ их слоев по формуле
(7.16).
Описанная схема аппроксим ирует задачу (7.12) - (7.14)
с точностью O (т+h ). Н евы сокий порядок аппроксимации
по т объясняется использованием грубой аппроксимации
для производной по t в формуле (7.17).
Схема будет у с т о й ч и в о й , если выполнено условие Ку ранта т< h . Это о з н а ч а е т, что малые п о гр еш н о ст и , возни кающие при вычислении решения на первом слое, не будут
неограниченно возрастать при переходе к каждому новому
временному с л о ю . Н едостаток схемы в т о м , что сразу по сле выбора шага h в направлении x , появляется о гр ан и ч ение на величину шага т по переменной t.
106
Л аб о р ато р н ая работа № 1
Решение систем линейны х алгебраических уравнений
Т очны е м етоды
М етод Г аусса
Procedure S I M Q ( Nn:Integer;Var Aa:TMatr;
Var Bb:TVector;Var Ks:Integer ) ;
В х о д н ы е
п а р а м е т р ы :
Nn - р а з м е р н о с т ь с и с т е м ы ;
Aa - м а т р и ц а к о э ф ф и ц и е н т о в с и с т е м ы N *N т и п а
TMatr = array [ 1 . . n , 1 . . n ] o f real ;
B b - в е к т о р р а з м е р н о с т и N т и п а TVector= a r r a y [ 1 . . n ] o f
real , с о д е р ж и т п р а в ы е ч а с т и с и с т е м ы .
В ы х о д н ы е
Bb ks -
п а р а м е т р ы :
р еш ен и е си стем ы ;
п р и зн а к п р а в и л ь н о с т и р е ш ен и я (к о д о ш и б к и ): е с л и
ks = 0 т о в м а с с и в е Bb
П рим ер. Р еш ить
содер ж и тся р еш ен и е си стем ы .
си стем у уравнений
x1+x2 + x3 _ 6
<x1 _ x3 _ _2
x1+2x2 + x3 _ 8
С х ем а ал гор и тм а п р и в ед ен а на р и су н к е 13.
Т е к ст п р о ц ед у р ы :
PROCEDURE SIMQ(Nn:Integer;Var Aa:TMatr;Var Bb:TVector;Var Ks:Integer);
Label M1;
Const Eps=1e-21;
Var Max,U,V : Real; I,J,K1,L : Integer;
Begin
For I:=1 To Nn Do Aa[i,Nn+1]:=Bb[i];
For I:=1 To Nn Do
Begin
Max:=Abs(Aa[i,i]);
K1:=I;
For L:=I+1 To Nn Do If (Abs(Aa[l,i])>Max) Then
Begin
Max:=Abs(Aa[l,i]); K1:=L;End;
If(Max<Eps) Then Begin Ks:=1; Goto M1;
End Else Ks:=0;
107
If K1<>I Then
For J:=I To Nn+1 Do
Begin U:=Aa[i,j]; Aa[i,j]:=Aa[k1,j]; Aa[k1,j]:=U;
End;
V:=Aa[i,i];
For J:=I To Nn+1 Do Aa[i,j]:=Aa[i,j]/V;
For L:=i+1 To Nn Do Begin
V:=Aa[l,i]; For J:=I+1 To Nn+1 Do Aa[l,j]:=Aa[l,j]-Aa[i,j]*V;
End;
End;
Bb[nn] :=Aa[Nn,Nn+1];
For I:=Nn-1 Downto 1 Do Begin Bb[i]:=Aa[i,nn+1];
For J:=I+1 To Nn Do Bb[i]:=Bb[i]-Aa[i,j]*Bb[j];
End;
M1:End;
В ы числения
по
п рограм м е
п р и вел и
к следую щ и м
зул ь татам :
x 1= 0 . 1 0 0 0 0 0 E + 0 0 0 1
x 3= 0 . З 0 0 0 0 0 Е + 0 0 0 1
п р и зн ак в ы х о д а 0
108
x 2= 0 . 2 0 0 0 0 0 Е + 0 0 0 1
ре -
Procedure SIMQ(Nn:mteger;\
var Aa:Tmatr: var Bb:TVector; j
var Ks:integer);
у
M
J=I, J>Nn+1
Aa[i,j]=Aa[I,j] / v
I ---J= J+ 1
•
L=I+1, L > Nn
V=Aa[L,i]
^
S
^
J=I+1, J>Nn+1
Aa[l,j]=Aa[lj]-Aa[ij]*V
J= J+ 1
S
L=L+ 1
R
I= I+ 1
K
Bb[nn]=
=Aa[Nn,Nn+1]
T
I=Nn-1, I<1
Bb[i]=Aa[i,Nn+1]
Z
J =I+1, J>Nn
Bb[i]=Bb[i]-Aa[i,j]*Bb[j]
J= J+ 1
Z
I= I - 1
V=Aa[i,i]
X
T
X
M1
С
Возврат
J
Р и сун ок 13 - С хем а алгоритм а м етода Г аусса
109
В ар и ан ты за д а н и й для р еш ен и я си ст ем л и н ей н ы х ал геб раи ческ и х уравн ен и й м етодом Г аусса п риведены в таблице
1.
М ето д к вадр атн ы х к ор н ей (Х о л ец к о г о )
Procedure holet (A 1 ; Tmatr; var B 1 / Tvector;
N: integer ) ;
В х о д н ы е
п а р а м е тр ы :
N - р азм ер н ость си ст ем ы ;
A 1 - м а т р и ц а к о э ф ф и ц и е н т о в с и с т е м ы N *N + 1 , т и п а
Tmatr = a r r a y [ 1 . . n , 1 . . n + 1 ] o f real , N + 1 с т о л б е ц и с п о л ь зу ет ся для к оп и р ов ан и я л ев ой ч асти для уп р ощ ен и я вы ­
ч и слен и й ;
B 1 - вектор св о б о д н ы х
array [ 1 . . n ] o f rea l .
В ы х о д н ы е
членов си стем ы типа
Tvector=
п а р а м е т р ы :
B 1- р еш ен и е си стем ы .
П рим ер. Р еш и ть си ст ем у
уравнений:
x1+x2 + x3 = 6
<x1 - x3 = -2
x1+2x2 + x3 = 8
С х е м а а л г о р и т м а п р и в е д е н а на р и с у н к е 14.
Здесь
п р ои зв ол ь н ая
м атрица коэф ф и ц и ен тов
при неиз -
в естн ы х в си ст ем е ур ав н ен и й у м н о ж ен и ем на тр ан сп он и р о ванную к ней м атрицу п риводится к си м м етр и ч н ой .
Т ек ст програм м ы :
uses crt;
type
Tmatr=array[ 1..3,1..4]of real;
Tvector=array[1..3]of real;
const
{матрица размерности N*N , N+1 столбец используется для копирования
левой части СЛАУ для упрощения вычислений}
A:tmatr= ((1,1,1,0),
(1,0,-1,0),
(1,2,1,0));
B:Tvector=
(6,-2,8);
var
k,N:integer;
{процедура для вывода матрицы}
110
Procedure vivod_matr(A1:Tmatr;N :integer);
var
i,j:integer;
begin
For i:=1 to N do begin
For j:=1 to N do write(A1[i,j]:15,' ');
writeln;
End;
writeln;
End;
{процедура для вывода вектора}
Procedure vivod_vectr(B1:Tvector; N :integer);
var
j:integer;
begin
For j:=1 to N do writeln('x',j,'=',B1[j]:0,' ');
writeln;
End;
{метод Холецкого}
{
Входные параметры:
N - размерность системы;
A1- матрица коэффициентов системы N *N +1, N +1 столбец используется для копи­
рования левой части СЛАУ для упрощения вычислений;
B1—вектор свободных членов системы.
Выходные параметры:
B1—решение системы.
B B ^ h вызове процедуры содержит вектор свободных членов СЛАУ,
Выходные параметры:
B1- содержит решение СЛАУ
}
Procedure holet(A1:Tmatr;var B1:Tvector;N :integer);
var i,j,t:integer;
c,L:Tmatr;
y:Tvector;
buf,summ:real;
Begin
For i:=1 to N do
For j:=1 to N +1 do
begin
c[i,j]:=0;
L[i,j]:=0;
y[i]:=0;
End;
{Умножение матрицы на транспонированную}
For i:=1 to N do
For j:=1 to N do
begin
summ:=0.0;
For t:=1 to N do
summ:=A 1[t,j] *A 1[t,i]+summ;
c[i,j]:=summ;
111
End;
{умножение правой части на транспонированную м-цу}
For i:=1 to N do
For j:=1 to N do
y[i] :=A 1[j,i] *B 1[j] +y[i];
For i:=1 to N do For j:=1 to N do
begin
A1[i,j]:=c[i,j];
B1[i] :=y[i];
End;
For i:=1 to N do
begin
For j:=1 to i do
begin
summ:=0;
For t:=1 to j-1 do
summ:=summ+L[i,t] *L[j ,t];
if i<>j then
L[i,j]:=(A1[i,j]-summ)/L[j,j]
else
L[i,i] :=sqrt(A 1[i,i]-summ);
End;
End;
For i:=1 to N do L[i,N +1]:=B1[i];
B1[1]:=L[1,N +1]/L[1,1];
For i:=2 to N do
begin
For j:=1 to i-1 do
L[i,N +1]:=L[i,N +1]-L[i,j]*B1[j];
B1[i]:=L[i,N +1]/L[i,i];
End;
For i:=1 to N do
begin
For j:=i+1 to N do
begin
L[i,j]:=L[j,i];
L[j,i]:=0;
End;
L[i,N +1]:=B 1[i];
End;
B1[N ]:=L[N ,N +1]/L[N ,N ];
For i:=N -1 downto 1 do
begin
For j:=i+1 to N do
L[i,N +1]:=L[i,N +1]-L[i,j]*B1[j];
B1[i]:=L[i,N +1]/L[i,i];
End;
End;
begin
N:=3;
writeln('dannaya SLAU');
112
{матрица задается типизированной константой}
vivod_matr(A,N);
writeln('metod Holetckogo');
holet(A,B,N);
vivod_vectr (B, N);
End.
В ы ч и слен и я по п р огр ам м е п р и вели к сл едую щ и м ре зул ь татам :
x 1= 0 . 1 0 0 0 0 0 0 E + 0 0 0 1
x 2= 0 . 2 0 0 0 0 0 0 E + 0 0 0 1
x 3= 0 . 3 0 0 0 0 0 0 E + 0 0 0 1
113
L[i,i]= sqrt(Al[i,i]-summ)
L[i,j] =(A l[i,j]summ)/L[j,j]
Г
y[i]=Al[j,i]*Bl[j]+
+y[i]
I
Возврат
Р и с у н о к 14 - С х е м а а л го р и т м а м е т о д а Х о л е ц к о г о
114
3
В ари ан ты зад а н и й .
Р еш и ть си ст е м у л и н ей н ы х у р а в н ен и й ви да А х = b
Т аблица 1
Номер
варианта
Матрица А
коэффициентов системы
1
1
2
2,25
2,60
2,06
2,93
1,55
2,25
2,44
2,31
3,22
1,70
3,73
2,43
1,61
2,31
3,73
2,37
2,40
2,41
3,38
4,00
4,10
3,78
2,79
2,37
3,26
2,39
4,32
2,36
4,11
2,43
1,96
3,23
4,47
2
3
4
5
6
7
8
9
10
11
1,84
2,32
1,83
2,58
1,32
2,09
2,18
2,17
3,15
1,54
3,69
2,45
1,53
2,35
3,83
2,36
2,51
2,59
3,43
4,17
4,30
3,88
3,00
2,67
3,40
2,64
4,64
2,53
3,95
2,78
2,16
3,55
4,85
2,53
2,82
2,24
3,13
1,58
2,34
2,49
2,49
3,17
1,62
3,59
2,25
1,43
2,07
3,45
2,13
2,10
2,06
3,09
3,65
3,67
3,45
2,39
1,96
2,90
1,96
3,85
1,93
3,66
1,94
1,56
2,78
3,97
Столбец
свободных
членов b
3
-6,09
-6,98
-5,52
-6,66
-3,58
-5,01
-4,34
-3,91
-5,27
-1,97
-3,74
-2,26
-5,13
-3,69
-5,98
1,48
1,92
2,16
5,52
6,93
7,29
10,41
8,36
7,62
13,05
10,30
17,89
12,66
21,97
13,93
13,16
21,73
29,75
115
П р одол ж ен и е таблицы 1
1
12
13
14
15
16
17
18
19
20
21
22
23
24
116
2,69
2,73
2.93
3,72
4,47
4,96
4,35
4,04
3,14
4,07
2,84
4,99
3,19
4,43
3,40
2,57
4,47
4,89
2,83
3,00
3,72
3,78
4,33
4,76
4,59
4,83
4,06
4,56
3,21
4,58
3,75
4,18
4,43
2,95
5,11
4,38
2,93
3,47
4,78
2
2,47
2,39
2,52
3,47
4,10
4,53
4,39
3,65
2,69
3,79
2,44
4,50
2,89
4,02
2,92
2,26
4,03
4,40
2,50
2,55
3,21
3,44
3,88
4,24
4,24
4,36
3,53
4,20
2,73
4,04
3,39
3,70
3,88
2,58
4,62
3,82
2,55
2,98
4,22
2,07
1,92
2,02
3,06
3,63
4,01
3,67
3,17
2,17
3,37
1,95
3,97
2,47
3,53
2,40
1,84
3,57
3,87
2,08
2,07
2,68
3,02
3,39
3,71
3,82
3,88
3,01
3,78
2,25
3,52
2,97
3,22
3,36
2,16
4,14
3,30
2,14
2,50
3,70
3
19,37
19,43
20,80
30,74
36,80
40,79
40,15
36,82
28,10
40,77
27,68
49,37
33,91
47,21
32,92
28,66
50,27
55,03
33,28
33,59
43,43
46,81
53,43
58,73
59,54
62,33
52,11
61,86
42,98
61,67
53,38
59,28
62,62
44,16
46,68
65,34
46,41
54,78
75,81
П р одол ж ен и е таблицы 1
1
25
26
27
28
29
30
3,74
4,02
4,18
4,07
5,30
5,11
4,90
3,79
4,01
4,25
3,86
5,40
3,35
5,41
3,88
3,05
4,14
5,63
2
3,36
3,51
3,61
4,28
4,79
4,54
4,50
3,27
3,43
3,84
3,34
4,82
2,94
4,88
3,30
2,64
3,61
5,03
2,94
3,04
3,09
3,87
4,32
4,03
4,09
2,81
2,91
3,43
2,87
4,30
2,53
4,41
2,78
2,23
3,14
4,52
3
63,26
67,51
70,03
84,43
95,45
91,69
94,18
71,57
75,45
86,07
77,12
108,97
70,69
115,38
81,07
67,17
91,43
125,40
117
Л аб о р ато р н ая работа № 2
Р еш ен и е си стем л и н е й н ы х а л г е б р а и ч е с к и х у р а в н е ний
П риближ енны е методы
М етод Я коби
procedure Yakoby (var a: TMatr; var b: TVector;
n: integer; var step: integer);
Входные параметры процедуры:
n - разм ерность си стем ы ;
а - м атрица коэф ф ициентов систем ы типа
TMatr = array [1 ..n , 1..n +1] o f re a l ;
b - м ассив разм ерн ости n , содерж ит правы е части
систем ы .
Выход ные параметры :
step - число итераций при реш ении си стем ы ;
b - реш ение си стем ы .
С хем а алгоритм а приведена на рисунке 15.
П р и м е р . Реш ить систем у уравнени й с точностью 8 =0,01
1 0 0 x 1+ 6 x2
- 2 x3 = 2 0 0
<6 x1 + 2 0 0 x2 - 10 x3 = 600
x1+2x2 + 100x3 = 500.
Т екст процедуры Y akoby:
procedure Yakoby(var a:TMatr; var b:TVector; n:integer;
var step:integer);
var x0,x:TVector;
i,j,k:integer;
e:real;
const eps = 0.01;
begin
step:=0;
for i:=1 to n do x0[i]:=b[i]/a[i,i];
repeat
for i:=1 to n do begin
x[i]:=b[i]/a[i,i];
for j:=1 to i-1 do x[i]:=x[i] - a[i,j]*x0[j]/a[i,i];
for j:=i+1 to n do x[i]:=x[i] - a[i,j]*x0[j]/a[i,i];
end;
e:=0;
for i:=1 to n do begin
118
if abs(x[i] - x0[i])>e then e:=abs(x[i] - x0[i]>;
x0[i]:=x[i];
end;
inc(step);
until e<=eps;
b:=x0;
В ы ч и слен и я по п р огр ам м е пр и вели к сл едую щ и м
ре -
зул ьтатам :
x 1= 1 ,9 0 7
x 2= 3 , 1 8 9
x 3 = 4 ,9 1 7
К о л и ч е с т в о и т е р а ц и й : 3.
procedure Yakoby(var
a:TMatr; var b:TVector;
^n:integer; step:integer);
"
I
'
Step = 0
A
I=1, I > N
X0[i] = B[i]/a[i,i]
I=I+ 1
A
B
C
I = 1, I > N
x[i] = x[i] a[i,j]*x0[j]/a[i,i]
D
J =J + 1 x
'
E
4
J = I+1, J>N
x[i] = x[i]-a[i,j]*x0[j]/a[i,i]
J =J + 1
E
I=I+ 1
C
e=0
X[i] = B[i]/A[i,i]
I
D
J=1, J > I-1
F
I = 1, I > N
Р и с у н о к 15 - С х е м а а л г о р и т м а м е т о д а Я к о б и
119
В арианты задан и й для реш ения систем линейны х алгеб раических уравнени й м етодом Я коби приведены в таблице
2.
М етод Зейделя
Р rocedure Zeidel (var a: TMatr; var b: TVector; n: integer;
step: integer);
В х о д н ы е па р а м е тр ы п р о ц е д у р ы :
n - разм ерность си стем ы ;
а - м асси в , содерж ащ ий коэф ф ициенты систем ы тип
TMatr=array [1 ..n , 1..n + 1] o f real ;
b - м ассив разм ерн ости n, содерж ит правы е части систе мы;
Выход ные параметры :
step - число итераций при реш ении систем ы ;
b - реш ение си стем ы .
С хема алгоритм а приведена на рисунке 16 .
П рим ер.
Реш ить систем у уравнени й с точностью
8 = 0 ,0 1
1 0 0 x 1+ 6 x2 - 2 x3
= 200
<6 x1 + 2 0 0 x2 - 10 x3 = 600
x1+2x2 + 100x3 = 500.
Т екст процедуры Zeidel:
procedure Zeidel(var a:TMatr;var b:TVector;n:integer; step:integer);
var x0,x:TVector;
i,j,k:integer;
e:real;
begin
step:=0;
for i:=1 to n do x0[i]:=b[i]/a[i,i];
repeat
for i:=1 to n do begin
x[i]:=b[i]/a[i,i];
for j:=1 to i-1 do x[i]:=x[i] - a[i,j]*x[j]/a[i,i];
for j:=i+1 to n do x[i]:=x[i] - a[i,j]*x0[j]/a[i,i];
end;
e:=0;
for i:=1 to n do begin
if abs(x[i] - x0[i])>e then e:=abs(x[i] - x0[i]);
x0[i]:=x[i];
end;
120
inc(step);
until e<=eps;
b:=x0;
end;
В ы числения
по
програм м е
п ри вел и
к
следую щ им
ре­
зул ь татам :
x 1= 1 ,9 0 7
x 2= 3 , 1 8 8
x з = 4 ,9 1 7
К о л и ч е с т в о и т е р а ц и й : 3.
^procedure Zeidel(var
a:TMatr; var b:TVector; j
n:integer; step: in te g e r ):/
(
X0[i] = B[i]/a[i,i]
X[i] = B[i]/A[i,i]
e = |x[i] - xO[i]|
step = step + 1
Р и с у н о к 1 6 - С х е м а а л го р и т м а м е т о д а З е й д е л я
121
В арианты задан и й для реш ения систем линейны х алгеб раических уравнени й м етодом Зейделя приведены в таб л и це 2 .
М етод верхней релаксац ии (обобщ енны й метод Зейде ля)
Р rocedure Zeide lEx (var a: TMatr; var b: TVector;
n: integer; var step: integer; w: real);
В х о д н ы е п а р а м е тр ы п р о ц е д у р ы :
n - разм ерность си стем ы ;
а - м атрица коэф ф ициентов систем ы типа
TMatr = array [1 ..n , 1..n +1] o f rea l;
b - м ассив разм ерн ости n , содерж ащ ий правы е части
систем ы ;
w - числовой п ар ам етр , 0 . 2 <w < 1 . 8 .
В ы х о д н ы е п а р а м е тр ы :
step - число итераций при реш ении систем ы ;
b - реш ение си стем ы .
С хем а алгоритм а приведена на рисунке 17.
П р и м е р . Реш ить систем у уравнени й м етодом р ел ак са­
ции с точностью 8 = 0 ,0 1 и парам етром релаксац ии w = 1 ,8 и
w = 0 ,2 .
1 0 0 x 1+ 6 x2 - 2 x3 = 2 0 0
<6 x1 + 2 0 0 x2 - 10 x3 = 600
x1+2x2 + 1 0 0 x3 = 500Т екст процедуры Z eidelE x:
procedure ZeidelEx(var a:TMatr;var b:TVector;n:integer; var step:integer;
w:real);
var x0,x:TVector;
i,j,k:integer;
e:real;
const eps = 0.001;
begin
step:=0;
for i:=1 to n do x0[i]:=b[i]/a[i,i];
repeat
for i:=1 to n do begin
x[i] :=w*b[i]/a[i,i]+(1 -w)*x0[i];
122
for j:=1 to i-1 do x[i]:=x[i] - w*a[i,j]*x[j]/a[i,i];
for j:=i+1 to n do x[i]:=x[i] - w*a[i,j]*x0[j]/a[i,i];
end;
e:=0;
for i:=1 to n do begin
if abs(x[i] - x0[i])>e then e:=abs(x[i] - x0[i]);
x0[i]:=x[i];
end;
inc(step);
until e<=eps;
b:=x0;
end;
В ы ч и слен и я по п р огр ам м е пр и вели к сл едую щ и м
ре -
зул ьтатам :
п р и w = 0 ,2
x 1= 1 ,9 0 7
x 2= 3 ,1 8 8
x 3 = 4 ,9 1 7
К оли чество и тер ац и й : 28.
п р и w = 1 ,8
x i= 1 ,9 0 7
x 2 = 3 ,1 8 9
x 3 = 4 ,9 1 7
К оли чество и тер ац и й : 50.
123
f procedure ZeidelEx(var
la:TMatr; var b:TVector; w:real;l
'ч n:integer; step:integer); J
£
x[i] = x[i]-w*a[i,j]*x0[j]/a[i,i]
Step = 0
J= J+ 1
E
I
A
I=1, I > N
X
I= I+ 1
C
X0[i] = B[i]/a[i,i]
X
I=I+ 1
A
B
C
I = 1, I > N
X
X[i] = w*B[i]/
A[i,i]+(1-w)*x0[i]
X
D
J=1, J > I-1
X
x[i] = x[i] -w*a[i,j]*x[j]/a[i,i]
X
J= J+ 1
—
-—
E— "
J = I+1, J>N
¥
Возврат
Р и с у н о к 17 - С х е м а а л г о р и т м а м е т о д а р е л а к с а ц и и
В арианты зад ан и й для реш ен и я си стем л и н ей н ы х ал геб раи ческ и х ур ав н ен и й
м етодом
д ен ы в т а б л и ц е 2.
Т ек ст п р ограм м ы :
uses crt;
const n:byte = 3;
dw = 0.2;
type TMatr = array[1..4,1..4+1] of real;
TVector = array[1..4] of real;
const eps = 0.001;
var a:TMatr; b,b1:TVector;
i,j,k:integer;
124
вер хн ей
релаксац ии
приве­
w,buf:real;
ch:char;
procedure Yakoby(var a:TMatr;var b:TVector; n:integer; var step:integer);
var x0,x:TVector;
i,j,k:integer;
e:real;
begin
step:=0;
for i:=1 to n do x0[i]:=b[i]/a[i,i];
repeat
for i:=1 to n do begin
x[i]:=b[i]/a[i,i];
for j:=1 to i-1 do x[i]:=x[i] - a[i,j]*x0[j]/a[i,i];
for j:=i+1 to n do x[i]:=x[i] - a[i,j]*x0[j]/a[i,i];
end;
e:=0;
for i:=1 to n do begin
if abs(x[i] - x0[i])>e then e:=abs(x[i] - x0[i]);
x0[i]:=x[i];
end;
inc(step);
until e<=eps;
b:=x0;
end;
procedure Zeidel(var a:TMatr;var b:TVector;n:integer; var step:integer);
var x0,x:TVector;
i,j,k:integer;
e:real;
begin
step:=0;
for i:=1 to n do x0[i]:=b[i]/a[i,i];
repeat
for i:=1 to n do begin
x[i]:=b[i]/a[i,i];
for j:=1 to i-1 do x[i]:=x[i] - a[i,j]*x[j]/a[i,i];
for j:=i+1 to n do x[i]:=x[i] - a[i,j]*x0[j]/a[i,i];
end;
e:=0;
for i:=1 to n do begin
if abs(x[i] - x0[i])>e then e:=abs(x[i] - x0[i]);
x0[i]:=x[i];
end;
inc(step);
until e<=eps;
b:=x0;
end;
procedure ZeidelEx(var a:TMatr;var b:TVector;n:integer; var step:integer; w:real);
var x0,x:TVector;
i,j,k:integer;
e:real;
125
const eps = 0.0001;
begin
step:=0;
for i:=1 to n do x0[i]:=b[i]/a[i,i];
repeat
for i:=1 to n do begin
x[i]:=w*b[i]/a[i,i]+(1-w)*x0[i];
for j:=1 to i-1 do x[i]:=x[i] - w*a[i,j]*x[j]/a[i,i];
for j:=i+1 to n do x[i]:=x[i] - w*a[i,j]*x0[j]/a[i,i];
end;
e:=0;
for i:=1 to n do begin
if abs(x[i] - x0[i])>e then e:=abs(x[i] - x0[i]);
x0[i]:=x[i];
end;
inc(step);
until e<=eps;
b:=x0;
end;
function Proverka(a:TMatr):boolean;
var i,j:byte;
begin
Proverka:=true;
for i:=1 to n do
if a[i,i] = 0 then begin
proverka:=false; exit;
end;
end;
procedure Out_Slau_T(a:tMatr; b:TVector);
var i,j:byte;
begin
Writeln('Исходная система :');
for i:=1 to n do begin
for j:=1 to n do
if a[i,j]<0 then write(' - ',abs(a[i,j]):0:4,'x',j)
else write(' +', abs(a[i,j]):0:4,'x',j);
if b[i]<0 then write(' = ',' - ',abs(b[i]):0:4)
else write(' = ',abs(b[i]):0:4);
WriteLn;
end;
WriteLn;
end;
procedure ReadMatr(var a:tMatr);
var i,j:byte;
begin
fillchar(a,sizeof(a),0);
for i:=1 to n do begin
Write('=>');
for j:=1 to n do read(a[i,j]);
126
Writeln;
end;
end;
procedure ReadVector(var b:TVector);
var i:byte;
begin
fillchar(b,sizeof(b),0);
Write('=>');
for i:=1 to n do read(b[i]);
end;
begin
ClrScr;
a[1,1]:=100; a[1,2]:=6; a[1,3]:=-2; b[1]:=200;
a[2,1]:=6; a[2,2]:=200; a[2,3]:=-10; b[2]:=600;
a[3,1]:=1; a[3,2]:=2; a[3,3]:=100; b[3]:=500;
Out_Slau_T(a,b); b1:=b;
Writeln('Решение по методу Якоби:');
Yakoby(a,b,n,k);
for i:=1 to n do write('x',i,' = ',b[i]:0:3,' ');
Writeln('Число итераций = ',k);
Writeln;
b:=b1;
Zeidel(a,b,n,k);
Writeln(' Решение по методу Зейделя:');
for i:=1 to n do write('x',i,' = ',b[i]:0:3,' ');
Writeln('Число итераций = ',k);
Writeln;
w:=0.2;
Writeln(‘Решение по обобщенному методу Зейделя:');
while w<2.0 do begin
b:=b1;
ZeidelEx(a,b,n,k,w);
for i:=1 to n do write('x',i,' = ',b[i]:0:3,'l');
writeln('Число W = ',w:0:1,'4hoto k = ',k);
w:=w+dw;
end;
Writeln('Приступить к решению системы? [y/n]');
Readln(ch);
if ch<>'y' then halt(0);
ClrScr;
Writeln('Введите N');
Readln(n);
Writeln;
ReadMatr(a);
ReadVector(b);
b1:=b;
Out_Slau_T(a,b1);
127
Writeln(''Решенне по методу Якоби:');
Yakoby(a,b,n,k);
for i:=1 to n do write('x',i,' = ',b[i]:0:3,' ');
Writeln(''Чнсло итераций = ',k);
Writeln;
b:=b1;
Zeidel(a,b,n,j,k);
Writeln('' Решение по методу Зейделя:');
for i:=1 to n do write('x',i,' = ',b[i]:0:3,' ');
Writeln('Число итераций = ',k);
Writeln;
w:=0.2;
Writeln(' Решение по обобщенному методу Зейделя:');
while w<2.0 do begin
b:=b1;
ZeidelEx(a,b,n,k,w);
for i:=1 to n do write('x',i,' = ',b[i]:0:3,'l');
writeln(''Чнсло W = ',w:0:1,'l'Чнсло итераций = ',k);
w:=w+dw;
end;
ReadLn;Readln;
end.
В ы числения
по
п рограм м е
п р и вел и
р езул ь там :
сходная система :
+100.00019x1 +6.0000x2 - 2.0000x3 =200.0000
+6.0000x1 +200.0000x2 - 10.0000x3 = 600.0000
+1.0000x1 +2.0000x2 +100.0000x3 = 500.0000
ешение по методу Якоби:
1= 1.907 х2= 3.189 хЗ= 4.917 Число итераций =
Решение по методу Зейделя :
1= 1.907 х2= 3.189 хЗ= 4.917 Число итераций =
ешение по обобщенному методу Зейделя
1.907
3.188
.917 ! Число
1.907
3.189
.917 ! Число
1.907
3.189
.917 ! Число
1.907
3.189
.917 ! Число
1.907
3.189
.917 ! Число
1.907
3.189
.917 ! Число
1.907
3.189
.917 ! Число
1.907
3.189
.917 ! Число
1.907
3.189
.917 ! Число
риступить к реш
ению системы? [у/п]
U=0.2
U=0.4
U=0.6
U=0.8
11=1.0
11=1.2
11=1.4
U
=1.6
U=1.8
В ар и ан ты за д а н и й в т а б л и ц е 2.
128
Число
Число
Число
Число
Число
Число
Число
Число
Число
к=28
к=14
к=9
к=6
к=4
к=7
к=11
к=20
к=50
к
следую щ им
Т аблица 2
Номер
варианта
1
1
2
3
4
5
6
7
8
9
10
Матрица системы
2
.0003 .0008
.0014
.4000
-.0029 -.5000 -.0018 -.0012
-.0055 -.0050 -1.4000 - .0039
-.0082 -.0076 -.0070 -2.3000
.0003 .0004
1.7000
.0005
.0000
.8000 .0001
.0002
-.0003 - .0002 -.1000
.0000
-.0005 -.0004 -.0003 -1.0000
3.0000
.0038 .0049
.0059
.0043
.0011 2.1000 .0032
-.0005
.0005 1.2000
.0026
-.0022 -.0011 -.0001
.3000
.0324
4.3000
.0217 .0270
.0100 3.4000 .0207
.0260
.0037
.0090 2.5000
.0197
- .0027
.0027 .0080 1.6000
.0393
5.6000
.0268 .0331
.0334
.0147 4.7000 .0271
.0274
.0087
.0150 3.8000
.0028
.0090 .0153 2.9000
6.9000
.0319 .0390
.0461
.0191 6.0000 .0333
.0405
.0134
.0348
.0205 5.1000
.0077
.0149 .0220 4.2000
.0532
8.2000
.0370 .0451
.0234 7.3000 .0396
.0477
.0422
.0179
.0260 6.4000
.0124
.0205 .0286 5.5000
.0422 .0513
.0604
9.5000
.0278 8.6000 .0459
.0550
.0224
.0315 7.7000
.0496
.0170
.0261 .0351 6.8000
10.8000
.0475 .0576
.0676
.0321 9.9000 .0523
.0623
.0268
.0369 9.0000
.0570
.0215
.0316 .0416 8.1000
12.1000
.0528 .0639
.0749
.0365 11.2000 .0586
.0697
.0644
.0312
.0423 10.3000
.0260
.0370 .0481 9.4000
Правая
часть
3
.1220
-.2532
- .9876
-2.0812
.6810
.4803
-.0802
-1.0007
1.5136
1.4782
1.0830
.3280
2.6632
2.7779
2.5330
1.9285
4.0316
4.3135
4.2353
3.7969
5.6632
6.1119
6.2000
5.9275
7.5591
8.1741
8.4281
8.3210
9.7191
10.5000
10.9195
10.9775
12.1430
13.0897
13.6744
13.8972
14.8310
15.9430
16.6926
17.0800
129
П р одол ж ен и е таблицы 2
Номер
варианта
1
11
12
13
14
15
16
17
18
19
20
130
Матрица системы
13.4000
.0408
.0356
.0304
14.7000
.0452
.0400
.0349
16.0000
.0496
.0444
.0393
17.3000
.0539
.0488
.0437
23.8000
.0757
.0707
.0656
19.9000
.0626
.0576
.0525
21.2000
.0670
.0619
.0569
22.5000
.0714
.0663
.0612
23.8000
.0757
.0707
.0656
25.1000
.0801
.0750
.0700
2
.0581
12.5000
.0477
.0425
.0635
13.8000
.0531
.0479
.0688
15.1000
.0585
.0534
.0741
16.4000
.0639
.0588
.1010
22.9000
.0909
.0858
.0849
19.0000
.0747
.0696
.0902
20.3000
.0801
.0750
.0956
21.6000
.0855
.0804
.1010
22.9000
.0909
.0858
.1063
24.2000
.0963
.0912
.0702
.0650
11.6000
.0546
.0765
.0714
12.9000
.0610
.0829
.0777
14.2000
.0674
.0892
.0841
15.5000
.0739
.1212
.1161
22.0000
.1060
.1020
.0969
18.1000
.0867
.1084
.1033
19.4000
.0932
.1148
.1097
20.7000
.0996
.1212
.1161
22.0000
.1060
.1276
.1225
23.3000
.1124
.0822
.0770
.0718
10.7000
.0896
.0844
.0793
12.0000
.0970
.0918
.0867
13.3000
.1043
.0992
.0941
14.6000
.1414
.1363
.1313
1.1000
.1191
.1140
.1090
17.200
.1265
.1215
.1164
18.5000
.1339
.1289
.1238
19.8000
.1414
.1363
.1313
21.1000
.1488
.1437
.1387
22.4000
Правая
часть
3
17.7828
19.0599
19.9744
20.5261
20.9985
22.4406
23.5195
24.2353
24.4781
26.0849
27.3281
28.2078
28.2215
29.9928
31.4001
32.4435
50.8968
53.4873
55.7118
57.5703
36.5001
38.5997
40.3345
41.7045
41.0351
41.2986
45.1968
46.7299
45.8340
48.2611
50.3226
52.0184
50.8968
53.4873
55.7118
57.5703
56.2234
58.9772
61.3645
63.3853
П р одол ж ен и е таблицы 2
Номер
варианта
1
21
22
23
24
25
26
27
28
29
30
Матрица системы
26.4000
.0844
.0794
.0744
27.7000
.0888
.0838
.0788
29.0000
.0932
.0882
.0831
30.3000
.0975
.0925
.0875
31.6000
.1019
.0969
.0919
32.9000
.1062
.1013
.0963
34.2000
.1106
.1056
.1006
35.5000
.1150
.1100
.1050
36.8000
.1193
.1143
.1094
38.1000
.1237
.1187
.1137
2
.1117
25.5000
.1017
.0966
.1171
26.8000
.1070
.1020
.1225
28.1000
.1124
.1074
.1278
29.4000
.1178
.1128
.1332
30.7000
.1232
.1182
.1386
32.0000
.1286
.1236
.1400
33.3000
.1340
.1290
.1494
34.6000
.1394
.1344
.1547
35.9000
.1448
.1398
.1601
37.2000
.1502
.1452
.1339
.1289
24.6000
.1189
.1403
.1353
25.9000
.1253
.1467
.1417
27.2000
.1317
.1531
.1481
28.5000
.1381
.1595
.1545
29.8000
.1445
.1659
.1610
31.1000
.1510
.1724
.1674
32.4000
.1574
.1788
.1738
33.7000
.1638
.1852
.1802
35.0000
.1702
.1916
.1866
36.3000
.1766
.1562
.1512
.1461
23.7000
.1636
.1586
.1536
25.0000
.1710
.1660
.1610
26.3000
.1784
.1734
.1684
27.6000
.1859
.1809
.1759
28.9000
.1933
.1883
.1833
30.2000
.2007
.1957
.1907
31.5000
.2082
.2032
.1982
32.8000
.2156
.2106
.2056
31.1000
.2230
.2180
.2131
35.4000
Правая
часть
3
61.8139
64.7307
67.2806
69.4636
67.6682
70.7478
73.4601
75.8051
73.7864
77.0286
79.9030
82.4098
80.1684
83.5730
86.6095
89.2778
86.8143
90.3811
93.5793
96.4090
93.7240
97.4528
100.8126
103.8034
100.8.976
104.7881
108.3093
111.4610
108.3351
112.3871
116.0694
119.3819
116.0363
120.2497
124.0930
127.5660
124.0015
128.3760
132.3800
136.0134
131
Л а б о р а т о р н а я р а б о та № 3
Р еш ен и е п лохо о б у с л о в л е н н ы х си стем л и н е й н ы х ал гебраических уравнений
М етод регуляризац ии
Р rocedure regul(Nn:Integer;a:Tmatr;b:Tvector;
var X:Tvector; var p : in t e g e r );
Входные параметры:
nn - разм ерность си стем ы ;
а - м атрица коэф ф ициентов систем ы типа
Tmatr = array [1.. n , 1.. n +1] o f real;
b - массив разм ерности n n , содерж ащ ий столбец св о бодны х членов си стем ы .
Выход ные параметры :
х - реш ение систем ы ;
p - количество и тер ац и й .
(в процедуре использую тся следую щ ие п роц ед уры :
Vozm(nn:integer; eps:real;var a:tmatr; var b:tvector) и зм еняет вектор правой части систем ы на величину e p s ;
S I M Q (Nn:Integer;Var Aa:T Matr;Var Bb:TVector;Var
Ks:Intege r) - процедура реш ения систем ы м етодом Г а у сса.)
С хема алгоритм а приведена на рисунке 18.
П р и м е р . Реш ить систем у уравнений
fi.03x1+ 0.991x2 = 2.51
[0.99Ц + 0.943x2 = 2.41
Т екст процедуры regul:
type
TMatr = array [1..2, 1..3] of real;
TVector = array [1..2] of real;
procedure regul(Nn:Integer;a:Tmatr;b:Tvector;var X:Tvector; var p:integer);
var
a,a1,a2:tmatr; b,b1,b2,x,x0:tvector; alfa,s,max,eps:real; i,j,k,l:integer;
procedure vozm(nn:integer; eps:real;var a:tmatr; var b:tvector);
var i,j:integer;
begin
for i:=1 to nn do b2[i]:=b2[i]+eps;
end;
begin
132
eps:=0.005;
For I:=1 To nn Do
Begin
For K:=1 To nn Do
Begin
S:=0.0;
For J:=1 To nn Do S:=S+A[j,i]*A[j,k];
A1[i,k]:=S;
End;
End;
For I:=1 To nn Do
Begin
S:=0.0;
For J:=1 To nn Do
Begin S:=S+A[j,i]*B[j]; End;
b1[i]:=S;
End;
alfa:=0; k:=0;
vozm(nn,eps,a2,b2);
repeat
alfa:=alfa+1e-8; inc(k); a2:=a1;
for i:=1 to nn do a2[i,i]:=a1[i,i]+alfa;
for i:=1 to nn do b2[i]:=b1[i]+alfa*x0[i];
a1:=a2; b1:=b2;
SIMQ(nn,a2,b2,l);
a2:=a1; X:=b2; x0:=X; b2:=b1;
simq(nn,a2,b2,l);
max:=abs(b2[1]-X[1]);
for i:=2 to nn do
if abs(b2[i]-X[i])>max then
max:=abs(b2[i]-X[i]);
until max<eps; р=k;
end;
133
procedure regul
(N:integer; a:Tmatr;
b:Tvector; var X:tvectorJ
var p:integer);
I
VO ZM (N n,eps,
a2,b2)
eps=0.005
=^ = x
—
K ------------ K =1, K >Nn
I
S=0.0
= R = X
=c
alfa=alfa+1e-8:
inc(k); a2=a1
I
D
I=1, I>Nn
a2[i,i]=a1[i,i]+alfa
I
I
S=S+A [j,i]*A [j,k]
I=I+1
D
T
E
I=1, I>Nn
I
J=J+1
J
I
I
A 1[i,k]=S
I
b2[i]=b1[i]+alfa*
*x0[il
I
I=I+1
E
4
S=0.0
s
I
J=J+1
B
Возврат
J>
a1=a2;
b1=b2
I
S=S+A [j,i]*B [j]
С
1
I
I=I+1
I
I
p=k
I
K=K+1
K
J=1, J>Nn
1
I
J=1, J>Nn
~ ~ B
G
I=2, I>Nn
R
I=1, I>Nn
L
I=1,I>Nn
1
I
SIM Q(nn,a2,
b2,1) ----a2=a1;
X=b2;
x0=X;
b2=b1;
I
SIM Q(nn,a2,
b2,1)
I
m ax=abs(b2[1]xrH)
I
B 1[i]=S
I
I=I+1
L
I
alfa=0;
k=0;
Р и с у н о к 18 - С х е м а а л г о р и т м а м е т о д а р е г у л я р и за ц и и
134
В ы числения по програм м е привели к следую щ им р е ­
зультатам :
x=1.9810
x2=0,4738
При возмущении правой части системы на 0,005 получаем сле­
дующий результат:
x1=-6,8901
x2 =7,6810
В арианты задан и й для реш ения плохо обусловленны х
систем м етодом регуляри зац и и приведены в таблице 3.
М етод вращ ения (Гивенса)
Р rocedure Vrash (Nn:integer; Aa:Tmatr; b: Tvector;
var x: tvector);
Входные параметры:
nn - разм ерность си тем ы ;
а - м атрица (nn +1 * n n +1), содерж ащ ая коэф ф ициенты
си стем ы ;
b - массив из nn дей стви тельн ы х ч и сел , содерж ащ ий
столбец свободны х членов си стем ы .
В ы х о д н ы е п а р а м е тр ы :
х - реш ение систем ы .
С хема алгоритм а приведена на рисунке 19.
П р и м е р . Реш ить систем у уравнени й
fi.03x1+ 0.991x2 = 2.51
I0.991x1+ 0.943x2 = 2.41
Т екст процедуры :
Procedure Vrash(Nn:integer; Aa:Tmatr; b: Tvector; var x:tvector);
Var I,J,K: Integer; M,L,R : Real; F1:TEXT; Label M1,M2;
Begin
for i:=1 to Nn do
aa[i,0]:=b[i];
M:=0.0;
135
For I:=1 To Nn-1 Do Begin
For K:=I+1 To Nn Do
Begin
If (Aa[i,i]<>0.0) or (Aa[k,i]<>0.0) Then
begin
M:=Sqrt(Aa[i,i] *Aa[i,i] +Aa[k,i] *Aa[k,i]);
L:=-1.0*Aa[k,i]/M;
M:=Aa[i,i]/M;
end
else begin M:=1.0;L:=0.0; end;
For J:=1 To Nn Do Begin
R:=M*Aa[i,j]-L*Aa[k,j];
Aa[k,j] :=L*Aa[i,j]+M*Aa[k,j];
Aa[i,j]:=R;
End;
R:=M*Aa[i,0]-L*Aa[k,0];
Aa[k,0] :=L*Aa[i,0] +M*Aa[k,0];
Aa[i,0]:=R;
End;
End;
For I:=Nn Downto 1 Do Begin
M:=0.0;
For K:=0 To Nn-I-1 Do Begin M:=M+Aa[0,nn-k]*Aa[i,nn-k];
Aa[0,i]:=(Aa[i,0]-M)/Aa[i,i];
End;
for i:=1 to Nn do x[i]:=Aa[0,i];
End;
В ы числения
по
програм м е
п р и вели
End;
к следую щ им
ре -
зул ь татам :
*1 = 1 ,9 8 1 3
х 2= 0 ,4 7 3 5
П р и в о зм у щ е н и и п р а в о й ч а с т и с и с т е м ы н а 0 ,0 0 5 п о л у ч а е м с л е ­
д у ю щ и й р езул ь тат:
* 1= - 6 ,8 9 2 8
* 2 = 7 ,6 8 3 7
136
procedure Vrash
(Nn:integer; Aa:Tmatr;
b: Tvector;
var X:tvector;)
I
I
I=1, I>Nn
aa[i,0]=b[i]
R=M*Aa[i,0]L*Aa[k,0];
Aa[k,0]=L*Aa[i,0]+
M*Aa[k,0];
Aa[i,0]=R;
I=I+1
I
K=K+1
K
M=0.0
I=I+1
L
L
I=1, I>Nn-1
N
R
I=nn, I<1
K
\
k=I+1, K>Nn
M=0.0
S
\
K=0, K>Nn-i-1
м= 1.0;
L=0.0
M=M+Aa[0,nn-k] *
*Aa[i,nn-k]
M=Sqrt(Aa[i,i]*
Aa[i,i]+Aa[k,i]*
*Aa[k,i);
K=K+1
S
I
L=-1.0*Aa[k,i] / M;
M=Aa[i,i] / M
Aa[0,i]=(Aa[i,0]M) / Aa[i,i]
J
J=1, J>Nn
I=I-1
R
R=M*Aa[i,j]L*Aa[k,j];
Aa[k,j]=L*Aa[i,j]+
M*Aa[k,j];
Aa[i,j]=R;
G
I=1, I>nn
x[i]=Aa[0,i]
I=I+1
G
J=J+1
J
Возврат
Р и с у н о к 19 -
С хем а алгоритм а м етода Г и в ен са (вращ е -
ния)
В арианты
задан и й
для
реш ен и я
плохо
обусловленн ы х
с и с т е м м е т о д о м Г и в ен са п р и в ед ен ы в т а б л и ц е 3.
137
В арианты зад ан и й
Т аблица 3
№
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
138
Матрица A
1,03
0,991
1,04
0,991
1,05
0,991
1,06
0,991
1,07
0,991
1,08
0,991
1,09
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
0,991
0,940
0,992
0,941
0,992
0,942
0,994
0,943
0,995
0,944
0,996
0,944
0,997
0,945
0,998
0,946
0,999
0,947
0,996
0,948
0,995
0,949
0,994
0,951
0,993
0,953
0,992
0,952
0,991
0,940
Вектор
B
2,51
2,41
2,52
2,42
2,53
2,43
2,54
2,44
2,55
2,45
0,502
0,482
0,502
0,482
0,502
0,482
0,502
0,482
0,502
0,482
2,51
2,45
2,52
2,44
2,53
2,43
2,54
2,42
2,55
2,41
№
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Матрица A
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
1,03
0,991
0,991
0,943
0,991
0,943
0,991
0,943
0,991
0,943
0,991
0,943
0,991
0,943
0,991
0,943
0,991
0,943
0,991
0,943
0,2973
0,2829
0,2973
0,2829
0,2973
0,2829
0,2973
0,2829
0,2973
0,2829
0,2973
0,2829
Вектор
B
2,51
2,40
2,62
2,41
2,73
2,42
2,84
2,43
2,95
2,41
2,56
2,41
2,57
2,49
2,58
2,48
2,59
2,47
2,50
2,46
2,51
2,45
2,51
2,44
2,51
2,43
2,51
2,42
2,51
2,41
Л аб о р ато р н ая работа № 4
Р еш ен и е н е л и н е й н ы х у р а в н е н и й и си стем н ел и н ей ных уравнений
М етод просты х итераций
Описание перем енны х, процедур и ф ункций:
х0 - массив разм ерности N, содерж ит реш ение на п р еды дущ ей и тер ац и и ;
х - м ассив разм ерн ости N, содерж ит реш ение на теку щей итерации.
В програм м е использую тся следую щ ие процедуры и
функции:
func tio n f u n c (x:vector;i:integer): real; - задание
функции.
x - столбец значен ий н еи звестн ы х , х [1] - х , х [2] - у ;
I - индекс нового значения н еизвестной в столбце зн а чений.
procedure vivod_vectr(vector:vector;N 1,N 2 :integer); вывод в ек то р а.
N 1, N2 - использую тся для ф орм атного вы вода значе ний.
func tio n N o r m a (a:matr;N:integer):real; - вы числение
нормы матрицы a разм ерн ости N*N.
func tio n M a trJ a co b i (x:vector;i,j:integer ):real; - п о стр о ение м атрицы Я к о б и .
х - столбец значен ий н еи звестн ы х ;
I,j - индексы элем ентов м атрицы Я к о б и ;
I - номер стр о к и ;
j - номер сто л б ц а.
procedure vi vod_matr (mat:matr;N 1,N 2 :integer); - вывод
м атри ц ы .
С хема алгоритм а приведена на рисунке 20.
П р и м е р . Реш ить м етодом просты х итераций си стем у :
lcos(x + 0.5) + у = 0.8
[sin у - 2x = 1.6
139
В качестве нулевого приближ ения вы берем точку x =0,
У=°П реобразуем систем у к в и д у :
у = 0.8 - cos (x + 0.5)
<
x = 0.5* sin у - 0.8
П остроим м атрицу п роизводны х правой части систем ы
rsin( x + 0.5)
v
0
Т екст п рограм м ы :
uses crt;
const
n=2;
eps=1e-4;
type
matr=array[1..n,1..n] of real;
vector=array[1..n]of extended;
var
a: matr;
x,f,x0:vector;
ITER,i,j: integer;
max: real;
{вычисление нормы}
Function Norma(a: matr; n: integer):real;
var i,j: integer;
res: real;
begin
res:=0;
for i:=1 to n do
for j:=1 to n do
res:=res+A[i,j] *A[i,j];
Res:=sqrt(res);
Norma:=res;
end;
{задание функции}
{x -столбец значений переменных }
{I номер функции в системе }
function func (x:vector;i: integer) :real;
begin
case i of
140
0
Л
0.5cos( у) ,
1:func:= (sin(x[2])-1.6)/2;
2:func:=0.8-cos((x[1])+0.5);
end;
end;
{вычисляем значение первой функции }
{вычисляем значение второй функции }
{построение матрицы Якоби }
{x -столбец значений неизвестных }
{I,j индексы элементов матрицы Якоби }
{I - номер строки}
{j - номер столбца}
function MatrJacobi(x:vector;i,j:integer):real;
begin
case i of
1: case j of
{вычисляем значение элемента матрицы Якоби индексами 1,1}
1: MatrJacobi:=sin(x[1]+0.5);
{вычисляем значение элемента матрицы Якоби с индексами 1,2 }
2: MatrJacobi:= 0 ;
end;
2: case j of
{вычисляем значение элемента матрицы Якоби с индексами 2,1 }
1: MatrJacobi:=0;
{вычисляем значение элемента матрицы Якоби с индексами 2,2}
2: MatrJacobi:=0.5*cos(x[2]);
end;
end;
end;
{вывод матрицы}
procedure vivod_matr(mat:matr;N1,N2:integer);
var i,j: integer;
begin
for i:=1 to N do begin
for j:=1 to N do write(mat[i,j]:n1:N2,'
');
writeln;
end;
end;
{вывод вектора}
procedure vivod_vectr(vector:vector;N1,N2:integer);
var j: integer;
begin
for j:=1 to N do
writeln('x',j,'= ',vector[j]:n1:N2);
end;
begin
clrscr;
x0[1]:=0;
x0[2]:=0;
iter:=0;
repeat
141
for i:=1 to n do
for j:=1 to n do
a[i,j]:= MatrJacobi (x0,i,j);
vivod_vectr(x0,3,13);
{вычисление нормы матрицы A}
writeln('норма =',Norma(a,N));
{подсчет количества итераций}
writeln('nomer iterazii - ',iter);
writeln('=================');
{нахождение нового приближения функции}
for i:=1 to n do X[i]:=func(x0,i);
max:=abs(X[1]-X0[1]);
for i:=2 to n do if abs(X[I]-X0[I])>max then max:=abs(X[I]-X°[I]);
X0:=X;
inc(iter);
readln;
until (max<eps)or(iter>20);end.
В ы ч и сл ен и я по п р огр ам м е п р и вел и к сл ед у ю щ и м ре зул ь татам :
x i = - 0 .8 6 6 5
x 2= - 0 . 1 3 3 5
N o r m a = 0 .6 1 1 5 5
К о л и ч ест в о и т ер а ц и й : 9.
142
^
Начало ^
I
хО[1]Ю
хО[2]Ю
iter=0
Рисунок 20 - С хема алгоритм а м етода просты х итера ций
М етод Н ью тона
Входные параметры:
dx - массив разм ерности N, содерж ит реш ение на п р еды дущ ей и тер ац и и ;
x - массив разм ерн ости N, содерж ит реш ение на теку щей итерации;
A - массив разм ерн ости N* N+1 содерж ит коэф ф ициенты
систем ы разм ерн ости N *N, N+1 столбец используется для
копирования правой части систем ы при р еш ен и и .
В програм м е использую тся следую щ ие процедуры и
функции:
func tio n func(x: vector; i:integer):real; - задание ф ун кции.
x - столбец значений н еи звестн ы х , x [1] =x , x [2]=у ;
143
I - индекс нового значения н еизвестной в столбце зн а чений.
func tio n jacobian(x:vector;i,j:integer):real; - задание
элем ентов матрицы Я к о б и .
x - столбец значен ий н еи звестн ы х ;
I,j - индексы элем ентов м атрицы Я к о б и .
procedure vivod_matr(mat:matr;N1,N2:integer); - вывод
матрицы .
N 1, N 2-использую тся для ф орм атного вы вода зн ач ен и й .
procedure vivod_vectr(vector:vector;N1,N2:integer); вывод вектора
N 1 ,N 2 -использую тся для ф орм атного вы вода зн ач ен и й .
procedure simq(Nn:integer;A:matr;var Bb:vector); - про цедура реш ения систем ы линейны х алгеб раи чески х урав нений м етодом Г а у сса.
С хем а алгоритм а приведена на рисунке 21.
П р и м е р . Реш ить м етодом Н ью тона си стем у :
[cos(x + 0.5) + у = 0.8
[sin у - 2x = 1.6
В качестве нулевого приближ ения вы берем точку x =0,
у =0.
П реобразуем систем у к в и д у :
[cos(x + 0.5) + у - 0.8 = 0
[sin у - 2x -1 .6 = 0
Т екст п рограм м ы :
Program Nuton_without_obr_matr
uses crt;
const
n=2;
type
matr=array[1..n,1..n] of double;
vector=array[1..n]of extended;
Tmatr=array[ 1..n,1..n+1]of extEnded;
144
const
eps=1e-11;
var
a:matr;
x,f,dx:vector;
iter,i,j:integer;
max:real;
{задание функции}
{x -столбец значений неизвестных }
{I номер функции в системе }
function func (x:vector;i: integer) :real;
begin
case i of
1:func:=cos(x[1]+0.5)+x[2]-0.8 ; {вычисляем значение первой функции }
2:func:=sin(x[2])-2*x[1]-1.6 ; {вычисляем значение второй функцию }
end;
end;
{задание якобиана}
{x -столбец значений неизвестных }
{I,j индексы элементов матрицы Якоби }
{I - номер строки}
{j - номер столбца}
function jacobian(x:vector;i,j:integer):real;
begin
case i of
1: casej of
1:jacobian:=-sin(x[1]+0.5) ;
{вычисляем значение элемента матрицы Якоби с
индексами 1,1}
2:jacobian:= 1 ;
{вычисляем значение элемента матрицы Якоби с индекса­
ми 1,2}
end;
2: case j of
1:jacobian:=-2 ;
{вычисляем значение элемента матрицы Якоби с ин­
дексами 2,1}
2:jacobian:=cos(x[2]) ;
{вычисляем значение элемента матрицы Якоби с ин­
дексами 2,2}
end;
end;
end;
{вывод вектора}
procedure vivod_vectr(vector:vector;N1,N2:integer);
var j:integer;
begin
for j:=1 to N do
writeln('x',j,'= ',vector[j]:n1:N2);
end;
145
{решение СЛАУ}
Procedure simq(Nn:integer;A:matr;var Bb:vector);
label m1;
const eps=1e-21;
var max,u,v:real;
ks,i,j,k1,l:integer;
Aa:Tmatr;
begin
For i:=1 to Nn do Aa[i,Nn+1]:=Bb[i];
For i:=1 to Nn do For j:=1 to Nn do Aa[i,j]:=A[i,j];
For i:=1 to Nn do
begin
max:=abs(Aa[i,i]);
k1:=i;
For L:=i+1 to Nn do
if (abs(Aa[l,i])>max) then
begin
max:=abs(Aa[l,i]);
k1:=l;
End;
if (max<eps)then
begin
ks:=1;
goto m1;
End
else ks:=0;
if k1<>i then
For j:=1 to Nn+1 do
begin
U:=Aa[i,j];
Aa[i,j]:=Aa[k1,j];
Aa[k1,j]:=u;
End;
V:=Aa[i,i];
For j:=1 to Nn+1 do Aa[i,j]:=Aa[i,j]/v;
For l:=i+1 to Nn do
begin
v:=Aa[l,i];
For j:=I+1 to Nn+1 do Aa[l,j]:=Aa[l,j]-Aa[i,j]*V;
End;
End;
Bb[Nn] :=Aa[Nn,Nn+1];
For i:=Nn-1 downto 1 do
begin
Bb[i] :=Aa[i,Nn+1];
For j:=i+1 to Nn do
Bb[i] :=Bb[i]-Aa[i,j] *Bb[j];
End;
M1:
End;
146
begin
clrscr;
x[1]:=0;{x[1]=x}
x[2]:=0;{x[2]=y}
iter:=0;
repeat
vivod_vectr(x,3,13);
writeln('nomer iterazii - ',iter);
writeln('=================');
{подсчет количества итераций}
inc(iter);
{вычисление значений элементов матрицы a}
for i:=1 to n do
for j:=1 to n do
a[i,j]:=jacobian(x,i,j);
{вычисление правой части СЛАУ}
for i:=1 to n do f[i]:=-1*func(x,i);
{решение системы}
simq(n,a,f);
dx:=f;
max:=abs(dx[1]);
for i:=2 to n do if abs(dx[i])>max then max:=abs(dx[i]);
for i:=1 to n do x[i]:=x[i]+dx[i];
until max<eps;
readln;
end.
В ы ч и слен и я по п р огр ам м е п р и вел и к сл ед у ю щ и м р е ­
зу л ь т а т а м :
x 1= - 0 . 8 6 6 6
x 2= - 0 . 1 3 3 6
К о л и ч е с т в о и т е р а ц и й : 5.
147
f[i]=-l*fu n c(x,i)
Р и с у н о к 21 - С х е м а а л г о р и т м а м е т о д а Н ь ю т о н а
148
В арианты заданий
Т аблица 4
fsin(x + 1) - y = 1,2
1 [ 2x + cosy = 2.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
f sin x + 2y = 2
[cos(y -1) + x = 0,7
cos(x + 0,5) - y = 2
sin y2x = 1
f sin у+2х=2
lcos(x-1)+y = 0,7
Гsin(y-1)+x=1,3
1 y-sin(x+1)=0,8
f sin(x+1)-y=1
I 2x+cos y = 2
f sin(x+0,5)-y=1,2
I cos(y-2)+x = 0
f cos x+y= 1,5
L2x-sin(y-0,5)=1
Г2y-cos(x+1)=0
\ x+sin y= -0,4
Гcos(y-1)+x=0,5
I y-cos x = 3
r cos(y+0,5) + x=0,8
\ sin x-2y=1,6
Гsin(y + 2)-x=1,5
1 y+cos(x-2)=0,5
f cos x+y= 1,2
I 2x-sin(y-0,5) = 2
f sin(x-1)+y= 1,5
1 х - sin(y+ 1)= 1
Гcos(y-1)+x=0,8
I y-cos x=2________
16
|sin(x + 0,5)-y = 1
(cos(y - 2) + x = 0
|sin x (x1) = 1 ,3 -y
[x - sin(y + 1) = 0,8
Гsin(y+1)-x=1,2
18 \ 2y+cos x = 2.
17
19
20
21
22
23
24
25
26
27
28
29
30
Гsin(y+0,5)-x=1
1 cos(x-2)+y =0
Г cos(y+0,5)-x = 2
I sin x —2y= 1
Гsin x+2y= 1,6
1 cos(y-1)+x=1
Гcos(x-1)+y = 0,5
1 x -cos y = 3
fcos ^+0,5)+у = 0,8
1 sin y -2x=1,6
sin(x + 2) - y = 1,5
x + cos(y - 2) = 0,5
Гcos y+x=1,5
\ 2y-sin(x-0,5)=1
Г2x-cos(y+1) = 0
\ y+sin x= -0,4
Гcos(x-1)+y=0,8
Lx-cos y=2
Гcos(x+0,5)+y=1
Lsiny-2x=2
f sinfy+ ^-K ^
|2y+cos x = 2
fcos(x-1)+y=1
(sin y+2x= 1,6_____
149
Л а б о р а т о р н а я р а б о та № 5
Р еш ен и е п р о б л е м ы с о б с т в е н н ы х з н а ч е н и й и собст венных векторов
Т о ч н ы е м ето д ы
М етод
Л евер рье
P r o c e d u r e L e v e r r e ( M a t r : T M a t r );
(в п р о ц ед у р е и сп ол ь зую тся сл ед у ю щ и е п р оц едур ы и
ф ун к ц и и : C o p y - к оп ирование м атрицы ; M a t r U m n - пере м н ож ен и е м атр и ц ; R e s h - н а х о ж д ен и е реш ен и я х ар ак тер и сти ч еск ого м н огочлен а м етодом Н ью тон а; S o b V e c t - н а х о ж д е н и е с о б с т в е н н ы х в е к т о р о в м а т р и ц ы ).
В х о д н ы е
п а р а м е т р ы
: M a tr: T M a tr - исходная
м атр и ц а (ф о р м и р у е т с я п е р е д за п у с к о м ).
В ы х о д н ы е
п а р а м е т р ы
: вы чи сл яю тся и в ы в о-
дя тся на эк ран со б ст в ен н ы е зн ач ен и я и в ек т о р а .
С х ем а ал гор и тм а п р и в ед ен а на р и су н к е 2 2 .
Пример:
В ы ч и сл и ть со б ст в ен н ы е зн ач ен и я и с о б с т в е н -
ны е век тора м атрицы
150
1
-1
-1
2
2
3
0
- 4
1
1
-2
-2
1
1
0
-1
MatrUmn(Matr 1,
Matr,Matr 1,High(S),
High(S),High(S))
Р[0]=1
p=R esh(p)
-------------1
________1_------------_______
SobV ect(M atr,p)
(
Возврат
^
Р и сун ок 22 - С хем а алгоритм а м етода Л евер рье
В ы чи слен ия
по
програм м е
п р и вели
к
следую щ им
ре­
зул ьтатам
151
В арианты
зад а н и й для н а х о ж д ен и я со б ст в ен н ы х зн ач е -
ний и со б ст в ен н ы х век тор ов м атрицы п р и в еден ы в табл и ц е
5.
М етод
Ф адеева
P rocedure F adeev(M atr:TM atr);
(в п р о ц ед у р е и сп ол ь зую тся сл ед у ю щ и е п р оц едур ы и
ф ун к ц и и : C o p y 1 - к оп ирование м атрицы ; M a t r U m n - пере м н ож ен и е м атр и ц ; R e s h - н а х о ж д ен и е реш ен и я х ар ак тер и сти ч еск ого м н огочлен а м етодом Н ью тон а; S o b V e c t - н а х о ж д е н и е с о б с т в е н н ы х в е к т о р о в м а т р и ц ы ).
В х о д н ы е
п а р а м е т р ы
: M a tr: T M a tr - исходная
м атр и ц а (ф о р м и р у е т с я п е р е д за п у с к о м ).
В ы х о д н ы е
п а р а м е т р ы : н а х о д я тся и вы водятся
на эк р ан со б ст в ен н ы е зн ач ен и я и в ек т о р а .
С х ем а ал гор и тм а п р и в ед ен а на р и су н к е 2 3 .
Пример.
В ы ч и сл и ть со б ст в ен н ы е зн ач ен и я и с о б с т в е н -
ны е век тора м атрицы
152
1
-1
-1
2
2
3
0
- 4
1
1
-2
-2
1
1
0
-1
Matr 1=Copy 1(Matr)
Matr2=Copy 1(Matr)
J=0,
D
J>High(Matr)
MatrUmn(Matr,Matr 1,
Matr2,High(Matr),Hig
h(Matr),High(Matr))
SobVect(Matr,p)
I
T
1= 1+1
1=0,
I>High(s)
IF,
Р и сун ок 23 - С хем а алгоритм а м етода Ф адеева
В ы чи слен ия
по
програм м е
п р и вели
к
следую щ им
ре­
зул ьтатам
Лабораторная работа №5
-
Исходная матрица
1
2
3
4
1
1
-1
-1
2
1
6Л 8034Е-1
2
2
3
0
-4
2
Э,ЭЭЭЭ2Е-1
3
1
1
-2
-2
3
1,0 0 0 0 1 Е +0
1
0
-1
4
-1,61 ВОЗЕ+0
4
П
X
С обствен н ы е значения
С обствен н ы е значения
5Ш
С обствен н ы е вектора
Введите р азм ер н о сть матрицы
4
Ввод
Л еверрье
!
Ф адеев
!
Крылов
Вектор 1
Вектор 2
1
-Ш 0 3 4 Е -1
-3,35756Е-8 3,35755Е-6
-3,41323Е-'
2
8,7Э83ЭЕ-1
8..Э4427Е-1
2,60748Е-1
3
-6,41 S 3 4 E -2 0,00000Е +0 0,00000Е +0 -8,Э35Э5Е
4
4,3881 Э Е -1
4,47214Е-1
Вектор 3
8,Э4427Е-1
4,47214Е-1
Вектор 4
1,30374Е-1
Щ Щ .Ж )
153
В арианты
зад а н и й для н а х о ж д ен и я со б ст в ен н ы х зн ач е -
ний и со б ст в ен н ы х век тор ов м атрицы п р и в еден ы в табл и ц е
5.
М етод
К ры лова
Procedure Krilov(Matr:TMatr);
(в п р о ц ед у р е и сп ол ь зую тся сл ед у ю щ и е п р оц едур ы и
ф ункции:
Copy
- копирование м атрицы ;
н о ж ен и е м атрицы на м а с с и в ;
CopyMas
MatrUmnMas
- ум -
- к оп и рован и е м ас -
CopyTrans - к о п и р о в а н и е и т р а н с п о н и р о в а н и е
Det - н а х о ж д е н и е о п р е д е л и т е л я м а т р и ц ы ; SIMQ
сива;
м атри-
цы ;
- ре -
ш ен и е си стем ы л иний ны х ал гебр аи ч еск и х у р а в н ен и й .
(П р о ц е д у р а б е р ет ся из п ер в о й л а б о р а т о р н о й ).
Resh
- нахо-
ж д ен и е реш ен и я хар ак тер и сти ч еск ого м н огоч л ен а м етод ом
Н ью тона;
SobVect
- н а х о ж д ен и е со б ст в ен н ы х век торов
м а т р и ц ы ).
В х о д н ы е
п а р а м е т р ы
:
Matr: TMatr
- исходная
м атр и ц а (ф о р м и р у е т с я п е р е д за п у с к о м ).
В ы х о д н ы е
п а р а м е т р ы
: н а х о д я тся и вы водятся
на эк р ан со б ст в ен н ы е зн ач ен и я и в ек т о р а .
С хем а ал гори тм а п р и в ед ен а на р и сун к е 24.
Пример.
В ы ч и сл и ть со б ст в ен н ы е зн ач ен и я и с о б с т в е н -
ны е век тора м атрицы
154
1
-1
-1
2
2
3
0
- 4
1
1
-2
-2
1
1
0
-1
b=CopyMas(Y[0])
CopyTrans(Y,A)
Det(A,Length(A))<>0
SIMQ(High(b)-1,A,b,ks)
J=0, J>High(y[High(y)])
I
y[High(y),j]=Trunc(l* 10*
Random)
1= 1,I> StringGrid 1.ColCount-1
MatrUmnMas(A,Y[High(Y)
-i+1], Y[High( Y)-i] ,High( A),
High(A),High(A))
Р и сун ок 24 - С хем а алгоритм а м етода К ры лова
В ы числения
по
програм м е
п ри вел и
к
следую щ им
ре­
зул ь татам
155
В ар и ан ты за д а н и й для н а х о ж д ен и я со б ст в ен н ы х зн ач е ний и со б ств ен н ы х век торов м атрицы п р и веден ы в табл и ц е
5.
Т ек ст п р ограм м ы вы ч и сл ен и я со б ст в ен н ы х зн а ч ен и й и
век тор ов м ет о д а м и : Л ев ер р ь е, Ф а д еев а , К р ы л ова:
unit Unitl;// программа вычисления собственных значений и векторов методами: Ле­
веррье, Фадеева, Крылова.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Edit1: TEdit;
StringGrid2: TStringGrid;
Button2: TButton;
StringGrid3: TStringGrid;
Button6: TButton;
Label1: TLabel;
Button3: TButton;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button2Click(Sender:
procedure Button1Click(Sender:
procedure Button6Click(Sender:
procedure Button3Click(Sender:
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TMas=array of real;
TMatr=array of TMas;
TPer=array of Integer;
156
TObject);
TObject);
TObject);
TObject);
function Vkl(Per:TPer;Znach,Kol:integer):Boolean; //проверяет входит ли в массив зна­
чение Znach, используется при вычислении определителя
var
i:integer;
begin
result:=false;
for i:=0 to kol-1 do
if Per[i]=Znach then
begin
result:=true; exit;
end;
end;
function Perestanovka(Per:TPer;n:Integer):boolean;//для определителя указывает знак с
каким входит в сумму очередное слагаемое
var
i,j,kol:integer;
begin
kol:=0;
for i:=0 to n-2 do
for j:=i+1 to n-1 do
if Per[i]>Per[j] then
inc(kol);
result:= ODD(kol);
end;
function SumMatrToPer(Matr:TMatr;Per:TPer;n:Integer):Extended;// формирует очеред­
ное слагаемое в определителе
var
i:integer;
begin
result:=1;
for i:=0 to n-1 do
result:=result*Matr[i,Per[i]];
if Perestanovka(Per,n) then
result:=-1*result;
end;
function DetRec(Matr:TMatr;const n:integer;Per:TPER;n0:integer):Extended;
//рекурсивно формирует перестановки и ищет определитель
var
i:integer;
begin
result:=0;
for i:=0 to n-1 do
begin
if Vkl(Per,i,n0) then
continue
else
begin
Per[n0]:=i;
157
if n0=n-1 then
begin
result:=SumMatrToPer(Matr,Per,n);
end
else
result:=result+DetRec(Matr,n,Per,n0+1);
end;
end;
end;
function Det(Matr:TMatr;n:Integer):Extended;// подготавливает массив и запускает ре­
курсию для нахождения определителя
var
Per:TPer;
begin
SetLength(Per,n);
Per[0]:=1;
result:=DetRec(Matr,n,Per,0);
end;
Function SQRN(a:real;b:integer):double;//возводит в степень B число A
begin
if a>0 then
sqrn:=exp(b*ln(a))
else
if a<>0 then
begin
if odd(b)=true then
begin
sqrn:=-exp(b*ln(abs(a)));
end
else
sqrn:=exp(b*ln(abs(a)));
end
else
sqrn:=0;
end;
procedure MatrUmn(a,b:TMatr;var c:TMatr;n,m,k:integer);//перемножение матриц
var
i,j,l:integer;
s:real;
begin
SetLength(c,n+ 1,k+1);
for i:=0 to n do
begin
for j:=0 to k do
begin
s:=0;
for l:=0 to m do
s:=s+a[i,l]*b[l,j];
c[i,j]:=s;
158
end;
end;
end;
function Proizv(xar:TMas):TMas;// считает производную многочлена, переданного в
массиве
var
i:integer;
proizv:TMas;
begin
SetLength(proizv,High(xar));
for i:=0 to High(xar)-2 do
proizv[i]:=xar[i]*(High(xar)-i);
proizv[High(xar)-1]:=xar[High(xar)-1];
result:=proizv;
end;
Function Delenie(f:TMas;koren:real):TMas;// делит многочлен на одночлен (корень),
тем самым уменьшая его степень
var
i:integer;
otv:TMas;
begin
SetLength(otv,High(f)+1);
otv[0]:=f[0];
for i:=1 to High(f) do
otv[i] :=(koren*otv[i-1])+f[i];
result:=otv;
end;
function Podstanovka(xar:TMas;kor:real):real;//подставляет число в многочлен
var
i:integer;
otv:real;
begin
otv:=0;
for i:=0 to High(xar)-1 do
begin
otv:=otv+SQRN(kor,High(xar)-i)*xar[i];
end;
otv:=otv+xar[High(xar)];
result:=otv;
end;
function Resh(xar:TMas):TMas;//находит решение многочлена
var
dx,xn,xn1:real;
i,p:integer;
f1,otv:TMas;
begin
SetLength(otv,High(xar));
p:=High(xar);
159
for i:=1 to p do
begin
xn:=0.00001;
f1:=(Proizv(xar));
repeat
dx:=-(Podstanovka(xar,xn))/(Podstanovka(f1,xn));
xn1:=dx+xn;
xn:=xn1;
until (abs(dx)<0.00001)or(Podstanovka(xar,xn 1)=0);
xar:=Delenie(xar,xn 1);
SetLength(xar,High(Xar));
otv[i-1]:=xn1;
Form1.StringGrid2.Cells[1,i]:=FloatToStrF(xn1,ffExponent,6,13);
end;
result:=otv;
end;
procedure TForm1.Button2Click(Sender: TObject);//подготавливает к вводу StringGridы
var
i:integer;
begin
StringGrid 1.ColCount:=StrToInt(Edit 1.Text)+1;
StringGrid1.RowCount:=StrToInt(Edit1.Text)+1;
StringGrid2.RowCount:=StrToInt(Edit1.Text)+1;
StringGrid3.RowCount:=StrToInt(Edit1.Text)+1;
StringGrid3 .ColCount:=StrToInt(Edit 1.Text)+1;
StringGrid2.Cells[1,0]:='Собственные значения';
for i:=1 to StrToInt(Edit1.Text) do
begin
StringGrid1.Cells[0,i]:=IntToStr(i);
StringGrid3.Cells[0,i]:=IntToStr(i);
StringGrid2.Cells[0,i]:=IntToStr(i);
StringGrid 1. Cells [i,0] :=IntToStr(i);
StringGrid3.Cells [i,0] :='Вектор '+IntToStr(i);
end;
end;
Function sum(Matr:TMatr;Mas:TMas;p:integer):real; //находит значение очередного не­
известного, считая сумму последующих элементов и деля её на элемент на главной диаго­
нали
var
i:integer;
sun:real;
begin
sun:=0;
for i:=p+1 to High(Matr) do
sun:=sun+Matr[p,i] *Mas [i];
sun:=-sun/Matr[p,p];
result:=sun
end;
160
function Perest(Var Matr:TMatr;p,i:integer):boolean;
var
u,l:integer;
rec:real;
begin
result:=false;
for u:=p+1 to High(Matr) do
if Matr[u,i]<>0 then
begin
for l:=0 to High(Matr) do
begin
rec:=Matr[p,l];
Matr[p,l] :=Matr[u,l];
Matr[u,l]:=rec;
end;
result:=true;
break;
end;
end;
procedure Minim(var Matr:TMatr);//заменят все элементы в матрице меньше 0.0001 на 0
var
i,j:integer;
begin
for i:=0 to High(Matr) do
for j:=0 to High(Matr) do
if Abs(Matr[i,j])<0.0001 then
Matr[i,j]:=0
end;
procedure Prov(Matr:TMatr;var b1:TMas;k,l:integer);// делается проверка, если решение
до этого было выбрано любое, а теперь выясняется что оно не подходит, то оно заменяет­
ся 0
var
i:integer;
begin
for i:=l+1 to High(Matr) do
if Matr[k,i]<>0 then
b1[i]:=0
end;
function Stup(var Matr:TMatr):TMas;//приводим матрицу к ступенчатому виду и нахо­
дим любое частное решение
var
k,i,j:integer;
b:real;
b1:TMas;
begin
for i:=0 to High(Matr)-1 do
begin
for k:=i+1 to High(matr) do
begin
161
if abs(Matr[i,i])=0 then //break;
if Perest(Matr,i,i)<>true then break;
b:=-matr[k,i]/Matr[i,i];
for j:=0 to High(Matr) do
begin
Matr[k,j] :=Matr[i,j] *b+Matr[k,j];
end;
Minim(Matr);
end;
end;
SetLength(b 1,High(Matr)+1);
for i:=High(Matr) downto 0 do
if abs(Matr[i,i])=0 then
begin
b1[i]:=1;
Prov(Matr,b1,i,i);
end
else
b 1[i] :=sum(Matr,b 1,i);
result:=b1
end;
Function Copy1(Matr:TMatr):TMatr;//копируем матрицу
var
i,j:integer;
Matr1:TMatr;
begin
SetLength(Matr 1,High(Matr)+1 ,High(Matr)+1);
for i:=0 to High(Matr) do
for j:=0 to High(Matr) do
Matr1[i,j] :=Matr[i,j];
result:=Matr1;
end;
function CopyMas(const Mas:TMas):TMas;//копируем масcив
var
i:integer;
begin
SetLength(result,Length(Mas)+1);
for i:=0 to High(Mas) do
result[i]:=Mas[i];
end;
function Clear1(Mas:TMas):TMas;//очищаем массив
var
i:integer;
Mas1:TMas;
begin
SetLength(Mas 1,High(Mas)+1);
for i:=0 to High(Mas) do
Mas1[i]:=0;
result:=Mas1;
162
end;
procedure OutPut(otv1:TMas;p:integer);//нормализуем массив
var
i:integer;
s:real;
begin
s:=0;
for i:=0 to High(otv1) do
s:=s+SQR(otv1[i]);
s:=SQRT(s);
for i:=0 to High(otv1) do
begin
otv1[i]:=otv1[i]/s;
Form1.StringGrid3.Cells[p,i+1]:=FloatToStrF(otv1[i],ffExponent,6,13);
end;
end;
procedure SobVect(Matr:TMatr;otv:TMas); //находим собственные вектора для собст­
венных значений
var
i,k:integer;
Matr1:TMatr;
otv1:TMas;
begin
SetLength(otv 1,High(Matr)+1);
for k:=0 to High(otv)do
begin
Matr1 :=Copy1(Matr);
for i:=0 to High(otv) do
begin
Matr1 [i,i] :=Matr[i,i]-otv[k];
end;
Minim(Matr1);
otv1:=Clear1(otv1);
otv1:=Stup(Matr1);
OutPut(otv1,k+1);
end;
end;
procedure Leverre(Matr:TMatr);
var
i,j:integer;
Matr1:TMatr;
S,P:TMas;
begin
SetLength(S,Form 1.StringGrid 1.ColCount-1);
SetLength(P,Form 1.StringGrid 1.ColCount);
Matr1:=Copy(Matr);
For i:=0 to High(S) do
begin
s[i]:=0;
163
if i<>0 then
MatrUmn(Matr1,Matr,Matr1,High(S),High(S),High(S));
for j:=0 to High(s) do
s[i]:=s[i]+Matr1[j,j];
end;
for i:=0 to High(s) do
begin
p[i+1]:=s[i];
for j:=0 to i-1 do
begin
p[i+1]:=p[i+1]+p[j+1]*s[i-j-1];
end;
p[i+1]:=p[i+1]*(-1/(i+1));
end;
p[0]:=1;
p:=Resh(p);
SobVect(Matr,p);
end;
procedure TForm1.Button1Click(Sender: TObject);//находим коэффициенты характери­
стического многочлена методом Леверрье
var
Matr:TMatr;
i,j:integer;
begin
SetLength(Matr,StringGrid 1.ColCount-1,StringGrid 1.ColCount-1);
for i:=1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.RowCount-1 do
begin
Matr[i-1,j-1]:=StrToFloat(StringGrid1.Cells[j,i]);
end;
Leverre(Matr);
end;
procedure Fadeev(Matr:TMatr);
var
i,j:integer;
Matr 1,Matr2:TMatr;
S,P:TMas;
begin
SetLength(S,Form 1. StringGrid 1.ColCount-1);
SetLength(P,Form 1. StringGrid 1.ColCount);
Matr1:=Copy1(Matr);
Matr2:=Copy1(Matr);
For i:=0 to High(Matr) do
begin
s[i]:=0;
for j:=0 to High(s) do
s[i]:=s[i]+Matr2[j,j];
s[i]:=s[i]/(i+1);
Matr1:=Copy1(Matr2);
for j:=0 to High(Matr) do
164
Matr1[j,j]:=Matr2[j,j]-s[i];
MatrUmn(Matr,Matr1,Matr2,High(Matr),High(Matr),High(Matr));
end;
for i:=0 to High(s) do
p[i+1]:=-s[i];
p[0]:=1;
p:=Resh(p);
SobVect(Matr,p);
end;
procedure TForm1.Button6Click(Sender: TObject);//находим коэффициенты характери­
стического многочлена методом Фадеева
var
i,j:integer;
Matr:TMatr;
begin
SetLength(Matr,StringGrid1.ColCount-1,StringGrid1.ColCount-1);
for i:=1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.RowCount-1 do
begin
Matr[i-1,j-1]:=StrToFloat(StringGrid1.Cells[j,i]);
end;
Fadeev(Matr);
end;
procedure MatrUmnMas(a:tmatr;b:tmas;Var c:tmas;n,m,k:byte);// находим произведение
матрицы на массив
var
s:real;
i,j,l:byte;
Begin
for i:=0 to n do
begin
for j:=0 to k do
begin
s:=0;
for l:=0 to m do
s:=s+a[i,l]*b[l];
c[i]:=s;
end;
end;
end;
procedure CopyTrans(A:TMatr;var OutPut:TMatr);//копируем и транспонируем матри­
цу, удаляя последнюю строчку
var
i,j:integer;
begin
for i:=0 to High(A)-1 do
for j:=0 to High(a)-1 do
OutPut[i,j] :=a[j+1 ,i];
end;
165
procedure SIMQ(n:integer; a:tmatr; var b:tmas;var ks:Integer);
label m1;
const eps=1e-21;
var
max,u,v:real;
i,j,k1,l:integer;
begin
for i:=0 to n do a[i,n+1]:=-b[i];
for i:=0 to n do
begin
max:=abs(a[i,i]); k1:=i;
for l:=i+1 to n do if (abs(a[l,i])>max) then
begin
max:=abs(a[l,i]); k1:=l;
end;
if(max<eps)then begin ks:=1; goto m1;
end else ks:=0;
if k1<>i then
for j:=i to n+1 do
begin u:=a[i,j]; a[i,j]:=a[k1,j]; a[k1,j]:=u; end;
v:=a[i,i];
for j:=i to n+1 do a[i,j]:=a[i,j]/v;
for l:=i+1 to n do begin
v:=a[l,i]; for j:=i+1 to n+1 do a[l,j]:=a[l,j]-a[i,j]*v;
end; end;
b[n]:=a[n,n+1];
for i:=n-1 downto 0 do begin b[i]:=a[i,n+1];
for j:=i+1 to n do b[i]:=b[i]-a[i,j]*b[j];
end;
m1:end;
procedure Krilov(Matr:TMatr);
var
A,Y:TMatr;
b,p:TMas;
ks,i,j,l:integer;
begin
SetLength(p,Form1.StringGrid1.ColCount);
SetLength(A,form1.StringGrid1.ColCount-1,Form1.StringGrid1.ColCount-1);
SetLength(Y,Form 1.StringGrid 1.ColCount,Form 1. StringGrid 1.ColCount-1);
SetLength(b,Form 1. StringGrid 1.ColCount-1);
l:=1;
repeat
A:=Copy1(Matr);
for j:=0 to High(y[High(y)]) do
y[High(y),j] :=Trunc(l*10*Random);
inc(l);
for i:=1 to Form1.StringGrid1.ColCount-1 do
MatrUmnMas(A,Y[High(Y)-i+1],Y[High(Y)-i] ,High(A),High(A),High(A));
b:=CopyMas(Y[0]);
CopyTrans(Y,A);
166
until Det(A,Length(A))<>0 ;
SetLength(A,Form 1.StringGrid 1.ColCount-1,Form 1. StringGrid 1.ColCount);
SIMQ(High(b)-1,A,b,ks);
for i:=1 to High(p) do
p[i] :=b[i-1];
p[0]:=1;
p:=Resh(p);
SobVect(matr,p);
end;
procedure TForm1.Button3Click(Sender: TObject);//находим коэффициенты характери­
стического многочлена методом Крылова
var
Matr:TMatr;
i,j:integer;
begin
SetLength(Matr,StringGrid1.ColCount-1,StringGrid1.ColCount-1);
for i:=1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.RowCount-1 do
begin
Matr[i-1,j-1]:=StrToFloat(StringGrid1.Cells[j,i]);
end;
Krilov(Matr);
end;
end.
167
Л а б о р а т о р н а я р а б о та № 6
Р еш ен и е п р о б л е м ы с о б с т в е н н ы х зн а ч е н и й и собст венны х векторов
И т е р а ц и о н н ы е м ето д ы
М етод Q R -разлож ения
P r o c e d u r e Q r (V a r N n : In te g e r ;
Var A: Tm atr;
V a r R _ 1 : T v e c t o r ; V a r R _ 2 : T v e c t o r );
Входные
п а р а м е т р ы : n n - разм ерность систе м ы ; а - м атрица разм ерн ости n n * n n , содерж ащ ит к о эф фициенты си стем ы .
В ы х о д н ы е п а р а м е т р ы : R _ 1 - м ассив из n n
д ей стви тельн ы х ч и с ел , при вы ходе из програм м ы содерж ит
собственны е числа м атри ц ы ; а - м атрица n n * n n содерж ит
собственны е вектора м атр и ц ы .
П р и м е р . В ы числить собственны е значения и собствен ные вектора м атрицы
2
2
- 2
2
5
-4
2
- 4
5
Т екст п р оц ед уры :
PROCEDURE Qr (Var Nn:Integer;Var A:Tmatr;Var R_1:Tvector;Var R_2:Tvector);;
Var
I,J,K,L,M,Na,Its : Integer;
II,M1,N1,L1,N : Integer;
M3,U1,U11,U2
: Real;
Q,P,R,S,T,U,X,Y,Z,W : Real;
Aa: tMatr;
r1,r2:tvector;
Label NexTw,NexTit,Cont_1,Cont_2,Cont_3;
Label Onew,TwOw,Fin;
Begin
Aa:=A; N:=Nn;
for i:=0 to Nn do
begin r1[i]:=0; r2[i]:=0; end;
T:=0.0;
NexTw:
If (N=0) Then Goto Fin;
Its:=0;
Na:=N-1;
M3:=1.0e-11;
NexTit:
168
For L:=N DownTo 2 Do Begin
U:=Abs(Aa[l,l-1]); U1:=M3*(Abs(Aa[l-1,l-1])+Abs(Aa[l,l]));
If (U<=U1) Then Goto Cont_1;
End;
L:=1; Cont_1:
X:=Aa[n,n];
If(L=N) Then Goto Onew;
Y :=Aa[na,na];
W:=Aa[n,na] *Aa[na,n];
If(L=Na) Then Goto Twow;
If(Its=30) Then Goto Fin;
If((Its=10)And(Its=20)) Then
Begin
T:=T+X;
For I:=1 To N Do Begin
Aa[i,i]:=Aa[i,i]-X;
End;{}
S:=Abs(Aa[n,na])+Abs(Aa[na,n-2]);
X:=0.75*S;
Y:=0.75*S; W:=-0.4375*S*S;
End;
Its:=Its+1;
For M:=N-2 Downto L Do Begin
Z:=Aa[m,m];
R:=X-Z;
S:=Y-Z;
P:=(R*S-W)/Aa[m+1,m] +Aa[m,m+1];
Q:=Aa[m+1,m+1]-Z-R-S; R:=Aa[m+2,m+1];
S:=Abs(P)+Abs(Q)+Abs(R);
P:=P/S;
Q:=Q/S;
R:=R/S;
If(M=L) Then Goto Cont_2;
U11:=Abs(Aa[m,m-1])*(Abs(Q)+Abs(R));
U2:=M3*Abs(P)*(Abs(Aa[m-1,m-1])+Abs(Z)+Abs(Aa[m+1,m+1]));
If(U11<=U2) Then Goto Cont_2;
End;
Cont_2:
For I:=M+2 To N Do Begin Aa[i,i-2]:=0.0;
End;
For I:=M+3 To N Do Begin
Aa[i,i-3]:=0.0; End;
For K:=M To Na Do Begin
If (K<>M) Then Begin;
P:=Aa[k,k-1]; Q:=Aa[k+1,k-1]; If(K<>Na) Then R:=Aa[k+2,k-1]
Else R:=0.0;
X:=Abs(P)+Abs(Q)+Abs(R);
If(X=0.0) Then Goto Cont_3;
P:=P/X; Q:=Q/X; R:=R/X;
End;
S:=Sqrt(P*P+Q*Q+R*R);
If(P<0.0) Then S:=-S;
If(K<>M) Then Aa[k,k-1]:=-S*X
Else If(L<>M) Then Aa[k,k-1]:=-Aa[k,k-1];
P:=P+S; X:=P/S; Y:=Q/S; Z:=R/S;Q:=Q/P; R:=R/P;
For J:=K To N Do Begin
P:=Aa[k,j]+Q*Aa[k+1,j];
If (K<>Na) Then Begin
P:=P+R*Aa[k+2,j]; Aa[k+2,j]:=Aa[k+2,j]-P*Z; End;
Aa[k+1,j]:=Aa[k+1,j]-P*Y; Aa[k,j]:=Aa[k,j]-P*X;
End;
If((K+3)<N) Then J:=K+3
Else
J:=N;
For I:=L To J Do Begin
169
P:=X*Aa[i,k] +Y*Aa[i,k+1]; If(K<>Na) Then Begin;
P:=P+Z*Aa[i,k+2]; Aa[i,k+2]:=Aa[i,k+2]-P*R;
End;
Aa[i,k+1]:=Aa[i,k+1]-P*Q;
Aa[i,k]:=Aa[i,k]-P;
End;
Cont_3:End; Goto NexTit; Onew:
R1[n]:=X+T; {R1-ylM} R2[n]:=0.0; {Cnt[n]:=its;} N:=Na;
Goto Nextw; Twow:
P:=(Y-X)/2.0; Q:=P*P+W; Y:=Sqrt(Abs(Q));
{Cnt[n]:=-its; Cnt[na]:=its;} X:=X+T;
If(Q>0.0) Then Begin
If(P<0.0) Then Y:=-1.0*Y; Y:=P+Y; R1[na]:=X+Y;
R1[n]:=X-W/Y; R2[na]:=0.0; R2[n]:=0.0; End
Else Begin R1[na]:=X+P; R1[n]:=X+P; R2[na]:=Y; R2[n]:=-1.0*Y;End;
N:=N-2;
Goto Nextw; Fin: r_1:=r1; r_2:=r2; End;
В ы числения
по
п рограм м е
п р и вел и
к следую щ и м
ре -
зул ь татам :
С обств ен н ы е чи сла
С обств ен н ы е век тор а
.1 0 0 0 0 Е + 0 1
- .9 4 2 8 1 Е + 0 0
.2 3 5 7 0 Е + 0 0
.1 0 0 0 0 Е + 0 2
- .3 3 3 3 3 Е + 0 0
- .6 6 6 6 7 Е + 0 0
.6 6 6 6 7 Е + 0 0
.1 0 0 0 0 Е + 0 1
.0 0 0 0 0 Е + 0 0
- .7 0 7 1 1 Е + 0 0
- .7 0 7 1 1 Е + 0 0
В арианты
- .2 3 5 7 0 Е + 0 0
зад а н и й для н а х о ж д ен и я со б ст в ен н ы х зн а ч е ­
ний и со б ст в ен н ы х век тор ов м атрицы п р и в еден ы в табл и ц е
5.
М етод
итераций
Р r o c e d u r e 1 1 (a : t m a t r ; y 0 : t v e c ; e p s : r e a l ; n : i n t e g e r );
В х о д н ы е
п а р а м е тр ы :
n: in te g e r -р а з м е р н о с т ь м а т р и ц ы a и д л и н а в е к т о р а у 0;
a : t m a tr - и с х о д н а я м а т р и ц а ;
y 0: t v e c - и с х о д н ы й в е к т о р ;
e p s : real - точ н ость вы чи слен и й .
(п р о ц е д у р а и с п о л ь зу е т 2 ф ун к ц и и :
f u n c t i o n u m n m (a a 1, a a 2 : t m a t r ; n 5 : i n t e g e r ;
va r a : tm a tr ):integer; - перем н ож ен и е м атриц;
f u n c t i o n u m n v (a 5 : t m a t r ; b 5 : t v e c ; n 5 : i n t e g e r ;
v a r b : t v e c ) : i n t e g e r ; - у м н о ж е н и е м а т р и ц ы н а в е к т о р .)
С х ем а ал гор и тм а м ет о д а п р и в ед ен а на р и су н к е 2 5 .
П рим ер.
170
В ы ч и сл и ть со б ст в ен н ы е зн ач ен и я м атрицы
'
2
2 - 2N
2
5 - 4
v -2
- 4
5 ,
Z ' procedure
^
[ it(a:tmatr; y0:tvec;
\egs:real; ^integer),/
I
a1[i,j]:=a2[i,j]
b:=false
I
k:=0
x
A
i=1, i>n
j:=j+1
M
B
j= 1,j>n
X
k:=k+1
D
a1[ij]:=a[ij]
norm:=0
i:=i+1
L
in
in
j:=j+1
B
m
i:=i+1
A
X
C
i=1, i>n
m
b2[i]:=y0[i]
R
i=1, i>n
norm:=norm+
+sqr(b2[i])
I:=I+1
R
X
i:=i+1
C
X
D
b=true or k>15
X
K:=K+1
X
\
norm=sqrt(norm)
P
I=1, I>N
b2[I]:=b2[I]/norm
b:=true
=n
E
i=1, i>n
x
b1[i]:=b2[i]
X
i:=i+1
E
b2[I]
'
^
I:=I+1
P
I
^
Возврат
^
Р и сун ок 25 - С хем а алгоритм а м етода итераци й
171
Т ек ст програм м ы :
program iter;
uses crt;
type
tmatr = array[1..10,1..10] of real;
tvec = array[1..10] of real;
procedure vvod1(n:integer; var a:tmatr);
var
i5,j5:integer;
begin
writeln('Wwedite ',sqr(n),' elementow');
for i5:=1 to n do
for j5:=1 to n do
read(a[i5,j5]);
end;
procedure vvod2(n:integer; var b:tvec);
var
i5:integer;
begin
writeln('Wwedite ',n,' elementow');
for i5:=1 to n do
read(b[i5]);
end;
//перемножение матриц
function umnm(aa1,aa2:tmatr; n5:integer;var a:tmatr):integer;
var
i,j,i1,j1:integer;
r1:real;
begin
for i1:=1 to n5 do
for j1:=1 to n5 do begin
r1:=0;
for i:=1 to n5 do
r1:=r1+aa1[i1,i]* aa2 [i,j 1];
a[i1,j1]:=r1;
end;
end;
//умножение матрицы на вектор
function umnv(a5:tmatr;b5:tvec;n5:integer; var b:tvec):integer;
var
i,i1:integer;
r1:real;
begin
for i1:=1 to n5 do begin
r1:=0;
for i:=1 to n5 do begin
r1:=r1+a5[i1,i]*b5[i];
end;
b[i1]:=r1;
172
end;
end;
procedure it(a:tmatr;y0:tvec;eps:real;n:integer);
var
i,j:integer;
dy:array[1..10] of real;
b1,b2:tvec;
a1,a2:tmatr;
y,norm:real;
b:boolean;
k:integer;
begin
b:=false;
k:=0;
for i:=1 to n do
for j:=1 to n do
a1[i,j]:=a[i,j];
for i:=1 to n do b2[i]:=y0[i];
while (not b)and(k<14) do begin
k:=k+1;
b:=true;
for i:=1 to n do b1[i]:=b2[i];
//умножаем матрицу на вектор
umnv(a1,y0,n,b2);
for i:=1 to n do begin dy[i] :=b2[i]/b 1[i]; end;
y:=0;
for i:=1 to n do begin writeln(i,' : ',dy[i]:4:4); end;
for i:=1 to n do begin y:=y+dy[i]; end;
y:=y/n; writeln('na shage ',k,' chislo ',y);
for i:=1 to n do if abs(y-dy[i])>eps then b:=false;
//умножаем матрицу на матрицу
umnm(a1,a,n,a2);
for i:=1 to n do
for j:=1 to n do
a1[i,j]:=a2[i,j];
for i:=1 to n do begin
for j:=1 to n do
write(a1[i,j]:4:4,' ');
writeln;
end;
readln;
end;
norm:=0;
//нормируем вектор собственных значений
for i:=1 to n do begin norm:=norm+sqr(b2[i]); end;
norm:=sqrt(norm);
for i:=1 to n do begin b2[i]:=b2[i]/norm; writeln(b2[i]:4:7); end;
//в данном сегменте значения выводятся на экран
readln;
end;
173
var
a7:tmatr;
n1:integer;
y1:tvec;
k:integer;
begin
n1:=3;
while 1=1 do begin
clrscr;
writeln('Wibirite:',#13#10,'1- wwod matrici',#13#10,'2-wwod wectora',#13#10,'3wichislit',#13#10,'4-wihod');
read(k);
if k=1 then vvod1(n1,a7);
if k=2 then vvod2(n1,y1);
if k=3 then it(a7,y1,0.01,n1);
if k=4 then halt;
end;
end.
В ы ч и слен и я по п р огр ам м е п р и вели к сл едую щ и м
зул ь татам :
С о б ст в ен н ы е зн ач ен и я
.1 0 0 0 0 Е + 01
.1 0 0 0 0 Е + 0 2
.1 0 0 0 0 Е + 01
В арианты зад ан и й
Т аблица 5
Вари­
ант
1
1
2
3
174
.15446E + 00
.33012E + 00
-.54037E + 00
.58495Е + 00
.10194E + 01
.13770E + 00
.14613E + 00
-.12171E - 01
.37712E + 01
-.43613E + 01
.52997E + 01
.40591E + 01
-.43024E + 00
-.94878E + 00
.15346E + 01
-.16812Е + 01
.13661E + 01
.19687Е + 00
.19598Е + 00
-.17401E - 01
.48587E + 00
-.59594E + 00
.69610E + 00
.55464E + 00
Матрица A
2
.55900E - 01
.12327E + 00
.19939E + 00
-.21843Е + 00
-.51685E + 01
-.74484E + 00
-.74144E + 00
.65832E - 01
.19836E + 00
-.243З0Е + 00
.28419E + 00
.22644E + 00
.24055E + 00
.51413E + 00
-.84158E + 00
.91101Е + 00
-.22275E + 01
-.30089E + 00
-.31930E + 00
.26593E - 01
-.53757E + 00
.62168E + 00
-.75546E + 00
-.57861E + 00
ре -
П родолж ение таблицы 5
Вари­
ант
1
4
5
6
7
8
9
10
11
12
13
.41585Е + 00
.13936E + 01
-.87625E + 00
-.48377E + 01
.11107E + 01
.33082E + 00
-.17127E + 00
.29074E + 00
.94217E + 01
-.82311E + 01
.10527E + 02
.28367E + 01
.22224Е + 00
.17226Е + 01
.10474Е + 02
.54542Е + 01
.42016Е + 00
.19439Е + 00
- 61729Е + 01
-.20038Е + 00
.15788Е + 02
-.10221Е + 02
.46778Е + 01
-.11261Е + 02
.41750Е - 01
.93292Е - 01
-.19135Е + 02
.89416Е + 01
.70954Е - 03
-.99360Е - 04
.37446Е - 03
-.35194Е - 04
.21121Е + 02
-.97494Е + 01
.54455Е + 01
.92933Е + 01
.58993Е + 00
-.43515Е + 01
.67688Е + 01
-.31085Е + 02
-.35891E + 00
.12212E + 01
-.73761E + 00
-.42394E + 01
.10590E + 02
.30755E + 01
-.17300E + 01
.27030E + 01
-.20262E + 01
.171414 + 01
.22359E + 01
-.59074E + 00
.20919Е + 00
.12234Е + 01
.74958Е + 01
.38736Е + 01
-16937Е + 02
-.76571Е + 01
.28952Е + 01
.78932Е + 01
-.31013Е + 01
.20256Е + 01
-.88782Е + 00
.22317Е + 01
.72743Е - 01
-.69765Е - 01
.14194Е + 02
-.66866Е + 01
-.35012Е + 01
.22264Е + 01
.25177Е + 01
-.78859Е + 00
.15882Е + 02
-.74096Е + 01
.39960Е + 01
.70629Е + 01
.36004Е - 01
-.24076Е + 00
.39005Е + 00
-.17198Е + 01
Матрица A
2
-.63151E + 00
-.21488E + 01
.12978E + 01
.74592E + 01
.79845E + 01
.23188E + 01
-.13043E + 01
2.20379E + 01
.20679E + 01
-.17494E + 01
-.22819E + 01
.60288 E + 00
.26602Е + 00
.15558Е + 01
.95322Е + 01
.49260Е + 01
.10087Е + 02
.45605Е + 01
-.17253Е+ 01
-.47011Е + 01
-.71755Е + 01
.46865Е + 01
-.20541Е + 01
.51635E - 01
-.20820Е - 01
.19967Е - 01
.40626Е + 01
.19138Е + 01
.23236Е + 02
.14775Е + 02
.16709Е + 02
-.52335Е + 01
-.32325Е + 00
.15081Е + 00
-.81334Е - 01
-.14376Е + 00
-.32946Е + 00
.22030Е + 01
-.35692Е + 01
.15737Е + 02
.48148E + 00
.16136E + 01
-.10145E + 01
-.56012E + 01
-.37547E + 01
-.11183Е + 01
.57899E + 00
-.98286E + 00
-.27418E + 01
.23953E + 01
.30634E + 01
-.82550E + 00
.19367Е + 00
.15012Е + 01
.91273Е + 01
.47530Е + 01
-.28570Е + 01
-.13218Е + 01
.41974Е + 00
.13625Е + 01
-.71410Е + 01
.46230Е + 01
-.21158Е + 01
.50935Е + 01
.27069Е - 01
.60487Е - 01
-.12406Е + 02
.57974Е + 01
-.16032Е + 00
.22450Е - 01
-.84609Е - 01
.79521Е - 02
-.13430Е + 02
.61993Е + 01
-.34626Е + 01
-.59092Е + 01
.27315Е + 00
-.20148Е + 01
.31341Е + 01
-.14393Е + 02
175
Продолжение таблицы 5
Вари­
ант
1
14
15
16
17
18
19
20
21
22
23
176
.46329Е + 00
.37616Е + 00
-.42388Е + 00
.28498Е + 00
.23797Е + 02
-.72308Е + 01
-.74144Е + 01
-.96619Е + 00
.33057Е + 01
-11653Е + 02
.27268Е + 02
.32367Е + 02
.16823Е + 01
.19161Е + 01
.7З100Е - 01
-.28993Е + 01
.23026Е + 02
-.34268Е + 01
.25324Е + 01
-.24584Е + 01
.93047Е + 01
-.20747Е + 02
-.50813Е + 02
.23840Е + 01
.29497Е + 01
.46102Е + 01
.63919Е + 01
.53881Е + 01
.18899Е + 02
-15438Е + 00
.11694Е + 00
.15299Е + 00
.18736Е + 02
-.29757Е + 02
.31857Е + 02
-.45869Е + 02
.36164Е + 01
.74821Е + 01
-.17309Е + 02
.38860Е + 01
Матрица A
2
.23325Е + 02
.56599Е + 01
.19986Е + 02
.48497Е + 01
-.21495Е + 02
-.52159Е + 01
.15141Е + 02
.36742Е + 01
-.96479Е + 01
.25078Е + 02
.28581Е + 01
-.74291Е + 01
.30008Е + 01
-.78002Е + 01
.38190Е + 00
-.99269Е + 00
.10035Е + 01
.54364Е + 00
-.31905Е + 01
-17284Е + 01
.76123Е + 01
.41118Е + 01
.88617Е + 01
.48006Е + 01
-.12521Е + 02
.17330Е + 02
-14239Е + 02
.19707Е + 02
-.90481Е + 00
.12523Е + 01
.21545Е + 02
-.29821Е + 02
-.28865Е + 02
-.27154Е + 02
.44373Е + 01
.41743Е + 01
-.30771Е + 01
-.28947Е + 01
.31833Е + 01
.29947Е + 01
-.96771Е + 00
.79337Е + 00
.25205Е + 01
-.20664Е + 01
.60245Е + 01
-.49391Е + 01
-.28963Е + 00
.23745Е + 00
-.87224Е + 01
-.13989Е + 02
-.13269Е + 02
-.21272Е+ 02
-.18646Е + 02
-.29905Е + 02
-.15501Е + 02
-.24861Е + 02
.47944Е + 02
-.21890Е + 02
-.43842Е + 00
.20017Е + 00
-.45833Е - 01
.20926Е - 01
.43447Е + 00
-.19837Е + 00
-.80167Е - 01
-.25998Е + 00
.57914Е - 01
.18781Е + 00
-.12683Е + 00
-.41130Е + 00
.89269Е - 01
.28950Е + 00
.10248Е + 02
-.17581Е + 01
.22156Е + 02
-.38041Е + 01
-.50828Е + 02
.87201Е + 01
.11507Е + 02
-.19742Е + 01
.33563Е + 01
.27251Е + 01
-.30708Е + 01
.20646Е + 01
-.20370Е + 02
.61895Е + 01
.63466Е + 01
.82706Е + 00
.99381Е + 00
-.35034Е + 01
.81975Е + 01
.97306Е + 01
.58778Е +01
.66946Е + 01
.25541Е + 00
-.10130Е + 02
-.26187Е + 02
.38973Е + 01
-.28802Е + 01
.27959Е + 01
.14105Е + 01
-.31451Е + 01
-.77027Е + 01
.36139Е + 00
.65990Е + 01
.10314Е + 02
.14300Е + 02
.12054Е + 02
-.28868Е + 02
.23582Е + 00
-.17863Е + 00
-.23370Е + 00
.16584Е + 00
-.26340Е + 00
.28199Е + 00
-.40601Е + 00
.57433Е + 01
.11883Е + 02
-.27490Е + 02
.61716Е + 01
Продолжение таблицы 5
1
24
25
26
27
28
29
30
.12738Е +02
.16202Е + 01
.15111Е + 01
.81142Е + 00
.30846Е + 02
-.36344Е + 02
.17157Е + 02
.53507Е + 02
.27346Е + 01
.91361Е + 01
.12961Е + 02
-.28402Е + 02
.63868Е + 01
.18697Е + 01
-.17156Е + 01
.75164Е + 00
.43510Е + 02
-.38692Е + 02
-.48615Е + 02
-.17455Е + 02
.10921Е + 01
.74301Е + 01
.26781Е + 01
.42614Е + 02
.17965Е + 01
.78083Е + 00
.26239Е + 00
-.82565Е + 00
.26061Е + 01
.35161Е + 00
.30380Е + 00
.17609Е + 00
-.40806Е + 01
.49263Е + 01
-.20743Е + 01
-.72527Е + 01
-.11110Е + 01
-.35849Е + 01
-.51725Е + 01
.11145Е +02
-.67524Е + 02
-.18932Е + 02
.18209Е + 02
-.76109Е + 01
.59136Е + 01
-.50907Е + 01
-.65295Е + 01
-.22966Е + 01
-.12118Е + 01
-.72230Е + 01
-.07865Е + 01
-.41427Е + 02
.49866Е + 02
.22034Е + 02
.60831Е + 01
-.23299Е + 02
2
.63995Е + 02
.86341Е + 01
.74599Е + 01
.43244Е + 01
-.36208Е + 00
.43712Е + 00
-.18406Е + 00
-.64354Е + 00
.50222Е + 01
.16206Е + 02
.23383Е + 02
-.50380Е + 02
-.24412Е + 02
-.68445Е + 01
.65832Е + 01
-.27516Е + 01
-.11467Е + 02
.98719Е + 01
.12662Е + 02
.44536Е + 01
-.83855Е + 00
-.49981Е + 01
-.49087Е + 02
-.28666Е + 02
-.55218Е + 02
-.24399Е + 02
-.67359Е + 01
.25799Е + 02
-.27195Е + 02
-.34589Е + 01
-.32261Е + 01
-.17323Е + 01
-.41187Е + 01
.48529Е + 01
-.22910Е + 01
-.71445Е + 01
.32234Е + 01
. .10769Е + 02
.15278Е + 02
-.33479Е + 02
-.20908Е + 02
-.61208Е + 01
.56162Е + 01
-.24606Е + 01
-.12245Е + 02
.10889Е + 02
.13682Е + 02
.49125Е + 01
.96881Е + 00
.65916Е + 01
.76564Е + 01
.37805Е +02
-.11507Е + 02
-.50015Е + 01
-.16807Е + 01
.52886Е + 01
177
Л а б о р а т о р н а я р а б о та № 7
П риближ ение ф ункций
И н тер п ол я ц и он н ы й п ол и н ом Л агранж а
F u n c t i o n L a g r ( n : i n t e g e r ; x , y : V e c t o r ; q : r e a l ): r e a l ;
В х о д н ы е
п а р а м е т р ы
: n - чи сло узл ов и н тер п о -
л я ц и и ; x - м асси в р а зм ер н о ст и n , со д ер ж а щ и й зн ач ен и я у з лов и н т ер п о л я ц и и ; у - м асси в р а зм ер н о ст и n , со д ер ж а щ и й
зн ач ен и я ф ун к ц и и в у зл а х и н т ер п о л я ц и и ; q - т о ч к а , в к ото р ой вы ч и сл яем зн а ч ен и е ф у н к ц и и .
В ы х о д н ы е
п а р а м е т р ы
: з н а ч е н и е ф у н к ц и и , вы -
ч и сл ен н ое с пом ощ ью и н терп оляц и он н ого полином а Ла гранж а в точке q .
С хем а ал гор и тм а п р и в ед ен а на р и су н к е 2 6 .
П рим ер.
гранж а
И н тер п ол и р овать
с
полином а
таб л и ч н у ю ф ун к ц и ю в зад а н н ы х т о ч к а х .
Xi
1
yi
2 ,0 5
Xi
6
yi
1 ,8 8
2
1 ,9 4
7
1 ,7 1
3
1 ,9 2
8
1 ,6 0
4
1 ,8 7
9
1 ,5 6
5
1 ,7 7
10
1 ,4 0
Т ек ст ф ун к ц и и :
function Lagr(n:integer; x,y:Vector; q:real):real;
var i,j:integer;
l,s:real;
BEGIN
L:=0;
for i:=1 to n do
begin
s:=1;
for j:=1 to N do
if j<>i then s:=s*(q-x[j])/(x[i]-x[j]);
L:=L+y[i]*s;
end;
Lagr:=L; END;
178
пом ощ ью
Л а­
В ы ч и слен и я по п р огр ам м е пр и вели к сл едую щ и м
ре -
зул ь татам :
X= 1 . 0 0
у = 2 .0 5 0
x = 1 .5 0
у = 2 .3 8 6
x = 2 .0 0
У= 1 .9 4 0
У= 1 .8 3 3
x = 2 .5 0
x = 3 .0 0
x = 3 .5 0
x = 4 .0 0
x = 4 .5 0
x = 5 .0 0
x = 5 .5 0
x = 6 .0 0
x = 6 .5 0
x = 7 .0 0
x = 7 .5 0
x = 8 .0 0
x = 8 .5 0
x = 9 .0 0
У= 1 .9 2 0
У= 1 .9 4 8
У= 1 .8 7 0
У= 1 .7 8 1
У= 1 .7 7 0
У= 1 .8 3 1
У= 1 .8 8 0
У= 1 .8 3 8
У= 1 .7 1 0
У= 1 .5 9 6
У= 1 .6 0 0
У= 1 .6 7 5
x = 9 .5 0
У= 1 .5 6 0
У= 1 .0 9 5
x = 1 0 .0 0
У= 1 4 0 0
179
Р и сун ок
26
-
С хем а
алгоритм а
приближ ения
ф ункций
п ол и н ом ом Л агранж а
В арианты
задан и й
для
реш ен и я
задач и
приближ ени я
ф у н к ц и й п р и в ед ен ы в т а б л и ц е 6.
И н тер п ол и р ован и е ф ункций с пом ощ ью к уби ч еск ого
сплай на
Procedure SPLINE(n1:Byte; xl,yl,al,bl,cl,dl,ul,vl:M ass;
var z1:Mass; xx1:Real; var s:real ;indl:Byte);
В х о д н ы е
п а р а м е т р ы : n 1 - чи сл о узл о в интер п о л я ц и и ; x 1 - м а с с и в р а з м е р н о с т и n 1, с о д е р ж а щ и й з н а ч е н и я у з л о в и н т е р п о л я ц и и ; y 1 - м а с с и в р а з м е р н о с т и n 1, с о д е р ж а щ и й з н а ч е н и я ф у н к ц и и в у з л а х и н т е р п о л я ц и и ; a 1, b 1,
c 1 , d 1 - р а б о ч и е м а с с и в ы р а з м е р н о с т и n 1; u 1, v 1 - р а б о ч и е
м а с с и в ы р а з м е р н о с т и n 1 + 1; x x 1 - т о ч к а , в к о т о р о й в ы ч и с 180
ляем значение сп л ай н а; ind 1 - указатель реж им а р аб о ты :
ind 1=0 - програм м а вы чи сляет коэф ф ициенты сплайна и
значение сплайна в точке хх 1, ind 1= 1 - коэф ф ициенты
сплайна считаю тся известны м и и програм м а вы числяет
только значение сплайна в точке хх 1.
В ы х о д н ы е п а р а м е т р ы : s 1 - значение сплайна в
точке хх 1; z 1 - м ассив разм ерн ости n 1, содерж ащ ий ко эф ф ициенты сп л ай н а.
П роцедура SPLIN E содерж ит обращ ение к подпрограм ме PRO G O N реш ения систем ы линейны х уравнени й с трех ди агон альн ой м атр и ц ей .
Procedure P R O G O N (a 2,b 2,c 2,d 2 ,u 2,v 2 ; Mass;
var х 2 ; Mass; n 2 ; I n te g e r );
П роцедура P R O G O N реш ает линейную систем у с трех ди агон альн ой м атрицей в и д а:
A [ i ]* х [ i-1]-b [ i ]* х [ i ]+ c [ i ]* х [ i + 1]=d [ i ]
м етодом п р о го н к и .
Входные
п а р а м е т р ы : n 2 - разм ерность систе м ы ; a 2, b 2, c 2, d 2 - м ассивы разм ерн ости n 2, элем енты рас полож енны е на д и агон алях м атрицы и правы е части систе м ы ; u 2, v 2 - рабочие м ассивы разм ерности n 2+1.
В ы х о д н ы е п а р а м е т р ы : х 2 - м ассив разм ерно сти n 2, содерж ащ ий реш ение си стем ы .
С хема алгоритм а приведена на рисунке 27.
П р и м е р . И нтерп олировать табличную функцию с по мощ ью кубического сплайна в заданны х то ч к ах .
х;
у;
х;
у;
1
2,
6
1,
05
2
88
1,
94
71
1,
3
60
1,
87
1,
8
92
4
1,
7
1,
9
56
181
1,
5
77
1,
10
40
Т ек ст п р огр ам м ы :
Program VM_SPLINE;
const
n = 10;
type
Mass = array [1..20] of Real;
const
x : Mass = (1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0,0,0,0,0);
y : Mass = (2.05,1.94,1.92,1.87,1.77,1.88,1.71,1.60,1.56,1.40,0,0,0,0,0,0,0,0,0,0);
var
a,b,c,d,u,v,z : Mass;
ind : Byte;
xx, s : Real;
i : byte;
}
* Процедура PROGON решает линейную систему с трехдиагональной *}
* матрицей вида:
*}
* a2[i]*x2[i-1]-b2[i]*x2[i]+c2[i]*x2[i+1]=d2[i]
*}
* методом прогонки
*}
* n2
- размерность системы
*}
* a2,b2,c2,d2 - массивы размерности n2, элементы расположенные на *}
* диагоналях матрицы и правые части системы
*}
* u2,v2
- рабочие массивы размерности n2+1
*}
*
*}
* Результат:
*}
* x2
- массив размерности n2, содержащий решение системы *}
}
Procedure PROGON(a2,b2,c2,d2,u2,v2 : Mass; var X2 : Mass; n2 : Integer);
var
i, j, i1, im, nm, nn : byte;
zz : Real;
begin
a2[1]:= 0;
c2[n2] := 0;
u2[1] := 0;
v2[1] := 0;
for i := 1 to n2 do
begin
i1 := i + 1;
zz := 1/(b2[i]-a2[i]*v2[i]);
v2[i1] := c2[i]*zz;
u2[i1] := (a2[i]*u2[i] - d2[i])*zz;
end;
nm := n2-1;
nn := n +1;
x2[n2] := u2[nn];
for j := 1 to nm do
begin
i := nn - j;
im := i-1;
182
x2[im] := v2[i]*x2[i]+u2[i];
end;
end;
}
* Программа SPLINE строит кубический сплайн для интерполирования *}
* таблично заданной функции
*}
* n1 - количество узлов интерполяции
*}
* xl - массив размерности n1, содержит узлы интерполяции
*}
* yl - массив размерности nl, содержит значение функции в узлах : }
* a1,b1,c1,d1 - рабочие массивы размерности nl
*}
* u1,v1 - рабочие массивы размерности n1+1
*}
* z1 - массив размерности n1, содержит коэффициенты сплайна
}
* ind1 - указатель режима работы:
*}
* ind1=0 коэффициенты вычисляются
}
* ind1=1 коэффициенты считаются известными
}
*}
* xx1 - точка, в которой вычисляется функция
*
*}
*}
* Содержит обращение к подпрограмме PROGON
*
*}
* Результат:
*}
* s1 - приближенное значение функции в точке xx1
}
===================================================================}
Procedure SPLINE(n1:Byte;x1,y1,a1,b1,c1,d1,u1,v1:Mass;var z1:Mass; xx1:Real;var s:real;ind1:Byte);
var
i, j, nm : Integer;
hj, hj 1, am, al : Real;
t,t1,t2,t12,s1 : Real;
Label M2,M4;
begin
nm := n - 1;
if ind <> 0 then goto M2;
a1[1]:= 0;
b1[1] := -2;
c1[1] := 1;
d1[1] := 3*(y1[2] - y1[1])/(x1[2]-x1[1]);
For j := 2 to nm do
Begin
hj := x1[j+1] - x1[j];
hj 1 := x1[j] - x1[j-1];
am := hj1/(hj1 + hj);
al := 1 - am;
a1[j] = al;
b1[j] = -2;
c1[j] = am;
d1[j] = 3*(am*(y1[j+1]-y1[j])/hj+al*(y1[j]-y1[j-1])/hj1);
end;
a1[1] = 1;
b1[1] = -2;
c1[1] = 0;
d1[1] = 3*(y1[n1] - y1[n1-1])/(x1[n1]-x1[n1-1]);
PROGON(a1,b1,c1,d1,u1,v1,z1,n1);
M2:
For j := 2 to n do
if x1[j] > xx then break;
t := (xx1-x1[j-1])/(x1[j]-x1[j-1]);
t1 := (1 - t);
183
hj := x1[j] - x1[j-1];
t2 := t*t;
t12 := t1*t1;
si := y1[j-1]*t12*(1 + 2 * t);
s1 := y1[j]*t2*(3 - 2*t)+s1;
s1 := z1[j-1]*hj*t*t12 + s1;
s := s1-z1[j]*hj*t2*t1;
end;
Begin
xx := 1;
ind := 1;
WriteLn('Итерполирование функций с помощью кубического сплайна:');
For i := 1 to 19 do
Begin
Write('x=',xx:0:3,' ');
SPLINE(n,x,y,a,b,c,d,u,v,z,xx,s,ind);
WriteLn('y=',s:0:3);
xx := xx + 0.5;
end;
ReadLn;
End.
В ы числения
по
п рограм м е
о
о
*
II
зул ь татам :
х = 1 .5 0
х = 2 .0 0
х = 2 .5 0
х = 3 .0 0
х = 3 .5 0
х = 4 .0 0
х = 4 .5 0
х = 5 .0 0
х = 5 .5 0
х = 6 .0 0
х = 6 .5 0
х = 7 .0 0
х = 7 .5 0
х = 8 .0 0
х = 8 .5 0
х = 9 .0 0
184
У = 2 .0 5 0
У = 1 .9 9 5
У = 1 .9 4 0
У = 1 .9 3 0
У = 1 .9 2 0
У = 1 .8 9 5
У = 1 .8 7 0
У = 1 .8 2 0
У = 1 .7 7 0
У = 1 .8 2 5
У = 1 .8 8 0
У = 1 .7 9 5
У = 1 .7 1 0
У = 1 .6 5 5
У = 1 .6 0 0
У = 1 .5 8 0
х = 9 .5 0
У = 1 .5 6 0
У = 1 .4 8 0
х = 1 0 .0 0
У = 1 .4 0 0
пр и вели
к следую щ им
ре -
Procedure
Splin( n1 :Byte;x1 ,y1 ,a1 Д
Б1 ,c1 ,d1,u1 ,v1 :Mass;
^var z1 :Mass;xx1 :Real; i
^ a r s:real;ind1 :Byte)y
PROGON(a1,b1,c1,
d1,u1,v1,z1,n1);
0
0
a1[1] := 0;
b1[1] := -2;
I
c1[1] := 1;
d1[1] := 3*(y 1 [2] y 1[1])/(x1[2]-x1[1]);
A
j=2, j>nm
ч
hj := x1[j+1] - x1[j];
hj1 := x1[j] - x 1 [j-1 ];
am := hj 1/(hj 1 + hj);
I
-----
al := 1 - am;
a1[j] := al;
b1[j] := -2;
I
c1[j] := am;
d1 [j] := 3*(am*(y1[j+1]y 1 [j])/hj+al*(y 1 [j]y1[j-1])/hj1);
г
^ -------------
ч
j=j+1
A
1
a1 [1] := 1;
b1[1] := -2;
c1[1] := 0;
t := (xx1-x1[j-1])/
(x1[j]-x1[j-1]);
t1 := (1 - t);
hj := x1[j] - x1 [j-1];
t2 := t*t;
t12 := t1*t1;
s1:= y1[j-1]*t12*(1+2* t)
s 1 := y1[j]*t2*(3
2*t)+s1;
s1:= z1[j-1]*hj*t*t12+ s 1
s := s1-z1[j]*hj*t2*t1;
Возврат
0
Р и сун ок 27 - С хем а алгоритм а п ри бл и ж ен и я ф ункций с
п ом ощ ью сплай нов
185
В арианты
задан и й
для
реш ен и я
задач и
приближ ени я
ф у н к ц и й п р и в ед ен ы в т а б л и ц е 6.
П риближ ение полином ам и Н ью тона
F u n c t i o n N e w (n : in t e g e r ; x , y : V e c t o r ; q : r e a l ) :re a l;
В х о д н ы е
п а р а м е т р ы
: n - чи сло узл ов и н тер п о -
л я ц и и ; x - м асси в р а зм ер н о ст и n , со д ер ж а щ и й зн ач ен и я у з лов и н тер п о л я ц и и ; у - м асси в р а зм ер н о сти n , содер ж ащ и й
зн ач ен и я ф ун к ц и и в у зл а х и н т ер п о л я ц и и ; q - т о ч к а , в к ото р ой вы ч и сл яем зн а ч ен и е ф у н к ц и и .
В ы х о д н ы е
п а р а м е т р ы : п р и бл и ж ен н о е зн ач ен и е
ф ункции в точке q , вы чи слен ное с пом ощ ью и н терп оляц и онны х ф орм ул Н ью тон а.
С хем а ал гор и тм а п р и в ед ен а на р и су н к е 2 8 .
П рим ер.
И н тер п ол и р овать табл и ч н ую ф унк цию с по -
м ощ ью ф ор м ул Н ью тон а в задан н ы х т о ч к а х .
Xi
1
yi
2,
Xi
6
05
2
88
1,
7
94
71
1,
3
8
92
4
60
1,
56
1,
10
77
Т ек ст ф ун к ц и и :
function New(n:integer;a,b:Vector;x:Real):real;
var i,j,k,f:integer; s,p:real; M:array [1..20,1..20] of real;
BEGIN
for i:=2 to n do m[1,i-1]:=b[i]-b[i-1];
for i:=2 to n-1 do
begin
f:=1;
186
’
9
87
5
yi
40
’
for k:=i downto 2 do f:=f*k;
for j:=2 to n-i+1 do m[i,j-1]:=(m[i-1,j]-m[i-1,j-1])/f;
end;
if (a[n]-x)-(x-a[1])<0 then
begin
S:=b[n];
for i:=1 to N-1 do
begin
P:=1;
for j:=1 to i do P:=P*(x-a[n+1-j]);
s:=s+P*m[i,n-i];
end;
New:=s;
end
else
begin
S:=b[1];
for i:=1 to N-1 do
begin
P:=1;
for j:=1 to i do P:=P*(x-a[j]);
s:=s+P*m[i,1];
end;
New:=s
end;
END;
В ы ч и слен и я по п р огр ам м е пр и вели к сл едую щ и м
ре -
зул ь татам :
х = 1 .0 0
х = 1 .5 0
х = 2 .0 0
х = 2 .5 0
х = 3 .0 0
х = 3 .5 0
х = 4 .0 0
х = 4 .5 0
х = 5 .0 0
х = 5 .5 0
х = 6 .0 0
х = 6 .5 0
х = 7 .0 0
У = 2 .0 5 0
У = 1 .9 8 0
У = 1 .9 4 0
У = 1 .9 2 3
У = 1 .9 2 0
У = 1 .9 2 5
У = 1 .9 3 0
У = 1 .9 3 0
У = 1 .9 1 8
У = 1 .8 9 1
У = 1 .6 8 3
У = 1 .6 3 8
х = 7 .5 0
У = 1 .6 1 5
У = 1 .6 0 5
х = 8 .0 0
У = 1 .6 0 0
187
x = 8 .5 0
у = 1 .5 8 9
X = 9 .0 0
x = 9 .5 0
у = 1 .5 6 0
у = 1 .5 0 2
x = 1 0 .0 0
у = 1 .4 0 0
N e w (n :in t e g e r ;
a ,b :V e c to r;
x :r e a l):r e a l
I ~
A
i= 2 , i> n
m [ 1 ,i- 1 ] : = b [ i] b [ i-1 ]
i= i+ 1
A
\
S = b [n ]
I
/
B
i= 2 , i> n -1
I
Г
I
f:= 1
~ ~ T
Г
I
I
-------
P=1
P=1
I
I
J = 1F,J > I
I
1I
Г
I
1|
-------
J = 1 ,HJ>I
I
—
P := P * (x -a [n + 1 -j])
I
I
С
f: = f* k
I
k = k -1
C
J
D
j = 2, j > n -i+ 1
1I
—
'i
|
j= j + 1
D
I
i= i+ 1
B
P = P * (x -a [j])
I
J
J= J+ 1
F
I
J= J+ 1
H
I
s : = s + P * m [ i,n - i]
I
[
m [i,j-1 ]:= (m [i-1 ,j]m [ i- 1 j - 1 ] ) /f
С
С
1|
G
i= 1 , IG> N -1
~
C
k = i, k < 2
f
|
E
E
I = 1 , IE> N -1
Г
I
T
S = b [1 ]
1
s = s + P * m [ I ,1 ]
I
J
I= I+ 1
E
I= I+ 1
N ew = s
J
J
N ew = s
^
В озв р ат
^
Р и сун ок 28 - С хем а алгоритм а п р и бли ж ен и я ф ункций
полином ам и Н ью тона
В арианты
задан и й
для
реш ен и я
задач и
приближ ени я
ф у н к ц и й п р и в ед ен ы в т а б л и ц е 6.
А п п рок си м ац и я ф ункций м етодом наи м еньш и х квадра тов м н о го ч л ен о м в тор ой с т е п е н и .
188
F u n c tio n K v a d r (n :in te g e r; x ,y :V e c to r ; q :real; v a r
c 0 , c 1 , c 2 : r e a l ) ' . r e a l ; ( и сп о л ь зу ет ся п р о ц е д у р а : S I M Q для
реш ен и я си стем ы у р а в н ен и й . П р оц ед ур а оп и сан а в п ер в ой
л а б о р а т о р н о й р а б о т е ).
В х о д н ы е
п а р а м е т р ы
: n - чи сло у зл о в ; x - м ас -
сив р а зм е р н о ст и n , с о д ер ж а щ и й зн а ч ен и я у з л о в ; y - м асси в
р а зм ер н о ст и n , со д ер ж а щ и й зн ач ен и я ф ун к ц и и в у з л а х ; q т о ч к а , в к ото р ой вы чи сл яем зн а ч ен и е ф у н к ц и и .
В ы х о д н ы е
п а р а м е т р ы
: п р и бл и ж ен н ое зн ач ен и е
ф у н к ц и и в т о ч к е q п р и с в а и в а е т с я и м е н и ф у н к ц и и ; с 0 ,с 1 ,с 2
- п ер ем ен н ы е со д ер ж а т к оэф ф и ц и ен ты ап п р ок си м и р ую щ е го м н о г о ч л е н а в т о р о й с т е п е н и
P 2( x ) = с 0 + с 1* x + с 2 * x 2.
С хем а ал гори тм а п р и в ед ен а на р и сун к е 29.
П рим ер.
А п п рок си м и ровать табл и чн ую ф ункцию м н о -
гочлен ом второй степ ен и м етодом наим еньш их квадр атов.
xi
yi
xi
1
2,
6
05
2
88
1,
7
94
71
1,
3
8
92
4
60
1,
56
1,
77
’
9
87
5
yi
10
40
’
Т ек ст ф ун к ц и и :
function Kvadr(n:integer;x,y:Vector;q:real;var c0,c1,c2: real;):real;
var i,j:integer;
a:Matr;
b,c:Vector;
s:real;
BEGIN
a[1,1]:=N;
189
s:=0;
for i:=1 to N do
s:=s+x[i];
a[1,2]:=s;
a[2,1]:=s;
s:=0;
for i:=1 to N do
s:=s+x[i]*x[i];
a[1,3]:=s;
a[2,2]:=s;
a[3,1]:=s;
s:=0;
for i:=1 to N do
s:=s+x[i]*x[i]*x[i];
a[2,3]:=s;
a[3,2]:=s;
s:=0;
for i:=1 to N do
s:=s+x[i]*x[i]*x[i]*X[i];
a[3,3]:=s;
s:=0;
for i:=1to N do s:=s+y[i];
b[1]:=s;
s:=0;
for i:=1 to N do s:=s+y[i]*x[i];
b[2]:=s;
s:=0;
for i:=1 to N do s:=s+y[i]*x[i]*x[i];
b[3]:=s;
j:=N;
N:=3;
SimQ(n,a,b,k);
c0:=b[1];
c1:=b[2];
c2:=b[3];
Kvadr:=b[1]+b[2]*q+b[3]*q*q;
END;
В ы числения по програм м е привели к следую щ им ре зу л ь тата м :
с 0= 2.0226666666E + 00
с 1= -1.5181818164E -02
с2= -4.3939393955E -03
x =1.00
y =2.003
x =1.50
y =1.990
x =2.00
y =1.975
190
x = 2 .5 0
x = 3 .0 0
x = 3 .5 0
x = 4 .0 0
x = 4 .5 0
x = 5 .0 0
x = 5 .5 0
x = 6 .0 0
x = 6 .5 0
x = 7 .0 0
x = 7 .5 0
x = 8 .0 0
x = 8 .5 0
x = 9 .0 0
x = 9 .5 0
x = 1 0 .0 0
y = 1 .9 5 7
y := 1 .9 3 8
y = 1 .9 1 6
y := 1 .8 9 2
y = 1 .8 6 5
y = 1 .8 3 7
y = 1 .8 0 6
y = 1 .7 7 3
y = 1 .7 3 8
y = 1 .7 0 1
y = 1 .6 6 2
y = 1 .6 2 0
y = 1 .5 7 6
y = 1 .5 3 0
y = 1 .4 8 2
y = 1 .4 3 1
191
X Function X
I Kvadr(n:integer;x,y: \
I TVector;q:real; var
VcP,c1,c2:real):real
a[1,1]=N;
s=0
a[1,2]=s;
a[2,1]=s;
S=0
a[1,3]=s; a[2,2]=s;
Рисунок 29 - С хем а алгоритм а аппроксим ации ф ункций
м етодом наим еньш их квадратов м ногочленом второй с т е пени
В арианты зад ан и й . Значения x i=i х 0,1; i = 1 ,2 ...2 0 одина ковы е для всех вариантов
Т аблица 6
Значения Уi= у (xi)
Вариант 1 Вариант 2 Вариант 3 Вариант 4 Вариант 5 Вариант 6
1
2
3
4
5
6
7
1 2,05
2,02
2,23
2,09
1,99
2,07
2 1,94
2,03
2,05
1,98
2,29
2,17
3 1,92
2,21
2,19
1,67
2,20
2,27
4 1,87
2,62
2,31
2,18
1,65
2,39
2,72
5 1,77
2,17
1,57
2,19
2,10
1,42
2,82
6 1,88
2,27
2,61
2,09
192
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1,71
1,60
1,56
1,40
1,50
1,26
0,99
0,97
0,91
0,71
0,43
0,54
0,19
0,01
2,58
2,73
2,82
3,04
3,03
3,45
3,62
3,85
4,19
4,45
4,89
5,06
5,63
5,91
1,37
1,07
0,85
0,48
0,35
-0,30
-0,61
-1,20
-1,39
-1,76
-2,28
-2,81
-3,57
-4,06
Значения
Вариант 7 Вариант 8 Вариант 9
2,18
-0,10
-0,16
2,43
-0,21
0,01
2,40
0,01
0,10
2,43
0,05
0,16
-0,13
2,65
0,05
-0,23
2,75
0,35
-0,21
2,67
0,19
-0,43
2,66
0,50
2,63
0,74
-0,57
-0,44
1,03
2,75
2,41
-0,44
1,06
2,24
-0,83
1,49
2,12
-0,78
1,79
1,74
2,03
-0,81
3,13
2,35
2,60
3,49
3,82
2,55
2,49
3,95
4,22
2,50
2,52
4,48
2,44
5,06
2,35
5,50
2,26
5,68
2,19
6,19
2,24
6,42
2,34
7,04
1,96
7,57
2,19
8,10
yi= y (xt)
Вариант 10 Вариант 11
2,09
2,15
2,31
2,41
2,72
2,58
2,84
2,77
2,78
3,28
2,97
3,46
4,02
3,00
4,11
3,51
3,43
4,61
5,03
3,58
5,34
3,58
3,54
5,86
3,82
6,33
3,90
6,81
2,12
1,63
1,78
1,52
1,16
1,07
0,85
0,56
0,10
-0,25
-0,65
-1,06
-1,66
-2,01
Вариант 12
0,10
-0,01
-0,19
-0,11
-0,31
-0,78
-0,64
-0,85
-1,18
-1,39
-1,79
-2,02
-2,48
-2,93
193
Продолжение таблицы 6
1
15
16
17
18
19
20
2
3
4
5
6
2,22
7,21
3,77
2,50
3,81
7,67
8,23
2,88
4,00
3,21
3,97
8,68
3,63
4,08
9,35
9,93
3,90
4,08
Значения У1= У (Xi)
Вариант 13 Вариант 14 Вариант 15 Вариант 16 Вариант 17
1 0,17
0,04
-0,02
0,80
0,08
2 0,07
0,14
0,44
0,29
0,47
3 0,17
0,52
0,78
0,37
0,51
4 0,05
0,77
1,01
0,36
0,67
0,93
0,44
5 0,12
1,19
0,69
1,04
6 0,00
1,20
1,60
0,48
1,93
7 0,01
1,20
0,27
1,1
2,22
8 -0,05
1,35
0,39
1,3
9 -0,21
1,39
2,50
0,50
1,7
10 -0,50
1,48
3,01
0,48
2,0
11 -0,50
1,52
3,22
0,69
2,1
12 -0,86
2,4
1,71
3,71
0,50
13 -1,24
1,72
4,23
0,31
2,90
14 -1,47
1,87
4,78
0,37
3,50
0,43
15 -1,79
1,86
5,27
3,99
0,33
16 -2,25
1,89
5,75
4,06
2,04
0,31
4,54
17 -2,55
6,16
1,73
18 -3,18
6,76
0,09
4,99
2,04
19 -3,60
7,30
0,08
5,36
2,03
0,03
20 -3,93
8,00
5,99
Значения yi= У (Xi)
Вариант 19 Вариант 20 Вариант 21 Вариант 22 Вариант 23
1 -1,86
-1,84
-1,92
- 1,65
-1,89
2 -1,95
- 2,00
-2,07
-1,98
-1,60
3 -2,12
-1,72
- 1,87
-2,30
-1,57
4 -2,06
-1,41
- 1,89
-2,26
- 1,58
-2,34
5 -2,15
- 1,75
- 1,69
-1,36
6 -2,00
- 1,59
-2,66
- 1,59
-0,97
-1,44
7 -2,12
-2,88
-1,58
-0,59
-1,64
8 -2,31
-1 ,61
-2,85
-0,71
9 -2,29
- 1,00
-3,16
- 1,55
-0,15
10 -2,57
- 1,17
-3,49
- 1,35
0,01
194
1,57
1,17
0,96
0,63
0,25
-0,01
-1,06
-1,41
-1,40
-1,70
-1,96
-1,91
7
-3,26
-3,91
-4,41
-4,91
-5,30
-6,00
Вариант 18
0,14
0,23
0,44
0,54
0,72
3,76
0,37
0,64
357
3,44
3,41
0,30
-0,0
-0,03
-0,47
-0,68
-0,93
-1,28
-1,53
-1,93
Вариант 24
-1,90
-1,80
-1,82
-1,86
-1,83
-2,00
-2,01
-2,05
-2,46
-2,68
Продолжение таблицы 6
1
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
- 1,33
0,22
-2,56
-0,87
-3,88
-4,22
0,63
-2,86
-0,47
- 1,47
-0,33
-2,85
-4,45
- 1,50
1,07
-3,03
1,42
-0,00
-4,99
- 2,65
0,34
-3,25
-5,36
- 1,65
1,68
-3,08
0,49
-5,71
- 1,87
2,49
-3,29
0,81
-6,51
- 1,61
2,57
-3,67
1,37
-6,76
- 1,86
3,09
1,72
- 1,84
-3,70
-7,35
3,40
2,03
-8,02
-3,85
- 1,91
4,00
Значения у г-= у (xi)
Вариант 25 Вариант26 Вариант27 Вариант 28 Вариант 29
-4,13
-1,80
-1,65
-1,88
- ,01
-1,64
-4,11
-1,66
-1,69
- ,06
-1,41
-1,52
-1,36
- ,88
-3,87
-1,41
-3,74
-0,91
-1,55
-3,98
-1,13
-0,63
-1,16
-4,36
-3,85
-0,82
-0,34
-1,27
-4,18
-3,71
-0,74
-0,12
-1,23
-3,53
-4,16
-076
0,25
-1,36
-4,51
-3,56
-0,64
0,64
-4,53
-1,26
-3,19
-3.04
-0,46
0,96
-1,47
-4,38
-1,72
-2,83
-0,30
1,50
-4,76
-2,54
-0,27
1,77
-1,76
-4,66
-0,22
2,24
-4,82
-2,41
-2,00
2,93
-2,03
-0,11
-4,77
-1,97
-0,02
-5,12
3,17
-2,35
-1,78
-5,23
-1,53
0,11
3,77
-2,46
4,42
-1,04
0,11
-2,88
-5,40
-0,02
-5,84
4,79
-3,27
-0,86
0,03
5,50
-3,68
-5,86
-0,48
0,01
6,01
-3,98
-6,01
0,09
7
-2,85
-2,98
3,30
-3,40
-3,90
-4,37
-4,65
-5,00
-5,42
-6,13
Вариант 30
-3,97
-4,07
-4,04
-4,30
-4,27
-4,54
-4,79
-5,07
-5,30
-5,51
-5,83
-6,06
-6,40
-6,83
-7,54
-7,68
-8,36
-8,91
-9,39
-9,98
195
Л а б о р а т о р н а я р а б о та № 8
Р еш ен и е за д а ч и К ош и
О д н о ш а го в ы е м ето д ы
М етод
Э й лера
Для в сех м е т о д о в , которы е б у д у т оп и сан ы д а л е е , оп р е делим сл едую щ и е типы :
type
TF=Function (x,y 1 ,y 2 :real):real;
// ф ункциональны й
тип;
TFMas =array [ 1 . . 2 ] o f TF; / / м а с с и в ф у н к ц и й т и п а T F ;
TFunZnach =array [ 1 . . 2 , 1 . . 1 5 0 ] o f real; / / з н а ч е н и я 2 - х
ф ункций;
TMas =array
[ 1 ..2 ]
О писан ие м асси ва
o f real;
TFMas д л я
п р и м ер а на с т р . 199:
Function S Q R N ( a,b :rea l ) : d o u b le ;
begin
i f a<>0 then
sqrn: = exp(b*ln(a))
else sqrn: = 0;
end;
fu n c tio n f 1 ( x,y 1 , y 2 : real ) : r e a l ;
begin
Result:=y 2;
end;
fu n c tio n f2 ( x ,y 1 , y 2 : real ) : real;
begin
Result: = SQ R N ( 2 . 7 1 8 2 8 1 8 2 8 4 6 , - x*y 1 );
end;
var
F m a s :T F M a s ;
//..
Fmas [ 1 ] : = f 1 ;
Fmas [ 2 ] : = f 2 ;
//..
196
П еред вы числением н у ж н о :
1. Задать м ассив T F M a s ;
2. П рисвоить элем ентам м ассива TFMas конкретны е
ф ун кц и и ;
3. Задать массив T F un Z na ch ;
4. П рисвоить первом у столбцу м ассива
TFunZnach зн ач ен и я ;
5. Задать перем енную х и присвоить ей зн ач ен и е.
Р rocedure eiler (a, b: real; n, k o lfu n : integer; var x: r e a l;
f: TFMas; у _1: TFunZ nach);
В х о д н ы е п а р а м е т р ы : a,b - отрезок интегриро в ан и я ; n - количество точек п р и б ли ж ен и я; Kolfun - поря док си стем ы ; x - начальное значение х 0; f - массив ф ун кц и й , содерж ащ ий правы е части си стем ы ; у_1 - м асси в , со держ ащ ий начальны е значения у .
В ы х о д н ы е п а р а м е т р ы : у_1 - м асси в , содерж а щий приближ енное реш ение си стем ы .
С хема алгоритм а п оказан а на рисунке 30.
П р и м е р . Реш ить на отрезке [0,3] с ш агом 0,1 задачу
Кош и
^ /d x = у2
Г у1(0) = 0
<
<
dy2 / d x = e~x ’'
1 у 2 (0) = 0
Т екст п р о ц ед у р ы :
procedure eiler (a,b:real;n,kolfun:integer;var x:real;f:TFMas; y_1:TFunZnach);
var
i,k:integer;
t:real;
begin
Form 1.StringGrid 1.Cells [0,1]:='Y 1';
Form1.StringGrid1.Cells[0,2]:='Y2';
t:=(b-a)/n;
x:=x+t;
for i:=2 to n do begin
for k:=1 to kolfun do y_1[k,i]:=y_1[k,i-1]+t*f[k](x,y_1[1,i-1],y_1[2,i-1]);
// Выводим значения
Form1.StringGrid 1.Cells[i, 1] :=FloatToStrF(y_1[ 1,i] ,ffExponent,4,6);
Form1.StringGrid1.Cells[i,0]:='X='+FloatToStr(x);
Form1.StringGrid1.Cells[i,2]:=FloatToStrF(y_1[2,i],ffExponent,4,6);
197
x:=x+t;
end;
//Выводим значения
Form1.StringGrid1.Cells[1,1]:=FloatToStrF(y_1[1,1],ffExponent,4,6);
Form 1. StringGrid 1.Cells[1,0] :='X='+FloatToStr(a);
Form1.StringGrid1.Cells[1,2]:=FloatToStrF(y_1[2,1],ffExponent,4,6);
end;
В ы числения
по
п рограм м е
п р и вел и
к следую щ и м
зул ь татам :
x = 0
х = 0 ,1
х = 0 ,2
х = 0 ,3
х = 0 ,4
х = 0 ,5
и
о
х = 0 ,6
х = 0 ,8
х = 0 ,9
х = 1
х = 1 ,1
х = 1 ,2
х = 1 ,3
х = 1 ,4
х = 1 ,5
х = 1 ,6
х = 1 ,7
х = 1 ,8
х = 1 ,9
х = 2
х = 2 ,1
х = 2 ,2
х = 2 ,3
х = 2 ,4
y 2 = 6 ,2 6 9 E -2
y 1 = 1 ,0 5 0 E -2
y 1 = 3 ,1 5 0 E -2
y 2 = 2 ,0 0 0 E - 1
y 2 = 2 ,9 9 6 E - 1
y 1 = 6 ,2 9 6 E - 2
y 1 = 1 ,0 4 8 E - 1
y 1 = 1 ,5 6 7 E - 1
y 2 = 3 ,9 8 1 E - 1
y 1 = 2 ,1 8 4 E - 1
y 1 = 2 ,8 9 4 E - 1
y 2 = 6 ,7 6 1 E - 1
y 1 = 3 ,6 9 0 E - 1
y 1 = 4 ,5 3 2 E - 1
y 1 = 5 ,4 7 4 E - 1
y 2 = 8 ,3 3 3 E - 1
y 1 = 6 ,4 8 0 E - 1
y 1 = 7 ,5 3 9 E - 1
y 1 = 8 ,6 4 5 E - 1
y 2 = 1 ,0 0 8 E + 0
y 1 = 9 ,7 8 7 E - 1
y 1 = 1 ,0 9 6 E + 0
y 1 = 1 ,2 1 5 E + 0
y 2 = 1 ,1 1 4 E + 0
y 1 = 1 ,3 3 6 E + 0
y 1 = 1 ,4 5 9 E + 0
y 1 = 1 ,5 8 2 E + 0
y 1 = 1 ,7 0 6 E + 0
y 1 = 1 ,8 3 0 E + 0
y 1 = 1 ,9 5 5 E + 0
y 2 = 1 ,0 0 0 E - 1
y 2 = 4 ,9 4 6 E - 1
y 2 = 5 ,8 7 7 E - 1
y 2 = 7 ,5 8 3 E - 1
y 2 = 8 ,9 5 7 E - 1
y 2 = 9 ,5 5 9 E - 1
y 2 = 1 ,0 5 1 E + 0
y 2 = 1 ,0 8 6 E + 0
y 2 = 1 ,1 3 6 E + 0
y 2 = 1 ,1 5 2 E + 0
y 2 = 1 ,1 6 4 E + 0
y 2 = 1 ,1 7 2 E + 0
y 2 = 1 ,1 7 8 E + 0
y 2 = 1 ,1 8 2 E + 0
y 2 = 1 ,1 8 4 E + 0
y 2 = 1 ,1 8 6 E + 0
y 1 = 2 ,0 8 0 E + 0
y 1 = 2 ,2 0 4 E + 0
y 1 = 2 ,3 2 9 E + 0
y 2 = 1 ,1 8 7 E + 0
y 2 = 1 ,1 8 8 E + 0
х = 2 ,9
y 1 = 2 ,4 5 4 E + 0
y 1 = 2 ,5 7 9 E + 0
y 1 = 2 ,7 0 4 E + 0
х = 3
y 1 = 2 ,8 1 2 E + 0
y 2 = 1 ,1 8 8 E + 0
х = 2 ,5
х = 2 ,6
х = 2 ,7
х = 2 ,8
198
y 1 = 0 ,0 0 0 E + 0
y 1 = 0 ,0 0 0 E + 0
y 2 = 1 ,1 8 8 E + 0
y 2 = 1 ,1 8 8 E + 0
y 2 = 1 ,1 8 8 E + 0
y 2 = 1 ,1 8 8 E + 0
ре -
f
procedure eiler
/(a,b:real; n, kolfun: integers
1 var x:real; f:TFMas;
/
y_1:TFunZnach);
t=(b-a) / n
/
I
I=2, I>N
\
K
K=1, K>kolfun
\
y_1[k,i] :=y_1 [k,i-1]+t*
*f[k](x,y_1[1,i-1], y_1[2,i-1])
+
и
и
\
\
I=I+1
I
\
^
)
Возврат
Р и сун ок 30 - С хем а ал гори тм а м ет о д а Э й л ер а
В арианты
за д а н и й для
реш ен и я
задач и К ош и
м етодом
Э й л ера п р и веден ы в табл и ц е 7.
М ет о д Э й л ер а -К ош и
Р rocedure pro g n o z ( a,b: real; n, kolfun: integer; var x:
real; f: TFMas; var y_ 1: TFunZ nach );
В х о д н ы е
вания;
n
-
п а р а м е т р ы
:
a,b
-
отр езок и н тегри ро -
к оли ч ество точек п р и бл и ж ен и я ;
док си стем ы ; x -
н ач ал ьн ое зн ач ен и е
x0; f
Kolfun
: y_1 -
поря -
- м ассив ф ун к -
ц и й , содер ж ащ и й правы е ч асти си ст ем ы ; y_1 дер ж ащ и й начальное зн ач ен и е y .
В ы х о д н ы е
п а р а м е т р ы
-
м а сси в , со -
м асси в, содерж а -
щ ий п р и бл и ж ен н ое реш ен и е си стем ы .
199
С х е м а а л г о р и т м а п о к а за н а н а р и с у н к е 31 .
Пр и ме р .
Р еш и ть
на
отр езк е
[ 0 ,3 ]
с ш агом
0 ,1
за д а ч у
К ош и
dy 1 / d x = y 2
<
dy2 / d x = e~
Гy1(0) = 0
<
{y 2 (0 ) = 0
Т екст п р о ц ед у р ы :
procedure prognoz (a,b:real;n,kolfun:integer;var x:real;f:TFMas; var y_1:TFunZnach);
var
i,k:integer;
t:real;
begin
t:=(b-a)/n;
x:=x+t;
for i:=2 to n do begin
for k:=1 to kolfun do
y_1[k,i]:=y_1[k,i-1]+t*f[k](x+0.5*t,y_1[1,i-1]+0.5*t*y_1[1,i-1],y_1[2,i1]+0.5*t*y_1[2,i-1]);
// Выводим значения
Form1.StringGrid1.Cells[i,1]:=FloatToStrF(y_1[1,i],ffExponent,4,6);
Form1.StringGrid1.Cells[i,0]:='X='+FloatToStr(x);
Form1.StringGrid1.Cells[i,2]:=FloatToStrF(y_1[2,i],ffExponent,4,6);
x:=x+t;
end;
// Выводим значения
Form1.StringGrid1.Cells[1,1]:=FloatToStrF(y_1[1,1],ffExponent,4,6);
Form1.StringGrid1.Cells[1,0]:='X='+FloatToStr(a);
Form1.StringGrid1.Cells[1,2]:=FloatToStrF(y_1[2,1],ffExponent,4,6);
end;
В ы ч и сл ен и я по п р огр ам м е п р и вел и к сл едую щ и м ре зул ь татам :
x = 0
x
x
x
x
x
x
x
x
x
200
= 0 ,1
= 0 ,2
= 0 ,3
= 0 ,4
= 0 ,5
= 0 ,6
= 0 ,7
= 0 ,8
= 0 ,9
y1
y1
y1
y1
y1
y1
y1
y1
y1
y1
= 0 ,0 0 0 E + 0
= 0 ,0 0 0 E + 0
= 1 ,0 5 0 E - 2
= 3 ,1 5 0 E -2
= 6 ,2 9 6 E - 2
= 1 ,0 4 8 E - 1
= 1 ,5 6 7 E - 1
= 2 ,1 8 4 E - 1
= 2 ,8 9 4 E - 1
= 3 ,6 9 0 E - 1
x = 1
y 1 = 4 ,5 6 5 E - 1
x
x
y1
y1
= 1 ,1
= 1 ,2
= 5 ,5 1 0 E - 1
= 6 ,5 1 5 E - 1
y2 =
y2 =
y2=
y2=
=
y2
y2=
y2=
=
y2
y2=
y2=
=
y2
=
y2
=
y2
6 ,2 6 9 E -2
1 ,0 0 0 E - 1
2 ,0 0 0 E - 1
2 ,9 9 6 E - 1
3 ,9 8 1 E - 1
4 ,9 4 6 E - 1
5 ,8 7 7 E - 1
6 ,7 6 1 E - 1
7 ,5 8 3 E - 1
8 ,3 3 3 E - 1
8 ,9 9 8 E - 1
9 ,5 7 5 E - 1
1 ,0 0 6 E + 0
х = 1 ,3
х = 1 ,4
y 1 = 7 ,5 7 2 E - 1
х = 1 ,5
х = 1 ,6
y 1 = 9 ,8 0 1 E - 1
х = 1 ,7
х = 1 ,8
y 1 = 1 ,2 1 3 E + 0
х = 1 ,9
х = 2
y 1 = 1 ,4 5 2 E + 0
х = 2 ,1
х = 2 ,2
х = 2 ,3
y 1 = 8 ,6 7 0 E - 1
y 1 = 1 ,0 9 6 E + 0
y 1 = 1 ,3 3 2 E + 0
y 1 = 1 ,5 7 3 E + 0
y 1 = 1 ,6 9 4 E + 0
y 1 = 1 ,8 1 6 E + 0
y 1 = 1 ,9 3 7 E + 0
х = 2 ,4
х = 2 ,5
y 1 = 2 ,0 5 9 E + 0
х = 2 ,6
х = 2 ,7
y 1 = 2 ,3 0 3 E + 0
х = 2 ,8
х = 2 ,9
х = 3
y 1 = 2 ,5 4 6 E + 0
y 1 = 2 ,1 8 1 E + 0
y 1 = 2 ,4 2 5 E + 0
y 1 = 2 ,6 6 8 E + 0
y 1 = 2 ,7 1 4 E + 0
y2 = 1 046E +0
y2 = 1 077E +0
y2 = 1 102E +0
y2 = 1 120E +0
y 2 = 1 133E +0
y 2 = 1 143E +0
y 2 = 1 149E +0
y 2 = 1 154E +0
y 2 = 1 157E +0
y 2 = 1 158E +0
y 2 = 1 160E +0
y 2 = 1 160E +0
y 2 = 1 161E +0
y 2 = 1 161E +0
y 2 = 1 161E +0
y 2 = 1 161E +0
y 2 = 1 161E +0
y 2 = 1 161E +0
201
Р и с у н о к 31 - С х е м а а л г о р и т м а м е т о д а Э й л ер а - К о ш и
В арианты
за д а н и й для
реш ен и я
задач и
К ош и
м етодом
Э й л ер а -К ош и п р и в еден ы в табл и ц е 7.
М етод
Р у н г е -К у т т а 4 - го п о р я д к а
P r o c e d u r e R u n g e _ K u t (a ,b : re a l; n: i n te g e r ; v a r x: rea l;
var y_1: T F unZ nach; F M as: T F M a s);
В х о д н ы е
вания; n -
п а р а м е т р ы
: a,b -
отр езок и н тегри ро -
к оли ч ество точек п р и бл и ж ен и я ; K o lfu n -
док си стем ы ; x -
н а ч а л ь н о е з н а ч е н и е x 0; f -
м ассив ф ун к -
ц и й , со д ер ж ащ и й правы е ч асти си ст ем ы ; y_1 д ер ж ащ и й н ач ал ьн ое зн ач ен и е y .
В ы х о д н ы е
п а р а м е т р ы
: y _1 -
м а сси в , со -
м асси в, содерж а -
щ ий п р и бл и ж ен н ое реш ени е си стем ы .
С х ем а ал гор и тм а п ок азан а на р и су н к е 32.
202
поря -
П р и м е р . Реш ить на отрезке [0,3] с ш агом 0,1 задачу
Кош и
dyi / dx = У2
<
dy2 / d x = e" ^
<
У1(0) = 0
У2 (0 )= 0
Т екст п р о ц ед у р ы :
Procedure Runge_Kut(a,b:real;n:integer;var x:real;var y_1:TFunZnach;FMas:TFMas);
var
i,j:integer;
k:array [1..4] of real;
h:real;
begin
h:=(b-a)/n;
for i:=2 to n do
begin
for j:=1 to 2 do
begin
k[1]:=FMas[j](x,y_1[1,i-1],y_1[2,i-1]);
k[2]:=FMas[j](x+h/2,y_1[1,i-1]+h/2*k[1],y_1[2,i-1]+h/2*k[1]);
k[3]:=FMas[j](x+h/2,y_1[1,i-1]+h/2*k[2],y_1[2,i-1]+h/2*k[2]);
k[4] :=FMas[j] (x+h,y_1[ 1,i-1]+h*k[3] ,y_1[2,i-1]+h*k[3]);
y_1[j,i]:=y_1[j,i-1]+h/6*(k[1]+2*k[2]+2*k[3]+k[4]);
end;
x:=x+h;
end;
end;
В ы числения по програм м е привели к следую щ им ре зу л ьтата м :
x =
x =
x =
x =
x =
x =
x =
x =
x =
x =
x =
x =
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1 ,1
= 0,000E +0
У1 = 0,000E +0
У1 = 1,048E-2
У1 = 3,139E -2
У1 = 6,266E -2
У1 = 1,041E-2
У1 = 1,556E-1
У1 = 2,168E-1
У1 = 2,872E-1
У1 = 3,662E-1
У1 = 4,532E-1
У1 = 5,474E-1
У1
У2
У2
У2
У2
У2
У2
У2
У2
У2
У2
У2
У2
=
=
=
=
=
=
=
=
=
=
=
=
6,266E -2
9,967E -2
1,988E-1
2,973E-1
3,944E-1
4,895E-1
5,815E-1
6,693E-1
7,516E-1
8,274E-1
8,957E-1
9,559E-1
203
X = 1 ,2
X = 1 ,3
X = 1 ,4
X = 1 ,5
= 6 ,4 8 0 E - 1
= 7 ,5 3 9 E - 1
У1
У1 = 8 ,6 4 5 E - 1
У1 = 9 , 7 8 7 E - 1
У2 = 1 ,0 0 8 E + 0
У2 = 1 0 5 1 E + 0
У2 = 1 ,0 8 6 E + 0
У2 = 1 1 1 4 E + 0
X = 1 ,6
X = 1 ,7
У1 = 1 , 0 9 6 E + 0
У1 = 1 , 2 1 5 E + 0
У1 = 1 , 3 3 6 E + 0
У2 = 1 1 3 6 E + 0
У2 = 1 1 5 2 E + 0
У2 = 1 1 6 4 E + 0
У2 = 1 1 7 2 E + 0
X = 1 ,8
X = 1 ,9
X = 2
X = 2 ,1
X = 2 ,2
X = 2 ,3
X = 2 ,4
X = 2 ,5
X = 2 ,6
X = 2 ,7
X = 2 ,8
X = 2 ,9
X = 3
204
У1
У1 = 1 , 4 5 9 E + 0
У 1 = 1 ,5 8 2 E + 0
У1 = 1 , 7 0 6 E + 0
У1 = 1 , 8 3 0 E + 0
У1 = 1 , 9 5 5 E + 0
У1 = 2 , 0 8 0 E + 0
У1 = 2 , 2 0 4 E + 0
У1 = 2 , 3 2 9 E + 0
У1 = 2 , 4 5 4 E + 0
У1 = 2 , 5 7 9 E + 0
У1 = 2 , 7 0 4 E + 0
У1 = 2 ,7 9 5 E + 0
У2 = 1
У2 = 1
У2 = 1
У2 = 1
178E +0
182E +0
184E +0
186E +0
У2 = 1 1 8 7 E + 0
У2 = 1 1 8 8 E + 0
У2 = 1 1 8 8 E + 0
У2 = 1 1 8 8 E + 0
У2 = 1 1 8 8 E + 0
У2 = 1 1 8 8 E + 0
У2 = 1 1 8 8 E + 0
Р и сун ок 32 - С хем а ал гори тм а м ето д а Р ун ге -К утта
В арианты зад ан и й для р еш ен и я зад ач и К ош и м ет о д о м
Р ун ге -К утта п р и в еден ы в табл и ц е 7.
205
Л а б о р а т о р н а я р а б о та № 9
Р еш ен и е за д а ч и К ош и
М н о г о ш а г о в ы е м ето д ы
М етод
А д а м с а (я в н ы й )
Procedure Adam s ( a,b,h: real; NewValues:TM as;
FMas: TFM as ) ; ( и с п о л ь з у е т п р о ц е д у р у Runge_Kut);
В ы ч и сл я ет все зн ач ен и я ф ун к ц и й на о т р езк е аb.
В х о д н ы е
п а р а м е т р ы : a - начало о тр езк а ; b к о н е ц о т р е з к а ; h - ш а г п р и р а щ е н и я а р г у м е н т а x ; NewValues
- м а сси в (р а зм ер н о ст ь 2 ), со д ер ж а щ и й н ач ал ьн ы е п р и б л и ж ен н ы е зн ач ен и я ф ун к ц и й ( н е о б х о д и м о со зд а т ь и за п о л н и т ь з н а ч е н и я м и и з в а р и а н т а д о в ы з о в а п р о ц е д у р ы );
FMas
- м а сси в (р а зм ер н о ст ь 2 ), со д ер ж а щ и й у к а за т ел и на ф ун к ции правы х ч астей си стем ы (эл ем ен там м асси ва п рисваи в аю тся ф ун к ц и и /1 ,
f2 ,
к отор ы е в ы ч и сл яю т зн ач ен и я п р а -
вы х ч а с т ей с и с т е м ы , д о в ы зов а п р о ц е д у р ы . Ф у н к ц и и о п р е д ел я ю т ся для к а ж д о го вар и ан та о т д е л ь н о ).
В ы х о д н ы е
п а р а м е т р ы
: п р оц едур а вы водит ре -
зу л ь т а т на эк р а н во в р ем я р а б о т ы .
(П р о ц ед у р а и сп о л ь зу ет сл ед у ю щ и е п р оц едур ы и ф унк ции:
Procedure R unge_K ut ( a,h:real; var x:real;
var y_1:TFunZnach; F M as:T F M a s );
н ачальн ы е зн ач ен и я Y м ет о д о м Р у н г е -К утта
-
вы ч и сл яет
для
м етода
А дам са.
В се парам етры ф ор м и р ует п р о ц ед у р а
В х о д н ы е
п а р а м е т р ы
:
a
Adams.
- начальная точка от -
р е зк а ; h - ш аг п р и р ащ ен и я X ; x - н ач ал ь н ое зн а ч ен и е X ;
У _1 - м а с с и в ( р а з м е р н о с т ь ю 2 x 4 ) с о д е р ж а щ и й п р и б л и ж е н ны е зн ач ен и я ф ун к ц и й в точ к е
A ; FMas
- м ассив со дер ж а -
щ ий ук азател и на ф ун к ц и и правы х ч астей (п ер ед а ет ся в
процедуру
A d a m s ).
В ы х о д н ы е
п а р а м е т р ы
: x - зн ач ен и е
X,
на ко -
т о р о м о с т а н о в и л о с ь в ы ч и с л е н и е ; У_ 1 - м а с с и в , с о д е р ж а щ и й
Y.
S Q R N (a ,b :rea l):d o u b le ;
п ер вы е 4 зн ач ен и я
Ф ункция
степень
206
B .)
- в озв оди т ч и сл о
A
в
С хем а ал гори тм а п р и в ед ен а на р и сун к е 33.
П рим ер.
Р е ш и т ь з а д а ч у К о ш и н а о т р е з к е [ 0 ,3 ] с ш а г о м
0 ,1 .
d y x / d x = У2
<
d y 2 / d x = e - ХУ1
F x( x , y 1, y 2 )
F 2 ( x , y 1,y 2)
У2
e ~ xy1
y 1( a )
0
Гy 1(0) = 0
<
[ У2 (0) = 0
y 2( a )
0
a
b
0
3
Т ек ст п р огр ам м ы :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TF=Function (x,y1,y2:real):real;
TFMas=array [1..2] of TF;
TFunZnach=array [1..2,1..4] of real;
TMas=array [1..2] of real;
Function SQRN(a,b:real):double;
begin
if a<>0 then
207
sqrn:=exp(b*ln(a))
else
sqrn:=0;
end;
function f1 (x,y1,y2:real):real;
begin
Result:=y2;
end;
function f2(x,y1,y2:real):real;
begin
Result:=SQRN(2.71828182846,-x*y1);
end;
Procedure Runge_Kut(a,h:real;var x:real;var y_1:TFunZnach;FMas:TFMas);
var
i,j:integer;
k:array [1..4] of real;
begin
for i:=2 to 4 do
begin
for j:=1 to 2 do
begin
k[1]:=FMas[j](x,y_1[1,i-1],y_1[2,i-1]);
k[2]:=FMas[j](x+h/2,y_1[1,i-1]+h/2*k[1],y_1[2,i-1]+h/2*k[1]);
k[3] :=FMas[j] (x+h/2,y_1[ 1,i-1]+h/2*k[2] ,y_1[2,i-1]+h/2*k[2]);
k[4] :=FMas[j] (x+h,y_ 1[1,i-1]+h*k[3],y_1[2,i-1]+h*k[3]);
y_1[j,i]:=y_1[j,i-1]+h/6*(k[1]+2*k[2]+2*k[3]+k[4]);
end;
x:=x+h;
Form 1.StringGrid 1. Cells [i,1] :=FloatToStrF(y_ 1[1,i] ,ffExponent,4,6);
Form 1.StringGrid 1. Cells [i,0] :='X='+FloatToStr(x);
Form 1.StringGrid 1. Cells [i,2] :=FloatToStrF(y_ 1[2,i] ,ffExponent,4,6);
end;
Form1.StringGrid1.Cells[1,1]:=FloatToStrF(y_1[1,1],ffExponent,4,6);
Form 1.StringGrid 1. Cells [1,0] :='X='+FloatToStr(a);
Form1.StringGrid1.Cells[1,2]:=FloatToStrF(y_1[2,1],ffExponent,4,6);
end;
procedure Adams(a,b,h:real;NewValues:TMas;FMas:TFMas);
var
i,n,j:integer;
y_1:TFunZnach;
x:real;
begin
Form 1.StringGrid 1. Cells [0,1] :='Y1';
Form 1.StringGrid 1.Cells [0,2] :='Y2';
x:=a;
n:=Round((b-a)/h);
y_1[1,1]:=NewValues[1];
y_1[2,1]:=NewValues[2];
208
Runge_Kut(a,h,x,y_ 1,FMas);
Form 1.StringGrid 1.ColCount:=n+1;
for i:=5 to n do
begin
for j:=1 to 2 do
NewValues[j]:=y_1[j,4]+h/24*(55*FMas[j](x,y_1[1,4],y_1[2,4])-59*FMas[j](xh,y_1[1,3],y_1[2,3])+37*FMas[jKx-2*h,y_1[1,2],y_1[2,2])-9*FMas[jKx3*h,y_1[1,1],y_1[2,1]));
for j:=2 to 4 do
begin
y_1[1,j-1]:=y_1[1,j];
y_1[2,j-1]:=y_1[2,j];
end;
y_1[1,4]:=NewValues[1];
y_1[2,4] :=NewValues[2];
x:=x+h;
Form 1.StringGrid 1. Cells [i,0] :='X='+FloatToStr(x);
Form1.StringGrid1.Cells[i,1]:=FloatToStrF(NewValues[1],ffExponent,4,6);
Form1.StringGrid1.Cells[i,2]:=FloatToStrF(NewValues[2],ffExponent,4,6);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
NewValues:TMas;
FMas:TFMas;
begin
NewValues[1]:=0;
NewValues[2]:=0;
FMas[1]:=f1;
FMas[2]:=f2;
Adams(0,3,0.1,NewValues,FMas);
end;
end.
В ы ч и слен и я по п р огр ам м е пр и вели к сл едую щ и м
ре -
зул ьтатам :
Л абораторная работа № 9
Вычисления но м ет оду Адамса
Х=0
Х=0,1
Х=0,2
Х=0,3
Х=0,4
Х=0,5
Х=0,6
Х=0,7
Y1
0,000Е+0
0.000Е+0
1,048Е-2
3/I39E-2
G..G00E-2
1,105Е-1
1.G43E-1
2.272Е-1
Y2
0.000Е+0
9,Э67Е-2
1,988Е-1
2.973Е-1
3..95GE-1
4,817Е-1
5.844Е-1
G.724E-1
<□
►
| Вычислить I
209
i= i
Лабораторная работа №9
I 1в1
ш
Вычисления по м ет оду Адамса
Х=0,8
х=о,э
Х=1
Х=1,1
Х = 1 ,2
Х=1,3
Х=1,4
Х=1,5
Y1
2Y3SGE-1
3,778Е-1
4.G42E-1
5..5G8E-1
G.549E-1
7.575Е-1
8.G39E-1
Э732Е-1
Y2
7.545Е-1
8,295Е-1
8Y3G5E-1
Э..550Е-1
1,005Е+0
Ш 6Е+0
Ш О Е+О
1,10GE+0
□
Вычислить
1= а
Лабораторная работа №9
и
Вычисления но м ет оду Адамса
Х=1 ,В
Х=1,7
Х=1,8
Х = 1 ,8
Х=2
Х=2,1
Х=2,2
Х=2,3
Y1
1,085Е+0
1,1 Э8Е+0
1,31 ЗЕ+0
1,42ЭЕ+0
1,545Е+0
1,GG2E+0
1,77ЭЕ+0
1,8Э7Е+0
Y2
1,127Е+0
1,142Е+0
1,153Е+0
1,1 G1E+0
1,1G7E+0
1,170Е+0
1,173Е+0
1,175Е+0
□
Вычислить
=i
Лабораторная работа №9
а
Вычисления по м ет оду Адам са
Х=2,2
Х=2,3
Х=2,4
Х=2,5
Х=2,6
Х=2,7
Х=2,8
Х=2,9
Y1
1,77ЭЕ+0
1,8Э7Е+0
2,014Е+0
2,132Е+0
2..250Е+0
2..3G7E+0
2..485Е +0
2..G03E +0
Y2
1,173Е+0
1,175Е+0
1,17GE+0
1,17GE+0
1,177Е+0
1,177Е+0
1,177Е+0
1,177Е+0
□
Вычислить
210
и
/procedure Adams(a,b,h:real;
NewValues:TMas;
FMas:TFMas)
x=a
y _ l[ l,l] =NewValues[l]
y_l [2,1 ]=NewValues[2]
X
Runge_Kut(a,h,x,y_l,
FMas)
X
NewValues[j]=y_l [j,4]+h/
y_l[l,4]=NewValues[l]
24*(55*FMas[j](x,y_l[l,4],
y_l [2,4]=NewValues[2]
y_l [2,4])-59*FMas[j](x-h,
x=x+h
*FMas [j ](x-2 *h,y_ 1[ 1,2],
y_l[2,2])-9*FMas[j](x-3*h,
y _ l[l,l],y _ l[2 ,l]))
Р и су н о к 33 - С хем а ал гор и тм а я вн ого м ет о д а А д а м са
В арианты зад ан и й
Т аблица 7
№ вари­
анта
1
1
2
3
4
5
Fi(x,yby2)
2
У + у2 + у22)
arctg( х2+ у22)
У1 + х// 2 . 2
/ у1 + У2
бУ1У2
х/,
/ V1+ х 2+ У2
У2(а)
5
0
а
b
3
sin( У1У2 )
У1(a)
4
1
6
-1
7
1
sin( х +У1)
0,5
1,5
0
2
cos(У1 +ХУ2 )
-1
1
0
4
ХУ1У2
1
0
0
5
У, /
/ 41+х 2+у2
0,2
0
-1
1
^2(Х,У1,У2>
211
П родолж ение таблицы 7
№ вари­
анта
1
6
7
8
9
10
11
12
Р\(х,УьУ2)
2
sin( x2+ y22)
sin y2
xcos( У! + У2 )
. 1 cos3У2
siny
sin(yjyi)
arrtg( ^ / + у 2 + у2 )
14
15
16
+x2+ y2
У1 + x/
/ 2. 2
/У1 + У2
sin( xy2)
C0S( У1У2)
y2ln x
17
cos y1cos y2)
18
arctg( V 2+ 2 )
Z 1+У1 +У2
y1+y2
xcos( У1+ y2 )
cos( У1У2)
F2(x,y1,y2)
3
cos(xy1)
cosy1
sin( У1- У2)
cos y1cos y2)
cos(xyjy2)
19
20
21
22
23
+x2+ y2
cos( x +y2)
24
xcos( У1+ y2 )
Л
25
26
27
28
29
30
212
x/
/ V1+ x2+ y2
sin y2
y/yl1+x2+ y12
sin( xy2)
y2ln x
sin( У1У2)
a
b
6
0
1
2
-1
0
7
4
3
5
3
2
sin(yiy2)
1
1
1
4
y2cosx - sin2x
0,8
3,5
2
3
cos(У1+ xy2 )
1
-1
2
4
cos(xy1y2 )
sin( У1+ y2 )
sin( x - y2)
Уг /
/ л]1+x2+ y12
0
0
-2
-3
0
-1
2
0
1
5
2
4
0
1
-1
1
sin y1
0
0
-2
1
cos(xy1)
У1У2
y2cosx - sin2x
0
-1
-1
0
1
5
0
0
2
4
4
4
sin( У1- У2 )
1
1
0
3
sin( x - y2)
У2/
/л/1 + x2+ У12
У, /
/л/1 + x2+ У12
cos(У1У2)
0,7
-0,5
0
4
0
0
0
2
0,2
0
0
3
1
-1
0
1
sin( У1У2)
-2
3
-1
1
x +cos(xy1)
У1У2
cos(xy1У2 )
0
0
-1
0
0
2
0
-5
0
2
0
2
Л
13
У1 (a) У2(a)
4
5
0
0
0,5
-0,5
2
-0,6
0
0
0,5
1,2
Л а б о р а т о р н а я р а б о т а № 10
Р еш ен и е ж е с т к и х си стем О ДУ
М етод Г и р а.
Р rocedure Gir (a,b:Real; n:Integer; х:Ява1;
Var y_ 1 :TMas; F M as:T F M a s).
Входные
п а р а м е т р ы : a - начало о тр езк а, b конец отрезка и н тегр и р о в ан и я; n - количество ш агов при ращ ения аргум ен та Х ; х - начальное значение Х ; у_1 - мас си в , содерж ащ ий приближ енны е значения ф ункций в точке
а ; Fmas - массив ф ункций си стем ы .
Выходные
п а р а м е т р ы : реш ение систем ы ОДУ
на отрезке [ a,b].
(П роцедура и спользует процедуру R unge_ K ut (a,b: Real;
n: Integer; x: Real; Var y_ 1: TMas; FMas: TFM as), которая
вы числяет начальны е значения Y м етодом Рунге - К утта для
м етода Г и р а. П роцедура вы зы вается 4 раза для получения 4
начальны х точек, по которы м будет вы числено искомое
значение Y м етодом Г и р а. Все парам етры ф орм ирую тся
процедурой G ir .
В х о д н ы е п а р а м е т р ы : a - начало отрезка, b конец отрезка и н тегр и р о в ан и я; n - количество ш агов при ращ ения аргум ен та Х ; х - начальное значение Х ; у_1 - мас сив, содерж ащ ий начальное значение ф ункций в точке а ;
Fmas - м ассив ф ункций си стем ы .
В ы х о д н ы е п а р а м е т р ы : у _ 1 - м асси в , содерж а щий приближ енны е значения ф ункций в точках о тр езк а.
О пределим следую щ ие типы :
Type
TF=Function (x,y1,y2:Real):Real;
TFMas=array [1..2] of TF;
TMas=array [1..2] of Real;
Пример задания массива TFMas
Function F1 (x,y1,y2:Real):Real;
Begin
Result:=StrT oInt(F orm 1. StringGrid2 .Cells[1,1])*y1 +
213
+ StrT oInt(Form1.StringGrid2.Cells [2,1])*y2;
End;
Function F2(x,y1,y2:Real):Real;
Begin
Result:=StrT oInt(F orm1.StringGrid2.Cells [1,2])*y1+
+StrT oInt(Form 1. StringGrid2.Cells [2,2])*y2;
End;
Var Fmas:TFMas;
//..
Fmas[1]:=F1;
Fmas[2]:=F2;
//..
П еред вы числением в ы п о л н и ть:
1. Задать интервал интегри ровани я (значения от резка [a ,b ], перем енная х получит значение начала
отрезка интегри ровани я а ;
2. Задать количество ш агов интегри ровани я (п ер еменная n ).
С хем а алгоритм а п оказан а на рисунке 34.
П р и м е р . Реш ить задачу Кош и для си стем ы :
<У1 = -1 1 У1 + 9 У2
. У2 = 9 У1 - 11У2
при начальны х условиях у 1(0) = 1, у 2(0) = 0.
Т екст п рограм м ы :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
214
Panel1: TPanel;
Label1: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
UpDown1: TUpDown;
UpDown2: TUpDown;
Label5: TLabel;
UpDown3: TUpDown;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Type
TF=Function (x,y1,y2:Real):Real;
TFMas=array [1..2] of TF;
TMas=array [1..2] of Real;
Function F1 (x,y1,y2:Real):Real;
Begin
Result:=-11*y1+9*y2;
End;
Function F2(x,y1,y2:Real):Real;
Begin
Result:=9*y1-11*y2;
End;
Procedure Runge_Kut(a,b:Real;n:Integer;x:Real;Var y_1:TMas;FMas:TFMas);
Var
j:Integer;
k:array [1..4] of Real;
h:Real;
New:TMas;
Begin
n:=n;
h:=(b-a)/n;
New[1]:=y_1[1];
New[2]:=y_1[2];
For j:=1 to 2 do
215
Begin
k[1]:=h*FMas[j] (x,New[1],New[2]);
k[2]:=h*FMas[j](x+h/2,New[1]+1/2*k[1],New[2]+1/2*k[1]);
k[3]:=h*FMas[j](x+h/2,New[1]+1/2*k[2],New[2]+1/2*k[2]);
k[4] :=h*FMas[j] (x+h,New[1]+k[3] ,New[2]+k[3]);
y_1[j]:=y_1[j]+h/6*(k[1]+2*k[2]+2*k[3]+k[4]);
End;
End;
Procedure Gir(a,b:Real;n:Integer;x:Real;Var y_1:TMas;FMas:TFMas);
Var
i,j,z:Integer;
h,c1,c2:Real;
Fun:array [1..2,1..4] of Real;
Begin
z:=0;
Form1.StringGrid1.ColCount:=n+1;
Form1.StringGrid1.Cells[0,1]:='Y1';
Form1.StringGrid1.Cells[0,2]:='Y2';
h:=(b-a)/n;
For i:=1 to 4 do
Begin
Runge_Kut(a,b,n,x,y_1,FMas);
x:=x+h;
For j:=1 to 2 do Fun[j,i]:=y_1[j];
End;
x:=a+0.1;
For i:=1 to n do
Begin
c1:=(-48*Fun[1,4]+36*Fun[1,3]-16*Fun[1,2]+3*Fun[1,1])/1.2;
c2:=(-48*Fun[2,4]+36*Fun[2,3]-16*Fun[2,2]+3*Fun[2,1])/1.2;
y_1[1]:=(-9*c2-(25/1.2+11)*c1)/((25/1.2+11)*(25/1.2+11)-9*9);
y_1[2]:=(9*y_1[1]-c2)/(25/1.2+11);
// Данные формулы получены из решения системы линейных уравнений
// по формуле Гира выражением одной переменной через другую
Inc(z);
For j:=1 to 2 do
Begin
Fun[j,1]:=Fun[j,2];Fun[j,2]:=Fun[j,3];Fun[j,3]:=Fun[j,4];Fun[j,4]:=y_1[j];
End;
Form1.StringGrid1.Cells[z,0]:='X='+FloatToStr(x);
Form1.StringGrid1.Cells[z,1]:=FloatToStrF(y_1[1],ffExponent,4,6);
Form1.StringGrid1.Cells[z,2]:=FloatToStrF(y_1[2],ffExponent,4,6);
x:=x+h;
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
var
FMas:TFMas;
y_1:TMas;
begin
216
y_1[1]:=1;
y_1[2]:=0;
FMas[1]:=f1;
FMas[2]:=f2;
Gir(StrToInt(Edit1.Text),StrToInt(Edit2.Text),StrToInt(Edit3.Text),0,y_1,FMas);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Button1.SetFocus;
end;
end.
В ы числения по програм м е привели к следую щ им ре зу л ьтата м :
1i=i 11=1 1
~jjt Forml
Г
Решение жестких систем ОДУ. М етод Гира
Х=0.1
|Х=0.2
Х=0,3
|х=0.4
|х=0.5
Х=0,6
Х=0,7
Х=0,8
Х=0,Э
Х=1
|
Y1
5,228Е-1
3.535Е-1
2..644Е-1
2..267Е-1
1..Э26Е-1
1.543Е-1
1,231Е-1
1,017Е-1
8.484Е-2
6.Э42Е-2
Y2
3,171Е-1
3.440Е-1
2.930Е1
2.221El
1.765Е-1
1,51ЭЕ-1
1.2ЭЗЕ-1
Т046Е-1
8.330Е-2
6.7Э7Е-2
►
<□
Интегрировать:
от:
^
-
до:
2
:
КоличествошаговприращенияаргументаX:
Jj
1ВычислитьI
i= I В I
~jjt Forml
1
Решение жестких систем ОДУ. М етод Гира
ХИЛ
ХН.2
|Х=1,3
|х=1.4
|Х=1,5
Х=1,6
Х=1,7
Х=1,8
Х=1,Э
Х=2
Y1
5,615Е-2
4.583Е-2
3.778Е-2
3.106Е-2
2.536Е-2
2.063Е-2
1.6Э4Е-2
1 ЗЭОЕ-2
1.1ЗЭЕ-2
8,31ОЕ-3
Y2
5.642Е-2
4.648Е-2
3.784Е-2
3.082Е-2
2.527Е-2
2.076Е-2
1,6ЭЭЕ-2
Т388Е-2
1,136Е-2
8,31ОЕ-3
i
Интегрировать:
|
□ ►
от:
^
-
до:
2
-
КоличествошаговприращенияаргументаX:
Вычислить
217
Procedure Gir(a, b: Real;
n: Integer; x:Real;Var
y_l :TMas;FMas:TFMas);
c2=(-48*Fun[2,4]+36*Fun[2,3]-16*Fun[2,2]+3 *Fun[2,1])/l ,2
X
y_l[l]=(-9*c2-(25/1.2+l l)* cl)/
((25/1.2+11)*(25/1.2+11)-9*9)
^
I
У ^ (25/1,2+П )
I
^
В
J= 1, J > 2
X
Fun[j,i] = y_l[j]
X
Fun[j,3]=FunO,4]
Fun[j,4]=y 1Г.Л
I
X
x=x+h
I
I
Возврат ^
Рисунок 34 - С хема алгоритм а м етода Гира
В арианты заданий для реш ения ж естких систем ОДУ
приведены в таблице 8.
М етод Р акитского (м атричной эк сп о н ен ты ).
Procedure M etR ak (n: Word; Var H: Real; A: MasReal;
var Y: vector; Var Q: MasReal; Ind, nts: Integer);
Вх одные пар ам етр ы:
n - разм ерн ость си стем ы ;
A - м атрица коэф ф ициентов систем ы типа
Mas R e a l=array [1 ..2 ,1 ..2 ]o f real;
Н - ш аг меж ду точкам и и н тегр и р о в ан и я;
Y - м ассив разм ерн ости n содерж ит реш ение систем ы на
преды дущ ем ш аге;
218
Q - м атрица разм ерн ости n *n содерж ит м атричную экс п о н ен ту ;
ind - реж им работы п роц ед уры : 0 -вы числение м атри ч ной эк сп о н ен ты , 1- вы числение очередного реш ен и я;
nts - номер ш ага.
Выходные параметры:
Y - массив разм ерности n содерж ит реш ение систем ы на
текущ ем ш аге;
Q - м атрица разм ерн ости n *n содерж ит м атричную экс п о н ен ту ;
Н - ш аг меж ду точкам и и н тегр и р о в ан и я.
(П роцедура и спользует следую щ ие п р о ц ед у р ы :
procedure M ulM a t (n: integer;a,b: masReal; var c: mas R ea l); - перем нож ение м атриц A и B разм ерн ости n *n , Cвы ходная матрица;
procedure M atnaV ec (n: integer;a: masReal; b: vector; var
c: vecto r); - ум нож ение м атрицы A на м асси в(век то р )B , Cвы ходной м ассив;
procedure M ulConst(n: word; H:real; var B: m asReal ) ; ум нож ение матрицы A на число Н, В - вы ходная м атр и ц а.)
С хема алгоритм а приведена на рисунке 35.
П р и м е р . Реш ить задачу Кош и для систем ы
'
y i= -n y 1 +9 y2
.
у2 = 9 y1 -11У2
<
при начальны х условиях y j(0)= 1, y 2(0)=0.
Т екст п рограм м ы :
uses crt;
Type
masReal=array[1..2,1..2]of real;
vector=array[1..2]of real;
var
a1,f1,q1: masReal;
n,nts,ind:integer;
X,H:real;
Y0:vector;
219
{перемножение матриц размерности n*n A и B, C-выходная матрица}
procedure MulMat(n:integer;a,b:masReal;var c:masReal);
var i,j,k:byte;
begin
for i:=1 to n do
for j:=1 to n do
c[i,j]:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
c[i,j] :=c[i,j]+a[i,k] *b[k,j];
end;
{умножение матрицы A на массив(вектор)В, C-выходной массив }
procedure MatnaVec(n:integer;a:masReal;b:vector ;var c:vector);
var i,j,k:byte;
begin
for i:=1 to n do c[i]:=0;
for i:=1 to n do
for j:=1 to n do
c[i]:=c[i]+a[j,i]*b[j];
end;
{умножение матрицы A на число Н, В-выходной массив }
procedure MulConst(n:word;H:real;var B:masReal );
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
b[i,j]:=b[i,j]*h
end;
{процедура реализующая метод Ракитского }
Procedure MetRak(n:Word;Var H:Real;A:MasReal;var Y:vector;Var
Q:MasReal;Ind,nts:Integer);
{n -порядок системы
A -матрица коэффициентов системы;
Y -массив размерности n содержит решение системы
Q -матрица размерности n*n содержит матричную экспоненту
ind-режим работы процедуры: 0-вычисление матричной экспоненты
1-вычисление очередного решения
nts-номер шага
}
Var
RabMas1: MasReal; {рабочая матрица }
y0,y1,RabMas2: vector;{рабочие массивы}
S : Real;
i,j,k : Byte;
BEGIn
IF Ind=0 Then
Begin
{построение матрицы exp(Ah)}
220
{ вычисление нормы матрицы А}
S:=0;
For i := 1To n Do
For j := 1To n Do
S:=S+A[i,j]*A[i,j];
S:=Sqrt(S);
H:=0.1/S;
nts := 0;
for i:=1 to n do
for j:=1 to n do
Q[i,j]:=0;
mulconst(n,H,A);
for k:=5 downto 1do
begin
mulconst(n,1/k,Q);
{Q+E}
for i:=1 to n do
Q[i,i]:=Q[i,i]+1;
mulmat(n,Q,A,Rabmas 1);
Q:=Rabmas1;
end;
{Q+E}
for i:=1 to n do
Q[i,i]:=Q[i,i]+1;
{построение матрицы exp(AH)}
for i:=1 to n do
begin
for j:=1 to n do y0[j]:=0;
y0[i]:=1;
for j:=1 to round(0.1/H) do
begin
MatnaVec(n,Q,Y0,y1);
y0:=y1;
end;
for j:=1 to n do Rabmas1[j,i]:=y0[j];
end;
Q:=Rabmas1;
End;
{вычисление решения на очередном шаге}
IF nts > 0 Then
Begin
MatnaVec(n,Q,Y,RabMas2);
y:=RabMas2;
End;
End;
begin
clrscr;
n:=2;
{ввод матрицы системы}
a1[1,1]:=-11; a1[1,2]:= 9;
221
a1[2,1]:= 9; a1[2,2]:=-11;
{ввод начального приближения}
Y0[1]:=1; Y0[2]:=0;
x:=0;
Writeln(' x I Y1
I ' Y2 ');
{вычисление матричной экспонеты}
MetRak(n,H,A1,Y0,Q1,0,nts);
for nts:=1 to 21 do
begin
{вычисление решения на данном шаге Х}
MetRak(n,H,A1,Y0,Q1,1,nts);
Writeln(x:2:2,' I ',Y0[1]:0,' I ', Y0[2]:0);
x:=x+0.1; end;end.
В ы числения по програм м е привели к следую щ им резу л ь тата м :
X
I Y1
I
0.00
4.8587E -0001
0.10
3.4795E-0001
0.20
2.7778E -0001
0.30
2.2671E -0001
0.40
1.8581E-0001
0.50
1.5240E-0001
0.60
1.2502E-0001
0.70
1.0256E-0001
8.4139E -0002
0.80
6.9024E -0002
0.90
5.6625E -0002
1.00
4.6452E -0002
1.10
1.20
3.8108E -0002
3.1262E -0002
1.30
1.40
2.5646E -0002
2.1039E -0002
1.50
1.7259E -0002
1.60
1.4159E -0002
1.70
1.1615E -0002
1.80
1.90
9.5288E -0003
2.00
7.8170E -0003
222
Y2
3.3448E -0001
3.2503E -0001
2.7431E -0001
2.2619E -0001
1.8573E-0001
1.5239E-0001
1.2502E-0001
1.0256E-0001
8.4139E -0002
6.9024E -0002
5.6625E -0002
4.6452E -0002
3.8108E -0002
3.1262E -0002
2.5646E -0002
2.1039E -0002
1.7259E -0002
1.4159E -0002
1.1615E -0002
9.5288E -0003
7.8170E -0003
'MetRak(n:W ord;Var\
H:Real;A:MasReal;var \
^Y:vector;Var Q:MasRealJ
Ind,nts:Integer) у
Вычисление Sнормы матрицы A
H=0.1/S
nts=0
Обнуление
матрицы Q
Mulconst
(n,H,A)
E
k=5,k<1
Mulconst
(n,1/k,Q)
Вычисление
суммы м-ц Q c E
mulmat(n,Q,A,
Rabmas1)
MatnaVec(n, Q,
Y,RabMas2)
Q= Rabmas1
y=RabMas2
k=k-1
E
A
I=1,i>n
Bозврат
B
j=1,j>n
y0[i]=0
j=j+1
B
y0[i]=1
©
2
Рисунок 35 - С хем а алгоритм а м етода Р акитского
223
В арианты заданий
Т аблица 8
№
вари­
анта
1
1
-.18000Е + 01
-.51350Е + 02
.12175Е + 02
.51650Е + 02
2
.22600Е + 02
-.26800Е + 02
-.46000Е + 01
.22000Е + 01
3
.37000Е + 02
-.18917Е + 02
-.13042E + 02
-.20583Е + 02
4
.48900Е + 02
-.15200Е + 02
-.19400Е + 02
-.36700Е + 02
.59800Е + 02
5
.13150Е + 02
-.24925Е + 02
-.50150Е + 02
.70200Е + 02
6
-.11933Е + 02
-.30033Е + 02
-.62267Е + 02
.80314Е + 02
7
.11193Е + 02
-.34904Е + 02
-.73621Е + 02
.90250Е + 02
8
-.10750Е + 02
-.39625Е + 02
-.84500Е + 02
.10007Е + 03
9
-.10506Е + 02
-.44247Е + 02
-.95061Е + 02
224
Матрица системы
2
.23200Е+02
-.41500Е+02
-.25000Е+00
.16800Е+02
.47600Е+02
-.22000Е+02
-.17000Е+02
-.27600Е+02
.65333Е+02
-.15833Е+02
-.27083E+02
-.52000Е+02
.81400Е+02
-.13000Е+02
-.35500Е+02
-.71400Е+02
.96800Е+02
-.11500Е+02
-.43250Е+02
-.88800Е+02
.11187Е+03
-.10667Е+02
-.50667Е+02
-.10520Е+03
.12674Е+03
-.10214Е+02
-.57893Е+02
-.12103Е+03
.14150Е+03
-.10000Е+02
-.65000Е+02
-.13650Е+03
.15618Е+03
-.99444Е+01
-.72028Е+02
-.15173Е+03
.97000Е + 01
-.40000Е + 02
.50000Е + 01
.30300Е + 02
.29600Е + 02
-.20000Е + 02
-.10000Е + 02
-.96000Е + 01
.42833Е + 02
-.1ЗЗЗЗЕ + 02
-.18333E + 02
-.29500Е + 02
.54400Е + 02
-.10000Е + 02
-.25000Е + 02
-.44400Е + 02
.65300Е + 02
-.80000Е + 01
-.З1000Е + 02
-.57300Е + 02
.75867Е + 02
-.66667Е + 01
-.36667Е + 02
-.69200Е + 02
.86243Е + 02
-.57143Е + 01
.42143Е + 02
-.80529Е + 02
.96500Е + 02
-.50000Е + 01
-.47500Е + 02
-.91500Е + 02
.10668Е + 03
-.44444Е + 01
-.52778Е + 02
-.10223Е + 03
.83500Е + 01
-.31350Е + 02
.21750Е + 01
.21500Е + 02
.27800Е + 02
-.16800Е + 02
-.96000Е + 01
-.1ЗОООЕ+02
.40583Е + 02
-.12250Е + 02
-.16375E + 02
-.30833Е + 02
.51700Е + 02
-.10200Е + 02
-.21900Е + 02
-.44500Е + 02
.62150Е + 02
-.91500Е + 01
-.26925Е + 02
-.56500Е + 02
.72267Е + 02
-.86000Е + 01
-.31700Е + 02
-.67667Е + 02
.82193Е + 02
-.83357Е + 01
-.36332Е + 02
-.78357Е + 02
.92000Е + 02
-.82500Е + 01
-.40875Е + 02
-.88750Е + 02
.10173Е + 03
-.82833Е + 01
-.45358Е + 02
-.98944Е + 02
Вектор
начальных
условий
3
.8415Е+00
.5403Е+00
-.4161Е+00
.9093Е+00
.9093Е+00
-.4161Е+00
-.6536Е+00
-.7568Е+00
.1411Е+00
-.9900Е+00
.9602E+00
-.2794Е+00
-.7568Е+00
-.6536Е+00
-.1455Е+00
.9894Е+00
-.9589Е+00
.2837Е+00
-.8391Е+00
-.5440Е+00
.9602Е+00
.9602Е+00
.8439Е+00
-.5366Е+00
.6570Е+00
.7539Е+00
.1367Е+00
.9906Е+00
.9894Е+00
-.1455Е+00
-.9577Е+00
-.2879Е+00
.4121Е+00
-.9111Е+00
.6603Е+00
-.7510Е+00
П родолж ение таблицы 8
1
10
11
12
13
14
15
16
17
18
19
20
2
.10980Е + 03
-.10400Е + 02
-.48800Е + 02
-.10540Е + 03
.11947Е + 03
-.10395Е + 02
-.53302Е + 02
-.11558Е + 03
.12910Е + 03
-.10467Е + 02
-.57767Е + 02
-.12563Е + 03
.13869Е + 03
-.10596Е + 02
-.62202Е + 02
-.13560Е + 03
.14826Е + 03
-.10771Е + 02
-.66614Е + 02
-.14549Е + 03
.15780Е + 03
-.10983Е + 02
-.71008Е + 02
-.15532Е + 03
.16732Е + 03
-.11225Е + 02
-.75387Е + 02
-.16510Е + 03
.17684Е + 03
-.11491Е + 02
-.79754Е + 02
-.17484Е + 03
.18633Е + 03
-.11778Е + 02
-.84111Е + 02
-.18456Е + 03
.19582Е + 03
-.12082Е + 02
-.88459Е + 02
-.19424Е + 03
.20530Е + 03
-.12400Е + 02
3
.17080Е+03
-.10000Е+02
-.79000Е+02
-.16680Е+03
.18538Е+03
-.10136Е+02
-.85932Е+02
-.18175Е+03
.19993Е+03
-.10333Е+02
-.92833Е+02
-.19660Е+03
.21446Е+03
-.10577Е+02
-.99712Е+02
-.21138Е+03
.22897Е+03
-.10857Е+02
-.10657Е+03
-.22611Е+03
.24347Е+03
-.11167Е+02
-.11342Е+03
-.24080Е+03
.25795Е+03
-.11500Е+02
-.12025Е+03
-.25545Е+03
.27242Е+03
-.11853Е+02
-.12707Е+03
-.27007Е+03
.28689Е+03
-.12222Е+02
-.13389Е+03
-.28467Е+03
.30135Е+03
-.12605Е+02
-.14070Е+03
-.29924Е+03
.31580Е+03
-.13000Е+02
4
.11680Е + 03
-.40000Е + 01
-.58000Е + 02
-.11280Е + 03
.12688Е + 03
-.36364Е + 01
-.63182Е + 02
-.12325Е + 03
.13693Е + 03
-.33333Е + 01
-.68333Е + 02
-.13360Е + 03
.14696Е + 03
-.30769Е + 01
-.73462Е + 02
-.14388Е + 03
.15697Е + 03
-.28571Е + 01
-.78571Е + 02
-.15411Е + 03
.16697Е + 03
-.26667Е + 01
-.83667Е + 02
-.16430Е + 03
.17695Е + 03
-.25000Е + 01
-.88750Е + 02
-.17445Е + 03
.18692Е + 03
-.23529Е + 01
-.93824Е + 02
-.18457Е + 03
.19689Е + 03
-.22222Е + 01
-.98889Е + 02
-.19467Е + 03
.20685Е + 03
-.21053Е + 02
-.10395Е + 03
-.20474Е + 03
.21680Е + 03
-.20000Е + 01
5
.11140Е + 03
-.84000Е + 01
-.49800Е + 02
-.10900Е + 03
.12103Е + 03
-.85773Е + 01
-.54211Е + 02
-.11895Е + 03
.13063Е + 03
-.88000Е + 01
-.58600Е + 02
-.12883Е + 03
.14021Е + 03
-.90577Е + 01
-.62971 Е + 02
-.13865Е + 03
.14977Е+03
-.93429Е + 01
-.67329Е + 02
-.14843Е + 03
.15932Е + 03
-.96500Е + 01
-.71675Е + 02
-.15817Е + 03
.16885Е + 03
-.99750Е + 01
-.76013Е + 02
-.16788Е + 03
.17837Е + 03
-.10315Е + 02
-.80343Е + 02
-.17756Е + 03
.18789Е + 03
-.10667Е + 02
- 84667Е + 02
-.18722Е + 03
.19740Е + 03
-.11029Е + 02
-.88986Е + 02
-.19687Е + 03
.20690E + 03
-.11400Е + 02
6
-.5440Е+00
-.8391Е+00
.4081Е+00
.9129Е+00
-.1000Е+01
.4426Е-02
-.1000Е+01
-.8851Е-02
-.5366Е+00
.8439Е+00
.4242Е+00
-.9056Е+00
.4202Е+00
.9074Е+00
.6469Е+00
.7626Е+00
.9906Е+00
.1367Е+00
-.9626Е+00
.2709E+00
.6503Е+00
-.7597Е+00
.1543Е+00
-.9880Е+00
-.2879Е+00
-.9577Е+00
.8342Е+00
.5514Е+00
-.9614Е+00
-.2752Е+00
-.8486Е+00
.5291Е+00
-.7510Е+00
.6603Е+00
-.1280Е+00
-.9918Е+00
.1499Е+00
.9887Е+00
.9551Е+00
.2964Е+00
.9129Е+00
.4081Е+00
225
П родолж ение таблицы 8
1
21
22
23
24
25
26
27
28
29
30
226
2
-.92800Е + 02
-.20390Е + 03
.21477Е + 03
-.12731Е + 02
-.97135Е + 02
-.21354Е + 03
.22424Е + 03
-.13073Е + 02
-.10146Е + 03
-.22316Е + 03
.23370Е + 03
-.13424Е + 02
-.10579Е + 03
-.23277Е + 03
.24315Е + 03
-.13783Е + 02
-.11011Е + 03
-.24237Е + 03
.25260Е + 03
-.14150Е + 02
-.11443Е + 03
-.25195Е + 03
.26205Е + 03
-.14523Е + 02
-.11874Е + 03
-.26152Е + 03
.27149Е + 03
-.14523Е + 02
-.12305Е + 03
-.27109Е + 03
.28093Е + 03
-.15286Е + 02
-.12736Е + 03
-.28064Е + 03
.29037Е + 03
-.15674Е + 02
-.13166Е + 03
-.29019Е + 03
.29980Е + 03
-.16067Е + 02
-.13597Е + 03
-.29973Е + 03
3
-.14750Е+03
-.31380Е+03
.33025Е+03
-.13405Е+02
-.15430Е+03
-.32834Е+03
.34469Е+03
-.13818Е+02
-.16109Е+03
-.34287Е+03
.35913Е+03
-.14239Е+02
-.16788Е+03
-.35739Е+03
.37357Е+03
-.14667Е+02
-.17467Е+03
-.37190Е+03
.38800Е+03
-.15100Е+02
-.18145Е+03
-.38640Е+03
.40243Е-03
-.15538Е+02
-.18823Е+03
-.40089Е+03
.41686Е+03
-.15981Е+02
-.19501Е+03
-.41538Е+03
.43129Е+03
-.16429Е+02
-.20179Е+03
-.42986Е+03
.44571Е+03
-.16879Е+02
-.20856Е+03
-.44433Е+03
.46013Е+03
-.17333Е+02
-.21533Е+03
-.45880Е+03
4
-.10900Е + 03
-.21480Е + 03
.22675Е + 03
-.19048Е + 01
-.11405Е + 03
-.22484Е + 03
.23669Е + 03
-.18182Е + 01
-.11909Е + 03
-.23487Е + 03
.24663Е + 03
-.17391Е + 01
-.12413Е + 03
-.24489Е + 03
.25657Е + 03
-.16667Е + 01
-.12917Е + 03
-.25490Е + 03
.26650Е + 03
-.16000Е + 01
-.13420Е + 03
-.26490Е + 03
.27643Е + 03
-.15385Е + 01
-.13923Е + 03
-.27489Е + 03
.28636Е + 03
-.14815Е + 01
-.14426Е + 03
-.28488Е + 03
.29629Е + 03
-.14286Е + 01
-.14929Е + 03
-.29486Е + 03
.30621Е + 03
-.13793Е + 01
-.15431Е + 03
-.30483Е + 03
.31613Е + 03
-.13333Е + 01
-.15933Е + 03
-.31480Е + 03
5
-.93300Е + 02
-.20650Е + 03
.21640Е + 03
-.11779Е + 02
-.97611Е + 02
-.21612Е + 03
.22589Е + 03
-.12164Е + 02
-.10192Е + 03
-.22573Е + 03
.23538Е + 03
-.12554Е + 02
-.10622Е + 03
-.23533Е + 03
.24487Е + 03
-.12950Е + 02
-.11053Е + 03
-.24492Е + 03
.25435Е + 03
-.13350Е + 02
-.11482Е + 03
-.25450Е + 03
.26383Е + 03
-.13754Е + 02
-.11912Е + 03
-.26408Е + 03
.27331Е + 03
-.14161Е + 02
-.12342Е+03
-.27365Е+03
.28279Е + 03
-.14571Е + 02
-.12771Е + 03
-.28321Е + 03
.29226Е + 03
-.14984Е + 02
-.13201Е + 03
-.29278Е + 03
.30173Е + 03
-.15400Е + 02
-.13630Е + 03
-.30233Е + 03
6
-.6669Е+00
.7451Е+00
.8367Е+00
-.5477Е+00
-.4000Е+00
-.9165Е+00
-.8851Е-02
-.1000Е+01
.9998Е+00
.1770Е-01
-.8462Е+00
-.5328Е+00
-.4322Е+00
.9018Е+00
-.9056Е+00
.4242Е+00
-.6401Е+00
-.7683Е+00
-.1324Е+00
.9912Е+00
.9650Е+00
-.2624Е+00
.7626Е+00
.6469Е+00
-.1630Е+00
.9866Е+00
.9564Е+00
-.2921Е+00
-.8293Е+00
-.5588Е+00
.2709Е+00
-.9626Е+00
.8532Е+00
-.5216Е+00
-.6636Е+00
-.7481 Е+00
.1192Е+00
.9929Е+00
-.9880Е+00
.1543Е+00
-.9524Е+00
-.3048Е+00
Л а б о р а т о р н а я р а б о т а № 11
Ч исленное диф ф ерен ци ровани е
Д иф ф еренцирование с помощ ью сплайнов
Р rocedure Spline3(N: integer; X,Y: mas; S0,SN: real;
Var A, B, C, D: mas);
О пределяет коэф ф ициенты сп л ай н а, которы е будут
использованы процедурой D ifSpline для получения ч и сленны х значений производны х в заданной т о ч к е .
Входные параметры:
N - число узлов сп л а й н а;
X: mas - массив ар гу м ен то в ;
Y: mas - массив значений ф ункции;
S0 - значение абсциссы начальной точки сплайна;
SN - значение абсциссы конечной точки сплайна;
В ых од ные параметры :
A,B,C,D: mas - м ассивы коэф ф ициентов сп л а й н а.
М ассивы имею т тип mas = array [0..n +1] o f r e a l.
С хема процедуры Spline3 п оказан а на рисунке 36.
Т екст п р оц ед уры :
procedure Spline3(N:integer;X,Y:mas;S0,SN:real; Var A,B,C,D:mas);
var F:mas;
H2,H3,p:real;
i,j:integer;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(a),0);
fillchar(c,sizeof(a),0);
fillchar(d,sizeof(a),0);
fillchar(f,sizeof(a),0);
H2:=X[2]-X[1];
H3:=X[3]-X[2];
A[1]:=(2*(H2+H3))/H3;
f[1]:=(6/h3)*(((y[3]-y[2])/h3)-((y[2]-y[1])/h2))-(h2*s0)/h3;
for i:=4 to n-1 do begin
h2:=x[i-1]-x[i-2];
h3:=x[i]-x[i-1];
a[i-2] :=(2/h3)*(h2+h3);
b[i-2]:=h2/h3;
f[i-2]:=(6/h3)*(((y[i]-y[i-1])/h3-((y[i-1]-y[i-2])/h2)));
227
end;
h2:=x[n-1]-x[n-2];
h3:=x[n]-x[n-1];
p:=2*(h2+h3);
b[1]:=h2/p;
f[n-2]:=(6/p)*(((y[n]-y[n-1])/h3)-((y[n-1]-y[n-2])/h2))-(h3*sn)/p;
d[1]:=1/a[1]; c[1]:=f[1];
For i:=2 to n-3 do begin
d[i]:=1/(a[i]-b[i]*d[i-1]); c[i]:=f[i]-b[i]*d[i-1]*c[i-1];
end;
d[n-2]:=(f[n-2]-b[1]*d[n-3]*c[n-3])/(1-b[1]*d[n-3]);
for i:=n-3 downto 1do d[i]:=d[i]*(c[i]-d[i+1]);
c[1]:=s0; c[n]:=sn;
For i:=2 to n-1 do c[i]:=d[i-1];
For i:=1 to n do begin
a[i]:=0; b[i]:=0; d[i]:=0;
end;
For i:=2 to n do begin
h2:=x[i]-x[i-1]; d[i]:=(c[i]-c[i-1])/h2;
b[i]:=h2*c[i]/2-(Sqr(h2))*d[i]/6+(y[i]-y[i-1])/h2;
a[i]:=y[i];
end;
//z:=f;
end;
228
Рисунок 36 - С хем а алгоритм а вы числения коэф ф ици ентов сплайна
Р rocedure D ifS lin e (x ,y ,z :m a s ; xx:real; n:integer;
var s 1,s 2 :real; error:b oolean);
229
П роцедура на основе д ан н ы х , полученны х от проце дуры S p lin e 3 , вы числяет значение п роизводной в задан ной т о ч к е.
Входные параметры:
n: integer - число узлов сплайна;
xx: real - абсци сса то ч к и , для которой необходимо
вы числить п ро и зво д н у ю ;
x: integer - м ассив аргум ентов;
y: mas - массив значен ий ф ункции;
z: mas - м ассив коэф ф ициентов сп л ай н а.
Выход ные параметры :
error: boolean - перем енная будет иметь значение
" и сти н а", если точка xx находится за пределам и интерва ла заданны х значен ий ар гу м ен то в .
Все массивы имею т тип mas = a r r a y [0 ..n +1] o f r e a l.
Схема процедуры DifSline п оказан а на рисунке 37.
Текст п роц ед уры :
procedure DifSline(x,y,z:mas; xx:real; n:integer; var s1,s2:real; error:boolean);
var i,j,k:integer;
t,t1,t2,t12:real;
hi:real;
begin
i:=1;
while (xx >= x[i])and(i<=n) do inc(i);
if i>n then begin
error:=true; exit;
end;
hi:=x[i]-x[i-1];
t:=(xx-x[i-1])/hi; //(x[i]-x[i-1]);
t1:=1-t;
t2:=t*t;
t12:=t1*t1;
s1:=-6*t1*t*(y[i-1]-y[i])/hi;
s1:=s1+t1*z[i-1]*(1-3*t)+z[i]*(3*t-2)*t;
s2:=6*(y[i-1]-y[i])*(2*t-1)/hi;
s2:=s2+(z[i-1])*(6*t-4)-z[i]*(2-6*t);
s2:=s2/hi;
end;
В арианты задан и й приведены в таблице 9.
230
Рисунок 37 - С хема алгоритм а диф ф ерен ци ровани я с
помощ ью сплайнов
П р и м е р . Н айти производны е ф ункции e х2 в точке
х =0,55. Ф ункция задан а таблично в 15 у з л а х .
231
В ы числения по програм м е привели к следую щ им ре зу л ь тата м :
SE Лабораторная работа №10 (Дифференцирование при помощи сплайнов)
Ввод данных
Ввод данных
С Sin(x)
С
Количество интервалов:
15
Левая граница интервала:
Правая граница интервала:
Абсцисса точки:
Cos(x)
• jexp(sqr(x)]|
Значение 1-ой производной (сплайн):
1,490
0
Значение 2-ой производной (сплайн):
4,34
1
Т очное значение 1 -ой производной:
1,490
0,55
Точное значение 2-ой производной:
4,34
i
Текст п рограм м ы :
program LablOVM;
uses
Forms,
Unitl in 'Unitl.pas' {Forml};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Лабораторная работа №10';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
232
|V]
а
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Grids, StdCtrls, ComCtrls, Buttons;
const n = 300;
type
mas = array[0..n+1] of real;
TForm1 = class(TForm)
GroupBox1: TGroupBox;
SpeedButton1: TSpeedButton;
UpDown1: TUpDown;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
LabeledEdit5: TLabeledEdit;
LabeledEdit6: TLabeledEdit;
GroupBox2: TGroupBox;
Image1: TImage;
LabeledEdit7: TLabeledEdit;
RadioGroup1: TRadioGroup;
LabeledEdit8: TLabeledEdit;
procedure ClearImage;
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x,ys:mas;
xc:real;
yc,m:integer;
dx,dt:real;
a,b,max,min,koefx,koefy:real;
implementation
{$R *.dfm}
function f(x:real):real;
begin
case Form1.RadioGroup1.ItemIndex of
0: Result:=sin(x);
1: Result:=cos(x);
2: Result:=exp(sqr(x));
233
else Result:=0;
end;
end;
function fx(x:real):real;
begin
case Form1.RadioGroup1.ItemIndex of
0: Result:=cos(x);
1: Result:=-sin(x);
2:Result:=2*x*exp(sqr(x));
else Result:=0;
end;
end;
function fxx(x:real):real;
begin
case Form1.RadioGroup1.ItemIndex of
0: Result:=-sin(x);
1: Result:=-cos(x);
2: Result:=2*exp(sqr(x))*(1+2*x*x);
else Result:=0;
end;
end;
procedure GetParams 1;
begin
// xc:=Form1.Image1.Width div 2;
yc:=Form1.Image1.Height div 2;
end;
procedure GetParams2;
var i:integer;
begin
m:=strtoint(Form1.LabeledEdit1.Text);
a:=strtofloat(Form1.LabeledEdit2.Text);
b:=strtofloat(Form1.LabeledEdit3.Text);
if a<0 then xc:=(-a)*koefx else xc:=-a*koefx;
dx:=(b-a)/(m-1);
x[0]:=a-dx; ys[0]:=f(x[0]);
x[m+1]:=b+dx; ys[m+1]:=f(x[m+1]);
x[1]:=a; ys[1]:=f(a);
x[m]:=b; ys[m]:=f(b);
for i:=2 to m do begin
x[i]:=x[i-1]+dx;
ys[i]:=f(x[i]);
end;
max:=f(a); min:=f(a);
for i:=1 to m do begin
if max<f(x[i]) then max:=f(x[i]);
if min>f(x[i]) then min:=f(x[i]);
end;
dt:=(Form1.Image1.Width-1)/(b-a);
234
koefy:=(Form1.Image1.Height-1)/(max - min);
koefx:=(Form1.Image1.Width-1)/(b-a);
end;
procedure TForm1.ClearImage;
var i:integer;
begin
with Image1.Canvas do begin
Brush.Color:=clWhite;
Pen.Color:=clRed;
FillRect(Image1.Canvas.ClipRect);
Rectangle(Image1.Canvas.ClipRect);
Pen.Width:=1;
end;
end;
procedure ClearImage2;
var x0,y0:integer;
x1,y:integer;
i:integer;
begin
Form1.ClearImage;
//y0:=round(Form1.Image1.Height-koefy*(min));
y0:=round(Form1.Image1.Height-1-(Form1.Image1.Height-1)*(min/(min-max)));
Form1.Image1.Canvas.MoveTo(0,y0);
Form1.Image1.Canvas.LineTo(Form1.Image1.Width-1,y0);
for i:=1 to m do begin
x1:=round(i*dx*koefx);
Form1.Image1.Canvas.MoveTo(x1,y0-2);
Form1.Image1.Canvas.LineTo(x1,y0+2);
//Form1.Image1.Canvas.TextOut(x1,y0-2,floattostrf(x[i],ffFixed,3,3));
end;
x0:=round((a*(Form1.Image1.Width-1)/(a-b)));
Form1.Image1.Canvas.MoveTo(x0,0);
Form1.Image1.Canvas.LineTo(x0,Form1.Image1.Height-1);
for i:=1 to m do begin
Form1.Image1.Canvas.MoveTo(x0-2,round((Form1.Image1.Height)-(ys[i]min)*koefy));
Form1.Image1.Canvas.LineTo(x0+2,round((Form1.Image1.Height)-(ys[i]min)*koefy));
end;
end;
procedure Spline3(N:integer;X,Y:mas;S0,SN:real; Var A,B,C,D:mas);
var F:mas;
H2,H3,p:real;
i,j:integer;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(a),0);
fillchar(c,sizeof(a),0);
fillchar(d,sizeof(a),0);
235
fillchar(f,sizeof(a),0);
H2:=X[2]-X[1];
H3:=X[3]-X[2];
A[1]:=(2*(H2+H3))/H3;
f[1]:=(6/h3)*(((y[3]-y[2])/h3)-((y[2]-y[1])/h2))-(h2*s0)/h3;
for i:=4 to n-1 do begin
h2:=x[i-1]-x[i-2];
h3:=x[i]-x[i-1];
a[i-2]:=(2/h3)*(h2+h3);
b[i-2]:=h2/h3;
f[i-2]:=(6/h3)*(((y[i]-y[i-1])/h3-((y[i-1]-y[i-2])/h2)));
end;
h2:=x[n-1]-x[n-2];
h3:=x[n]-x[n-1];
p:=2*(h2+h3);
b[1]:=h2/p;
f[n-2]:=(6/p)*(((y[n]-y[n-1])/h3)-((y[n-1]-y[n-2])/h2))-(h3*sn)/p;
d[1]:=1/a[1]; c[1]:=f[1];
For i:=2 to n-3 do begin
d[i]:=1/(a[i]-b[i]*d[i-1]); c[i]:=f[i]-b[i]*d[i-1]*c[i-1];
end;
d[n-2]:=(f[n-2]-b[1]*d[n-3]*c[n-3])/(1-b[1]*d[n-3]);
for i:=n-3 downto 1do d[i]:=d[i]*(c[i]-d[i+1]);
c[1]:=s0; c[n]:=sn;
For i:=2 to n-1 do c[i]:=d[i-1];
For i:=1 to n do begin
a[i]:=0; b[i]:=0; d[i]:=0;
end;
For i:=2 to n do begin
h2:=x[i]-x[i-1]; d[i]:=(c[i]-c[i-1])/h2;
b[i]:=h2*c[i]/2-(Sqr(h2))*d[i]/6+(y[i]-y[i-1])/h2;
a[i]:=y[i];
end;
//z:=f;
end;
procedure DifSline(x,y,z:mas; xx:real; n:integer; var s1,s2:real; error:boolean);
var i,j,k:integer;
t,t1,t2,t12:real;
hi:real;
begin
i:=1;
while (xx >= x[i])and(i<=n) do inc(i);
if i>n then begin
error:=true; exit;
end;
hi:=x[i]-x[i-1];
t:=(xx-x[i-1])/hi; //(x[i]-x[i-1]);
t1:=1-t;
t2:=t*t;
t12:=t1*t1;
s1:=-6*t1*t*(y[i-1]-y[i])/hi;
236
s1:=s1+t1*z[i-1]*(1-3*t)+z[i]*(3*t-2)*t;
s2:=6*(y[i-1]-y[i])*(2*t-1)/hi;
s2:=s2+(z[i-1])*(6*t-4)-z[i]*(2-6*t);
s2:=s2/hi;
end;
procedure DrawPoints(l:boolean);
var i:byte;
begin
Form1.Image1.Canvas.Pen.Color:=clBlue;
form1.Image1.Canvas.MoveTo(round(x[1]*koefx-xc),Form1.Image1.Heightround((ys[1]-min)*koefy));
for i:=1 to m do begin
form1.Image1.Canvas.Ellipse(round((x[i])*koefx+xc)-3,
Form1.Image1.Height-round((ys[i]-min)*koefy)-3,
round((x[i])*koefx+xc)+3,
Form1.Image1.Height-round((ys[i]-min)*koefy)+3);
form1.Image1.Canvas.TextOut(round((x[i])*koefx+xc-5),
Form1.Image1.Height-round((ys[i]-min)*koefy)+5,
floattostrf(ys[i],ffFixed,3,2));
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ClearImage;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var i:integer;
z,s,c,d,z2:mas;
xx,s1,s2:real;
err:boolean;
begin
GetParams2;
ClearImage2;
err:=false;
xx:=strtofloat(LabeledEdit6.Text);
Spline3(m,x,ys,x[0],x[m+1],z,s,c,d);
DifSline(x,ys,s,xx,m,s1,s2,err);
if err then showmessage('!!!');
LabeledEdit4.Text:=floattostrf(s1,ffFixed,3,3);
LabeledEdit5.Text:=floattostrf(s2,ffFixed,3,2);
LabeledEdit7.Text:=floattostrf(fx(xx),ffFixed,3,3);
LabeledEdit8.Text:=floattostrf(fxx(xx),ffFixed,3,2);
DrawPoints(true);
form1.Image1.Canvas.MoveTo(round(x[1]*koefx+xc),
Form1.Image1.Height-round((ys[1]-min)*koefy));
for i:=2 to m do begin
a:=x[i]; b:=x[i+1];
while a<=b do begin
form1.Image1.Canvas.LineTo(round(a*koefx+xc),
237
Image1.Height-round((z[i]+s[i]*(a-x[i])
+(c[i]/2)*(a-x[i])*(a-x[i])
+(d[i]/6)*(a-x[i])*(a-x[i])*(a-x[i])-min)*koefy));
a:=a+dt;
end;
end;
end;
end.
Л абораторная работа № 12
Ч исленное и нтегрирование
Пусть требуется найти определенный интеграл
I = \ f(x)dx,
a
где функция f(x) непрерывна на отрезке [a; b].
Для приближенного вычисления интегралов чаще всего по­
дынтегральную функцию заменяют «близкой» ей вспомогательной
функцией, интеграл от которой вычисляется аналитически. За при­
ближенное значение интеграла принимают значение интеграла от
вспомогательной функции.
Заменим функцию на отрезке [a; b] ее значением в середине от­
резка. Искомый интеграл, равный площади криволинейной фигуры,
заменяется на площадь прямоугольника. Из геометрических сооб­
ражений нетрудно записать формулу прямоугольников
\ f (x)= f f a^+b-J (b - a ).
J
a
Приблизив f(x) линейной функцией и вычислив площадь соот­
ветствующей трапеции, получим формулу трапеций
b
1
\ f (x ) = - (f (a) + f (b ))(b - a ) .
a
2
Если же приблизить подынтегральную функцию параболой,
a +b
a +bW
проходящей через точки (a, f(a)),
, (b, f(b)), то по,f
2
2
v
v
JJ
лучим формулу Симпсона
b
1
a +b
+ f (b) (b - a )
\ f ( x ) e 7 f ( a ) + 4f
2
6
V
J
V
J
a
238
Все три формулы хорошо иллюстрируются геометрически (рис.
3 8 ).
Для повышения точности интегрирования применяют состав­
ные формулы. Для этого разбивают отрезок [а, b ] на четное п = 2т
число отрезков длины h = (b — a)/n и на каждом из отрезков длины
2h применяют соответствующую формулу. Таким образом получа­
ют составные формулы прямоугольников, трапеций и Симпсона.
На сетке xt = a + ih, y = f (xt), i = 0,1, 2,..., 2m, составные
квадратурные формулы имеют следующий вид:
формула прямоугольников
b
n—
1f f
bW
J f (x)dx = h £ f
+ R1;
a
i=0V v
jj
h2 b
R ° 24 Jaf ’(x)dx = 0(h2);
формула трапеций
b
h n—1
J f (x)dx = - £ ( f (x )+ f (Щ+1) ) + R2 ;
2 i=0
a
0
2b
h
J f "(x)dx = 0(h 2);
12 a
a
(a+b)/2
b
x
Рисунок 38
формула Симпсона
b
h m—1 , ч
ч
J f ( x ) d x = - S ( f (x2l )+ 4 f (x 2i+1) + f (x 2i+2 ))•
a
3 i=0
h4 b
R3 “ —7 ^ 7 J f (IV)(x)dx = 0(h4),
180 a
где Rb R2, R3 - остаточные члены. Оценки остаточных членов полу­
чены в предположении, что соответствующие производные f(x) не­
прерывны на [a, b]. Нетрудно показать, что при n
приближён­
ные значения интегралов для всех трёх формул (в предположении
отсутствия погрешностей округления) стремятся к точному значе­
нию интеграла.
Для практической оценки погрешности квадратурной формулы
можно использовать правило Рунге. Для этого проводят вычисле­
ния на сетках с шагом h и h/2, получают приближенные значения
239
интеграла Ih и Ih/2 и за окончательные значения интеграла прини­
мают величины:
Ih/2 + (lh/2 - Ih)/ 3—для формулы прямоугольников;
I h/2- ( I h/2 - I h) /3 —для формулы трапеций;
I h/2 - ( I h/2 - I h)/1 5 —для формулы Симпсона.
При этом за погрешность приближенного значения интеграла
принимаем величину
I h/2 - I h /3 —для формул прямоугольников и трапеций
и величину
I h/2 - I h /1 5 —для формулы Симпсона.
Такую оценку погрешностей применяют обычно для построе­
ния адаптивных алгоритмов, т. е. таких алгоритмов, которые авто­
матически так определяют величину шага h, что результат удовле­
творяет требуемой точности.
В настоящей лабораторной работе предлагается с помощью
правила Рунге найти по заданной погрешности 8 наибольшее зна­
чение шага h для каждой приведенной квадратурной формулы
(наименьшее значение n).
C0S x - 1
\ ----- 2— dx
о
x
В ы числение поды нтегральн ой функции:
Пример. Вычислить интеграл
1
function f(x: Real):Real;
begin
Result := -0.5;
if abs(x) > 1e-8 then
Result := (cos(x) - 1)/(x*x)
end;
Формула прямоугольников
fu n c tio n R E C T (const a,b: Real; const n: I n te g e r ): Real;
Вход ные параметры :
a - ниж ний предел и н тегр и р о в ан и я;
b - верхний предел и н тегр и р о в ан и я;
n - число отрезков в с е т к е .
В ы х о д н ы е п а р а м е т р ы : значение интеграла
присваи вается имени ф ун кц и и .
240
Т екст ф ун кц и и :
function RECT(const a,b: Real; const n: Integer): Real;
var
h, h2, s, x: Real;
j : Integer;
begin
h := (b-a)/n;
h2 := h/2.0;
s := 0.0;
for j := 1 to n do begin
x := a + j * h - h2;
s := s + f(x);
end;
Result := s * h;
end;
Рисунок 39- Схема алгоритма численного интегрирования по
формуле прямоугольников.
Формула трапеций
fu n c tio n TRAP (const a,b: Real; const n: I n te g e r ): Real;
241
Вход ные параметры :
a - ниж ний предел интегри ровани я;
b - верхний предел и н тегр и р о в ан и я;
n - число отрезков в с е т к е .
В ы х о д н ы е п а р а м е т р ы : значение интеграла
присваи вается имени функции.
Т екст функции:
function TRAP(const a,b: Real; const n: Integer): Real;
var
h, s, x: Real;
j : Integer;
begin
h := (b-a)/n;
s := (f(a)+f(b))*0.5;
for j := 1 to n - 1 do begin
x := a + j * h;
s := s + f(x);
end;
Result := s * h;
end;
Рисунок 40 - Схема алгоритма численного интегрирования по
формуле трапеций.
242
Формула Симпсона
fu n c tio n SIMPS (const a,b: Real; const n: In te g e r ): Real;
Входные параметры:
a - ниж ний предел и н тегр и р о в ан и я;
b - верхний предел и н тегр и р о в ан и я;
n - число отрезков в с е т к е .
В ы х о д н ы е п а р а м е т р ы : значение и нтеграла
присваи вается имени функции.
Т екст функции:
function SIMPS(const a,b: Real; const n: Integer): Real;
var
h, s, x, z: Real;
j, n1 , n2 : Integer;
begin
n2 := n * 2;
n1 := n2 - 1;
h := (b-a)/n2;
s := f(a)+f(b);
for j := 1 to n1 do begin
z := 3.0 - Power((-1),j);
x := a + j * h;
s := s + z * f(x);
end;
Result := s * h / 3;
end;
243
Рисунок 41 - Схема алгоритма численного интегрирования по
формуле Симпсона.
Формула Г аусса
В квадратурной формуле Г аусса
1
n
J f (x)dx ~ X Ai f (xi)
-1
i=1
узлы xi, x2, . . xn и коэффициенты Ai, A2, ..., A n подобраны так, что­
бы формула была точна для всех многочленов степени 2n-1. Мож­
но показать, что если п - число узлов квадратурной формулы, то ее
алгебраический порядок точности не может быть выше 2n-1. Для
приближенного вычисления интеграла по конечному отрезку [а, b]
выполняем замену переменной t = (a + b) /2 + (b - a)x/2; тогда
квадратурная формула Гаусса принимает вид
244
b- a
Z A J (t ),
2 i=1
a
где tt = (b + a) / 2 + (b - a)xt / 2 ; x - узлы квадратурной формулы Га­
усса; A i - гауссовы коэффициенты, i = 1, 2, . . n.
Можно показать, что узлы xi квадратурных формул Гаусса яв­
ляются корнями многочленов Лежандра степени п. Например, при
n = 2 для узлов Xj-; получаем х1 = —1/V3, х2 = 1 /л/3 . При этом
^ 1= ^ 2 = 1. Таким образом, квадратурная формула Гаусса
1
1
j f (x)dx « f
J
1л/3
—1
имеет такой же алгебраический порядок точности, что и формула
Симпсона, но требует вычисления подынтегральной функции толь­
ко в двух точках.
Если подынтегральная функция достаточно гладкая, то квад­
ратурная формула Гаусса обеспечивает очень высокую точность
при небольшом числе узлов, так как для погрешности Rn формулы
Г аусса с n узлами справедлива оценка
j f (t )dt
b —a b —a
max f <2">(x)
2,5а/Й V 3n J [ a,b]
В данной лабораторной работе предлагается вычислить инте­
грал по квадратурной формуле Г аусса с восемью узлами:
x 1 = - x 8 = -0.96028986, A 1 = A8 = 0.10122854; x 2 = - x7 =
= -0.79666648; A2 = A7 = 0.22238103; x3 = - x 6 = -0.52553242, A3 = A6
= = 0.31370664; x4 = - x 5 = -0.18343464, A4 = A5 = 0.36268378.
R,
fu n c tio n G AU SS(const a,b: Real): Real;
В х о д н ы е п а р а м е тр ы :
a - ниж ний предел и н тегр и р о в ан и я;
b - верхний предел и н тегр и р о в ан и я.
В ы х о д н ы е п а р а м е т р ы : значение и нтеграла
присваи вается имени функции.
(В ф ункции использую тся м асси вы : аg - м ассив коэф ф ициентов квадратурн ой формулы Г а у сса; xg - узлы к вад ратурн ой формулы Г а у сса.)
Т екст функции:
function GAUSS(const a,b: Real): Real;
const
ag : array [1..8] of Real = (0.10122854, 0.22238104,
245
0.31370664, 0.36278378,
0.36268378, 0.31370664,
0.22238104, 0.10122854);
xg : array [1..8] of Real = (-0.96028986, -0.79666648,
-0.52553242, -0.18343464,
0.18343464, 0.52553242,
0.79666648, 0.96028986);
var
a1, a2, g, x : Real;
i: Integer;
begin
a1 := (b+a)*0.5;
a2 := (b-a)*0.5;
g := 0.0;
for i := 1to 8 do begin
x := a1 + a2 * xg[i];
g := g + ag[i] * f(x);
end;
Result := g * a2;
end;
Рисунок 42. - Схема алгоритма численного интегрирования по
формуле Г аусса.
246
Т екст п рограм м ы :
procedure TForm1.Button1Click(Sender: TObject);
var
eps, a, b, Res, zz, ts: Real;
n: Integer;
begin
eps := 0.0001;
n := 1;
a := 0.0;
b := 1.0;
Memo1.Lines.Add('Формула прямоугольников');
res := 1e+10;
repeat
n := n * 2;
zz := Res;
Res := RECT(a,b,n);
Memo1.Lines.Add(IntToStr(n) + ' '+FloatToStrF(Res,ffExponent,5,5));
ts := abs(res - zz)/3;
until ts < eps;
Memo1.Lines.Add('реультат = '+FloatToStrF(Res + ts,ffExponent,5,5));
Memo1.Lines.Add('');
Memo1.Lines.Add('Формула трапеций');
n := 1;
res := 1e+10;
repeat
n := n * 2;
zz := Res;
Res := TRAP(a,b,n);
Memo1.Lines.Add(IntToStr(n) + ' '+FloatToStrF(Res,ffExponent,5,5));
ts := abs(res - zz)/3;
until ts < eps;
Memo1.Lines.Add('реультат = '+FloatToStrF(Res + ts,ffExponent,5,5));
Memo1.Lines.Add('');
Memo1.Lines.Add('Формула Симпсона');
n := 1;
res := 1e+10;
repeat
n := n * 2;
zz := Res;
Res := SIMPS(a,b,n);
Memo1.Lines.Add(IntToStr(n) + ' '+FloatToStrF(Res,ffExponent,5,5));
ts := abs(res - zz)/15;
until ts < eps;
Memo1.Lines.Add('реультат = '+FloatToStrF(Res + ts,ffExponent,5,5));
Memo1.Lines.Add('');
Memo1.Lines.Add('Формула Гаусса');
Memo1.Lines.Add('реультат = '+FloatToStrF(Gauss(a,b),ffExponent,5,5));
end;
247
Р езультаты раб оты програм м ы :
248
Варианты заданий
Таблица 9
Номер
варианта
1
Задание
Г
J
с о <
3
5
7
Jf с
13
15
4
e™4x
6
8
J c o s x 2dx
27
29
sinlx-h X"
/:
dx
14
f
cosh:2 dx
16
sin
2x e ' dx
In x
(x — 1 ) 1dx
cosx 2dx
f
J a
P
In sin x dx
J n f -z
18
sin n 3cEjc
22
X
24
/;
n:smn:adx
26
j
Д c o s д 3 ebc
28
/ iu
30
Jо
i :
Jо
Г cos(.н: —н::
20
J , Ei
I
x dx
н:4е 1 dx
т/4
25
Jf f
e h * 2 dx
12
J‘n/2
19
23
Jf c
sin xe x'mdx
-N ) dx
17
21
Jf f
/1
:
Jf c
х‘
10
dx
cosne
j
Задание
2
e^-dx
Jо
9
11
X—X3
D
Номер
варианта
Лг/z
ln (l — г )
dx
sh x 2dx
-■nr/4
■dx
s in X
0,1 v*
J ft
ln(l —cosnOdx
cosh
:
Vh:
■dx
J sin(2 cosHc)tb:
249
Л абораторная работа № 13
П р и б л и ж е н н о е в ы ч и с л е н и е п р е о б р а з о в а н и я Ф у р ье
П ри реш ении ш ирокого круга прикладны х за д а ч , в ча стности в циф ровом сп ектральном ан ал и зе, в циф ровом мо д ели ровани и ф и л ьтров, расп озн авани и о б р азо в , анализе ре чевы х си гн ал о в , а такж е при реш ении м ногих задач чис ленного анализа, возн икает необходим ость
вы числения
интегралов вида
b
(1)
a
где w — произвольное дей стви тельн ое ч и с л о . Для вычис ления этого и нтеграла можно прим енить многие известны е
классически е правила и н тегри ровани я, такие, наприм ер,
как ф ормула трапеций, парабол и др., основанны е на ф ор­
м улах К о тес а, Г аусса и т . д . О днако все эти формулы име ют сущ ественны й н ед о стато к .
Ф орм улы , которы е уп ом инались вы ш е, получаю т с по мощ ью зам ены интегри руем ой ф ункции алгебраически м
м ногочленом невы сокого порядка на всем отрезке и н тегр и ­
рования или его ч а с т я х . П оэтому следует о ж и д ать, что они
будут давать хорош ую точн ость, если интегрируем ая
функция достаточн о гладка и не очень бы стро м ен яется. В
интеграле (1) и нтегрируем ы м и ф ункциям и являю тся произ ведения f (x) sin w x и f (x) cos w x . Если парам етр w - боль шое ч и сл о , то ф ункции cos w x и sin w x быстро ко л еб л ю тся,
и для того чтобы достаточн о точно проследить за измене нием п роизведен ий f (x) sin w x и f (x) cos w x даж е при мед ленно м еняю щ ейся ф ункции f ( x ), нужно взять в квадратур ной ф ормуле больш ое число узлов. В результате вы чи сл е­
ния м огут стать трудны м и или даж е невы полним ы м и.
Ч тобы построить квадратурную ф орм улу, пригодную
для вы числения и нтеграла (1) в ш ироком диап азоне изме нения парам етра w, необходим о учесть м нож ители sin w x и
cos w x (e~iwx) в поды нтегральн ой ф ун кц и и .
В прикладны х задачах чащ е всего требуется вы числить
интеграл (1 ) не при одном, а сразу при нескольких зн ач е­
ниях п арам етра w вида w^ = kAw, к = 0,... ,n - 1 . Все это при 250
водит к необходи м ости получить такую квадратурную
формулу и алгоритм ее р еал и зац и и , в которы х вы числения
проводятся не последовательно для каж дого значения п арам етра % а сразу для всей совокупн ости значен ии этого
п ар ам етр а.
В данной лабораторн ой работе используется к вад р а­
турная ф орм ула вида
n- 1
I (ю) = I f j A j ,
(2)
j =о
где
x j+1
1
- iwh
.
\
/ . ч,
1—e
-zwx;
Aj = I exp(-i wx) dx =
e
J;
j
x.
iw
xj
.
w
^
x j = a + jh,
h = - —a , j = 0 ,1,..., n -1, x j - узлы равном ерн ой
n
сетки на k ь \ f j = f ( x )значения
ф ункции f (x ) в узлах
сетки.
tt
~
2nk
2n ,
Для значений щ =
, Aw = ------ ф ормулу
-- a
-- a
переписать в виде
1 _ e~iwkh
.
I (Ю) =
he ka F (k),
iWkh
(2) можно
(3)
n -1
где
F(k) = I fje n .
(4)
j=o
П ереход от величин fj к величинам F (k ) ( j; k = 0, 1, ...,
n - 1) назы вается дискрет ным преобразованием Фурье
(Д П Ф ).
Д искретное п реобразовани е Ф урье является составной
частью реш ения м ногих прикладны х за д а ч . Зам ечательны м
свойством дискретного преобразовани я Ф урье является
возм ож ность его об ращ ен и я, т . е . восстан овлен ия величин
fj по известны м значениям F (k ) (j, k , 1, ..., n - 1). Эта о п ерация осущ ествляется по ф ормулам обратного п р ео б р азо ­
вания Ф урье
, n-1
f j = - 1 F (k )e n .
(5)
n k=o
251
Н епосредствен но осущ ествление ди скретн ы х преобра зований Ф урье по ф орм улам (4) или (5) требует O(n )
ари ф м ети ческих о п ер ац и й . Для сокращ ения объем а вычис лений были разработаны алгоритм ы бы строго п реобразова ния Ф урье (БП Ф ). О сновная идея алгорит ма быстрого
преобразования Фурье осн ована на то м , что при составном
n в правой части (4) или (5) можно вы делить такие группы
слагаем ы х, которы е даю т вклад во многие коэф ф ициенты
F( k). Н аибольш ее расп ростран ен и е получил алгоритм Б П Ф ,
разработанн ы й для случая n = 2m. Для его реали зац ии тре буется O(n log2 n) ари ф м ети ческих о п ер ац и й .
П роцедура FF производит бы строе п реобразовани е
Ф урье м ассива из n ком плексны х чисел.
procedure FF (var xr, xi, yr, yi: TMas; const n, ind: Integer);
В х о д н ы е п а р а м е т р ы : xr, xi - массивы разм ер ности n , содерж ат соответствен но д ей стви тельн ы е и м н и ­
мые части элем ентов заданного м асси в а; yr, yi - рабочие
массивы разм ерн ости n; n - количество заданны х ком плексны х чисел (целая степень двойки);
ind - признак, указы ваю щ ий направление преобразования
Ф у р ье:
ind > 0 - производится прямое п р ео б р азо в ан и е;
ind < 0 - производится обратное п реобразова ние.
В ы х о д н ы е п а р а м е т р ы : дей стви тельн ая и м н и ­
мая части дискретного преобразовани я Ф урье хранятся в
м ассивах х r и x i , соответствен но
Схема алгоритм а приведена на рис 43.
Т екст п роц ед уры :
procedure FF(var xr, xi, yr, yi: TMas; const n, ind: Integer);
var
i,ni,j,jm,k,k1,m,mm, m2,log2,l,l1,it: Integer;
xa,xb,w,si,co: Real;
begin
k := n;
log2 := 0;
repeat
k := k div 2;
log2 := log2 + 1;
until (k < 2);
252
mm := 1;
{ cycl 1}
for m := 1to log2 do
begin
m2 := mm*2;
k1 := trunc(power(2,(log2 - m)) - 1);
l1 := mm - 1;
{ cycl 2 }
for k := 1to k1 + 1do
begin
{ cycl 3}
for l := 1to l1 + 1do
begin
j := m2*(k - 1) + l;
i := mm*(k - 1) + l;
w := pi*(l - 1)/mm;
si := ind*sin(w);
co := cos(w);
ni := trunc(power(2,(log2 - 1)) + i);
jm := trunc(j + power(2, (m - 1)));
xa := xr[ni]*co + xi[ni]*si;
xb := xi[ni]*co - xr[ni]*si;
yr[j] := xr[i] + xa;
yi[j] := xi[i] + xb;
yr[jm] := xr[i] - xa;
yi[jm] := xi[i] - xb;
end;
{ cycl 3 }
end;
{ cycl 2 }
{ cycl 5 }
for it := 1to n do
begin
xr[it] := yr[it];
xi[it] := yi[it];
end;
{ cycl 5}
mm := m2;
end;
{ cycl1}
if ind < 0 then exit;
{ cycl 4 }
for i := 1to n do
begin
xr[i] := xr[i]/n;
xi[i] := xi[i]/n;
end;
{ cycl 4 } end;
253
procedure F F (va rxr, xi, yr, yi:
TMas; const n, ind: Integer)
к = n
log2 = 0
к = к + 1
В
D
it = 1, it > n
k = k /2
log2 = log2 + 1
к <2
R
mm=1
mm = m2
m = 1, m > log2
m2 = mm*2
I
m= m + 1
A
J
11 = mm -1
к = 1, к > k1 + 1
С
I=1, I>I +1
xr[i] = xr[i]/n
xi[i] = xi[i]/n
i= i+ 1
E
Рисунок 43 - Схема алгоритма прямого и обратного быстрого пре­
образования Фурье.
254
Процедура IFF реализует алгоритм вычисления интеграла (1)
по формулам (2) - (4)
procedure IFF (const a, b: Real; var ar, ai, xr, xi: TMas; const n: Integ­
er;
eps: Real; const ip: Integer);
В х о д н ы е п а р а м е т р ы : a, b - концы интервала интег­
рирования; ar, ai - массивы размерности n, содержат соответст­
венно действительную и мнимую части значений функции f(x) в
равноотстоящих узлах хi = а + i(b - o)/n, i = 0, 1, ..., n - 1 на [а, b];
хг , xi - рабочие массивы размерности n; n - количество узлов сетки
на [a, b]; eps - параметр, регулирующий точность вычисления ин­
теграла при близких к нулю значениях w ^x; ip - параметр, опреде­
ляющий аргумент экспоненты:
ip = 1 - вычисляем интеграл от f (x) = e~imx;
ip = -1 - вычисляем интеграл от f (x) = eiwx.
В ы х о д н ы е п а р а м е т р ы : действительная и мнимая
части значения интеграла в точках щ = 2пк / (b - a) находятся в
массивах аr и ai соответственно.
( Процедура использует процедуру procedure FF (var xr, xi,
yr, yi: TMas; const n, ind: Integer); для вычисления быстрого преоб­
разования Фурье.)
Схема алгоритма процедуры IFF приведена на рисунке 44.
Текст процедуры:
procedure IFF (const a, b: Real; var ar, ai, xr, xi: TMas; const n: Integer; eps: Real; const ip: In­
teger);
var
i,k : Integer;
h, w, c, s, w1, w2, w3, w4, w5, a1, b1: Real;
begin
h := (b - a)/n;
{Вычисление быстрого преобразования Фурье процедурой FF}
FF(ar,ai,xr,xi,n,ip);
for i := 1to n do
begin
k := i - 1;
w := k*2*pi/(b - a);
c := cos(w*a);
s := sin(w*a);
w := w*h*(b - a);
255
if w < eps then
begin
w4 := h - 2*pi*pi*k*k*power(h,3)/power((b - a),2);
w5 := 2*pi*k*h*h/(b - a);
a1 := w4*ar[i] + ip*w5*ai[i];
b1 := w4*ai[i] - ip*w5*ar[i];
end else
begin
if k=0 then begin
w1 :=0;
w3 := 0
end else begin
w1 := sin(2*pi*k/n)*(b - a)/(2*pi*k);
w2 := 2*power(sin(pi*k/n),2);
w3 := w2*(b - a)/(2*pi*k);
end;
w2 := 2*power(sin(pi*k/n),2);
a1 := w1*ar[i] + ip*w3*ai[i];
b1 := w1*ai[i] - ip*w3*ar[i];
end;
ar[i] := a1*c + b1*s*ip;
ai[i] := b1*c - a1*s*ip;
if ip > 0 then
begin
ar[i] := ar[i]*n*n;
ai[i] := ai[i]*n*n;
end;
ar[i] := ar[i]/n;
ai[i] := ai[i]/n;
end;
end;
256
Рисунок 44 - Схема алгоритма процедуры IFF
257
b 2 IOK
Пример. Вычислить J e -xx eimxd
x , используя квадратурную форa
мулу с 512 узлами ( при w = % =
, к = 0,1, к ,n - 1,n = 512.)
b- a
Программа вычисления интеграла содержит вычисление значе­
ний f(x) в узлах равномерной сетки из n узлов на [a,b]. Вычислен­
ные значения размещаются в соответствующих массивах ar и ai.
Далее вызывается процедура IFF.
Схема алгоритма приведена на рисунке 45.
unit Unitl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Math;
type
TForml = class(TForm)
sgOut: TStringGrid;
btnRun: TButton;
procedure btnRunClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Forml: TForml;
implementation
{$R *.dfm}
type TMas = array of Real;
procedure FF(var xr, xi, yr, yi: TMas; const n, ind: Integer);
var
i,ni,j,jm,k,k1 ,m,mm, m2,log2,l,l1,it: Integer;
xa,xb,w,si,co: Real;
begin
k := n;
log2 := 0;
repeat
258
k := k div 2;
log2 := log2 + 1;
until (k < 2);
mm := 1;
{ cycl 1 }
for m := 1to log2 do
begin
m2 := mm*2;
k1 := trunc(power(2,(log2 - m)) - 1);
l1 := mm - 1;
{ cycl 2 }
for k := 1to k1 + 1do
begin
{ cycl 3 }
for l := 1to l1 + 1do
begin
j := m2*(k - 1) + l;
i := mm*(k - 1) + l;
w := pi*(l - 1)/mm;
si := ind*sin(w);
co := cos(w);
ni := trunc(power(2,(log2 - 1)) + i);
jm := trunc(j + power(2, (m - 1)));
xa := xr[ni]*co + xi[ni]*si;
xb := xi[ni]*co - xr[ni]*si;
yr[j] := xr[i] + xa;
yi[j] := xi[i] + xb;
yr[jm] := xr[i] - xa;
yi[jm] := xi[i] - xb;
end;
{ cycl 3 }
end;
{ cycl 2 }
{ cycl 5 }
for it := 1to n do
begin
xr[it] := yr[it];
xi[it] := yi[it];
end;
{ cycl 5 }
mm := m2;
end;
{ cycl 1 }
if ind < 0 then exit;
{ cycl 4 }
for i := 1to n do
begin
xr[i] := xr[i]/n;
xi[i] := xi[i]/n;
end;
{ cycl 4 }
end;
259
procedure IFF (const a, b: Real; var ar, ai, xr, xi: TMas; const n: Integer; eps: Real; const ip: In­
teger);
var
i,k : Integer;
h, w, c, s, w1, w2, w3, w4, w5, a1, b1: Real;
begin
h := (b - a)/n;
{Вычисление быстрого преобразования Фурье программой FF}
FF(ar,ai,xr,xi,n,ip);
for i := 1to n do
begin
k := i - 1;
w := k*2*pi/(b - a);
c := cos(w*a);
s := sin(w*a);
w := w*h*(b - a);
if w < eps then
begin
w4 := h - 2*pi*pi*k*k*power(h,3)/power((b - a),2);
w5 := 2*pi*k*h*h/(b - a);
a1 := w4*ar[i] + ip*w5*ai[i];
b1 := w4*ai[i] - ip*w5*ar[i];
end else
begin
if k=0 then begin
w1 :=0;
w3 := 0
end else begin
w1 := sin(2*pi*k/n)*(b - a)/(2*pi*k);
w2 := 2*power(sin(pi*k/n),2);
w3 := w2*(b - a)/(2*pi*k);
end;
w2 := 2*power(sin(pi*k/n),2);
a1 := w1*ar[i] + ip*w3*ai[i];
b1 := w1*ai[i] - ip*w3*ar[i];
end;
ar[i] := a1*c + b1*s*ip;
ai[i] := b1*c - a1*s*ip;
if ip > 0 then
begin
ar[i] := ar[i]*n*n;
ai[i] := ai[i]*n*n;
end;
ar[i] := ar[i]/n;
ai[i] := ai[i]/n;
end;
end;
procedure TForm1.btnRunClick(Sender: TObject);
var
n, i : Integer;
260
a, b, h, x, omg, eps : Real;
xr, xi, ar, ai : TMas;
begin
Form1.sgOut.Cells[0,0]:='№';
Form1.sgOut.Cells[1,0]:='омега';
Form1.sgOut.Cells[2,0]:='дейст-я часть';
Form1.sgOut.Cells[3,0] :='мнимая часть';
eps := 0.1E-6;
a := 0;
b := 20;
n := 512;
h := 20/n;
omg := 0;
SetLength(xr, n+1);
SetLength(xi, n+1);
SetLength(ar, n+1);
SetLength(ai, n+1);
for i := 1to n do
begin
x := (i - 1)*h;
ar[i] := exp(-x*x);
ai[i] := 0;
end;
IFF(a,b,ar,ai,xr,xi,n,eps,1);
sgOut.RowCount := n + 1;
for i := 1to n do
begin
omg := (i - 1)*2*pi/(b - a);
sgOut.Cells[0,i] := IntToStr(i);
sgOut.Cells[1,i] := FloatToStrF(omg,ffFixed,7,6);
sgOut.Cells[2,i] := FloatToStrF(ar[i],ffExponent,7,7);
sgOut.Cells[3,i] := FloatToStrF(ai[i],ffExponent,7,7);
end;
end;
end.
261
Начало
SetLength(xr,
SetLength(xi,
SetLengthjar,
SetLength(ai,
n+1)
n+1)
n+1)
n+1)
Вызов функции, задающей
размер N+1 динамических
массивов XR, XI, AR, AI
A
i = 1, i > n
IFF(a, b, ar, ai,
xr, xi, n, eps,1)
обращение к процедуре
IFF, вычисляющей
интеграл
В
i = 1, i > n
о т := (i -1 )*2*pi/(b - а)
Вывод
aifi]
Рисунок 45 - Схема алгоритма вычисления интеграла.
262
Вычисления по программе привели к следующим результатам:
№
ш
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
0,000000
0,314159
0,628319
0,942478
1,256637
1,570796
1,884956
2,199115
2,513274
2,827433
3,141593
3,455752
3,769911
4,084070
4,398230
4,712389
5,026548
5,340708
. . .
154,566400
154,880500
155,194700
155,508800
155,823000
156,137200
156,451300
156,765500
157,079600
157,393800
157,708000
158,022100
158,336300
158,650400
158,964600
159,278700
159,592900
159,907100
160,221200
160,535400
Действительная
часть
9,057582E-1
8,831889E-1
8,187761E-1
7,216180E-1
6,045151E-1
4,812212E-1
3,638563E-1
2,611314E-1
1,776797E-1
1,144008E-1
6,946244E-2
3,951928E-2
2,079204E-2
9,813039E-3
3,804643E-3
7,651842E-4
-6,231108E-4
-1,159402E-3
. . .
4,695544E-5
4,830774E-5
4,707561E-5
3,981786E-5
2,010035E-5
-2,309409E-5
-1,069578E-4
-2,556503E-4
-4,990090E-4
-8,676888E-4
-1,383714E-3
-2,046932E-3
-2,820312E-3
-3,619643E-3
-4,314501E-3
-4,745771E-3
-4,759961E-3
-4,253151E-3
-3,210886E-3
-1,728354E-3
Мнимая часть
0,000000E+0
-1,599023E-1
-3,042652E-1
-4,205082E-1
-5,011387E-1
-5,445265E-1
-5,542706E-1
-5,375433E-1
-5,030347E-1
-4,591037E-1
-4,125289E-1
-3,679761E-1
-3,280630E-1
-2,937869E-1
-2,650754E-1
-2,412863E-1
-2,215746E-1
-2,051132E-1
. . .
-6,865602E-3
-6,908742E-3
-6,966648E-3
-7,044293E-3
-7,147567E-3
-7,282281E-3
-7,451919E-3
-7,653768E-3
-7,873511E-3
-8,079315E-3
-8,217708E-3
-8,214580E-3
-7,984678E-3
-7,451095E-3
-6,572379E-3
-5,370084E-3
-3,945974E-3
-2,478437E-3
-1,193197E-3
-3,129204E-4
263
Варианты заданий
Вычислить Г—71f\x)eiuxdr
Т а б л и ц а 10
Номер ва­
рианта
f(x)
Номер ва­
рианта
f(x)
1
simx2
16
cosx2
17
cos jy l + x j
264
2
sin
+ Jt2)
3
arctg{
\
\ l - Юл/
18
1
1 - lQQx2
4
* - L>
ar csm/ -------\10- x2>
19
ln(xz —,t 2—1)
5
sinx cosx2
20
cos fx ——] sin x2
6
sin x 1п(тэ + 1)
21
л/тт2—x2arctgx
7
Vn n „ 5
VЛ" — smx
22
{% —71 Sin
8
smxe -ж2
23
g-loU-тг)2
9
vV2- x 2arctg(x2-7 )
24
sinst sh(i2—я)
10
chU2+ 3)sini
25
sm*ch(hi* + 2*)
11
л/х2—lSx —20 sin x2
26
x2—chx
1 - 65x2
12
fx —12 \
In ^—-— ch xJ
27
13
cos(x —.t)2sinx
28
14
In (л/х 4—2 —sin2x^
29
15
SinX- cosx ^
30
■
.
—x2chx
sin(x —n:)2sirix
x2—2x —23
------------- sin x
lOx —100
713JS1.I1X2
COS"2/^x ——
Список использованной литературы
1. Амосов А.А., Дубинский Ю.А., Копченова Н.В. Вычисли тельные методы для инженеров - М.: Высшая школа, 1994-544 с.
2. Бахвалов Н.С. Численные методы - М.: Наука, 1973-631 с.
3. Вержбицкий В.М. Численные методы. Математический ана­
лиз и обыкновенные дифференциальные уравнения. - М.: Высшая
школа, 2001 -400 с.
4. Волков Е.А. Численные методы - СПб.: Лань, 2004- 256 с.
5. Воробьева Г.Н., Данилова А.Н. Практика по численным ме тодам - М.: Высшая школа, 1979 - 184 с.
6. Демидович Б.П., Марон И.А., Шувалова Э.З. Численные ме тоды анализа - М.: Наука, 1967 - 368 с.
7. Ильин В.П. Численный анализ, Часть 1 -Новосибирск : ИВМ
и МГСО РАН, 2004 -335 с.
8. Калиткин Н.Н. Численные методы - М.: Наука ,1978-512 с.
9. Копченова Н.В., Марон И.А. Вычислительная математика в
примерах и задачах - М.: Наука, 1972 - 246 с.
10. Костомаров Д .П., Фаворский А .П Вводные лекции по чис ленным методам - М.: Логос, 2004 -184с.
11. Лебедев В.И. Функциональный анализ и вычислительная
математика - М.: Физматлит, 2005 -296 с.
12. Марчук Г.И. Методы вычислительной математики - М.:
Наука, 1989 - 372 с.
13. Плис А.И., Сливина Н.А. Лабораторный практикум по выс­
шей математике - М.: Высшая школа, 1994 - 41 6 с.
14. Ракитин В.И. Руководство по методам вычислений и приложения MATHCAD -. М.: Физматлит, 2005 -264с.
15. Самарский А.А. Введение в численные методы - М.: Наука,
1982 - 287 с.
16. Самарский А.А., Гулин А.В . Численные методы - М.: Нау ка, 1989 - 429 с.
17. Турчак Л.И., Плотников П.В. Основы численных методов М.: Физматлит, 2002 - 304с.
18. Тыртышников Е.Е. Методы численного
анализа М.: Академия, 2007 - 320 с.
19. Хемминг Р .В. Численные методы для научных работников и
инженеров - М.: Наука, 1972 - 400 с.
265
В.Н. ТАРАСОВ, Н.Ф. БАХАРЕВА
ЧИСЛЕННЫЕ МЕТОДЫ
ТЕОРИЯ
АЛГОРИТМЫ
ПРОГРАММЫ
ИЗДАНИЕ ВТОРОЕ,
ПЕРЕРАБОТАННОЕ
Подписано в печать: 29.09.2008
Тираж: 120 экз. 15 усл. п.л. Заказ №
Отпечатано в типографии ГОУ ВПО ПГАТИ
443090, г. Самара, Московское шоссе, 77
266
Документ
Категория
Без категории
Просмотров
20
Размер файла
2 821 Кб
Теги
programma, teoriya, tarasov, algoritm, bahareva, metod, chislennym
1/--страниц
Пожаловаться на содержимое документа