10000Е+01

advertisement
Численные методы. ПИ-31, 2010г. Утёмов В.В.
Содержание
1
1.1
Введение
Решение систем линейных алгебраических уравнений
Точные методы решения систем линейных алгебраических уравнений
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1.2.6
2
Метод Гаусса
Связь метода Гаусса с разложением матрицы на множители. Теорема об
LU разложении
Метод Гаусса с выбором главного элемента
Метод Холецкого (квадратных корней)
Итерационные методы решения систем линейных алгебраических
уравнений
Метод Якоби (простых итераций)
Метод Зейделя
Матричная запись методов Якоби и Зейделя
Метод Ричардсона
Метод верхней релаксации (обобщенный метод Зейделя)
Сходимость итерационных методов
Плохо обусловленные системы линейных алгебраических уравнений
2.1
2.2
3
3.1
3.1.1
3.1.2
3.2
4
4.1
4.1.1
4.1.2
4.1.3
4.1.4
5
5.1
5.1.1
5.2
5.2.1
Метод регуляризации для решение плохо обусловленных систем
Метод вращения (Гивенса)
Решение нелинейных уравнений
Метод простых итераций
Условия сходимости метода
Оценка погрешности
Метод Ньютона
Решение проблемы собственных значений
Прямые методы
Метод Леверрье
Усовершенствованный метод Фадеева
Метод Данилевского
Метод итераций определения первого собственного числа матрицы
Задача приближения функций
Интерполяционный многочлен Лагранжа
Оценка погрешности интерполяционного многочлена
Интерполяционные полиномы Ньютона
Интерполяционный многочлен Ньютона для равноотстоящих узлов
1.1.1
1.1.2
1.1.3
1.1.4
1.2
5.2.2
5.3
5.3.1
5.3.2
Вторая интерполяционная формула Ньютона
Интерполирование сплайнами
Построение кубического сплайна
Сходимость процесса интерполирования кубическими сплайнами
5.4
6
Аппроксимация функций методом наименьших квадратов
Численные методы решения задачи Коши для обыкновенных
дифференциальных уравнений и систем дифференциальных уравнений
Семейство одношаговых методов решения задачи Коши
Метод Эйлера
Методы Рунге-Кутта
6.1
6.1.1
6.1.2
7
12
12
12
15
17
18
19
19
20
21
22
23
23
25
26
28
31
33
34
34
35
38
40
40
41
41
43
46
48
49
51
51
53
54
55
56
57
61
62
62
63
6.2
6.2.1
6.2.2
6.2.3
6.3
6.3.1
6.3.2
6.3.2.1
6.3.2.2
6.4
6.5
6.6
6.6.1
6.6.2
7
Многошаговые разностные методы решения задачи Коши для
обыкновенных дифференциальных уравнений
Задача подбора числовых коэффициентов a k , bk
Устойчивость и сходимость многошаговых разностных методов
Примеры m-шаговых разностных методов Адамса
Численное интегрирование жестких систем обыкновенных
дифференциальных уравнений
Понятие жесткой системы обыкновенных дифференциальных уравнений
Некоторые сведения о других методахрешения жестких систем
Методы Гира
Метод Ракитского
Решение линейной краевой задачи
Решение двухточечной краевой задачи для линейного уравнения второго
порядка
Методы решения двухточечной краевой задачи для линейного уравнения
второго порядка сведением к задаче Коши
Метод конечных разностей
Метод прогонки
Решение дифференциального уравнения в частных производных
66
67
68
69
70
71
73
73
74
78
79
81
81
82
85
7.1
7.2
Метод сеток для решения смешанной задачи для уравнения
параболического типа (уравнения теплопроводности)
Решение задачи Дирихле для уравнения Лапласа методом сеток
86
88
7.3
Решение смешанной задачи для уравнения гиперболического типа
методом сеток
Лабораторная работа № 1. Решение систем линейных алгебраических уравнений.
Точные методы
1.1 Метод Гаусса
1.2 Метод Холецкого
Лабораторная работа № 2. Решение систем линейных алгебраических уравнений.
Приближенные методы
2.1 Метод Якоби
2.2 Метод верхней релаксации
2.3 Метод Зейделя
90
93
101
Лабораторная работа № 3. Решение плохо обусловленных систем линейных
алгебраических уравнений
3.1 Метод регуляризации
3.2 Метод вращения (Гивенса)
112
Лабораторная работа № 4. Решение нелинейных уравнений и систем нелинейных
уравнений
4.1 Метод простых итераций
4.2 Метод Ньютона
117
Лабораторная работа № 5. Решение проблемы собственных значений и
собственных векторов. Точные методы
5.1 Метод Леверрье
123
2
5.2 Метод Фадеева
5.3 Метод Крылова
Лабораторная работа № 6. Решение проблемы собственных значений и
собственных векторов. Итерационные методы
6.1 Метод QR-разложения
6.2 Метод обратных итераций
130
Лабораторная работа № 7. Приближение функций
7.1 Интерполяционный полином Лагранжа
7.2 Интерполирование функций с помощью кубического сплайна
7.3 Интерполяционные формулы Ньютона
7.4 Аппроксимация функций методом наименьших квадратов
137
Лабораторная работа №8. Решение задачи Коши. Одношаговые методы
8.1 Метод Эйлера
8.2 Метод прогноза и коррекции
8.3 Метод Рунге-Кутта 4-го порядка
Лабораторная работа №9. Решение задачи Коши. Многошаговые методы
150
157
9.1 Метод Адамса (явный)
Лабораторная работа №10. Численное интегрирование и дифференцирование
162
10.1 Формула Симпсона
10.2 Квадратурная формула Гаусса
10.3 Дифференцирование с помощью сплайнов
Лабораторная работа №11. Жесткие задачи для систем ОДУ
11.1 Метод Гира
11.2 Метод Ракитского (матричной экспоненты)
Список использованных источников
168
177
3
Введение
Математическое моделирование и вычислительный эксперимент
1. Схема вычислительного эксперимента. Эффективное решение крупных
естественнонаучных и народнохозяйственных задач сейчас невозможно без применения
быстродействующих электронно-вычислительных машин (ЭВМ). В настоящее время
выработалась технология исследования сложных проблем, основанная на построение и
анализе с помощью ЭВМ математических моделей изучаемого объекта. Такой метод
исследования называют вычислительным экспериментом.
Пусть, например, требуется исследовать какой-то физический объект, явление,
процесс. Тогда схема вычислительного эксперимента выглядит так, как показано на
рисунке 1.
Формулируются основные законы, управляющие данным объектом исследования (I)
и строится соответствующая математическая модель (II),
представляющая обычно запись этих законов в форме системы уравнений
(алгебраических, дифференциальных, интегральных и т. д.).
I
Объект
исследования
Проведение
вычислений
и анализ
результатов
II
Математическая
модель
V
Численные III
методы(дискретная
модель
вычислитьельного
алгоритма)
IV
Программирование
на ЭВМ
Рисунок 1 - Этапы построения и анализа с помощью ЭВМ математической модели
объекта
При выборе физической и, следовательно, математической модели мы пренебрегаем
факторами, не оказывающими существенного влияния на ход изучаемого процесса.
Типичные математические модели, соответствующие физическим явлениям,
формулируются в виде уравнений математической физики. Большинство реальных
процессов описывается нелинейными уравнениями и лишь в первом приближении
(при малых значениях параметров, малых отклонениях от равновесия и др.) эти уравнения
можно заменить линейными.
После того как задача сформулирована в математической форме, необходимо
найти ее решение. Но что значит решить математическую задачу? Только в
исключительных случаях удается найти решение в явном виде, например в виде ряда.
Иногда утверждение «задача решена» означает, что доказано существование и
единственность решения. Ясно, что этого недостаточно для практических приложений.
Необходимо еще изучить качественное поведение решения и найти те или иные
количественные характеристики.
Именно на этом этапе требуется привлечение ЭВМ и, как следствие, развитие
численных методов (см. III на рис. 1).
Под численным методом здесь понимается такая интерпретация математической
модели («дискретная модель»), которая доступна для реализации на ЭВМ.
4
Например, если математическая модель представляет собой дифференциальное
уравнение, то численным методом может быть аппроксимирующее его разностное
уравнение совместно с алгоритмом, позволяющим отыскать решение этого разностного
уравнения. Результатом реализации численного метода на ЭВМ является число или
таблица чисел. Отметим, что в настоящее время помимо собственно численных методов
имеются также методы, которые позволяют проводить на ЭВМ аналитические выкладки.
Однако аналитические методы для ЭВМ не получили пока достаточно широкого
распространения.
Чтобы реализовать численный метод, необходимо составить программу для ЭВМ
(см. IV на рис. 1) или воспользоваться готовой программой. После отладки программы
наступает этап проведения вычислений и анализа результатов (V). Полученные
результаты изучаются с точки зрения их соответствия исследуемому явлению и, при
необходимости, вносятся исправления в численный метод и уточняется математическая
модель.
Такова в общих чертах схема вычислительного эксперимента. Его основу составляет
триада: модель — метод (алгоритм) — программа. Опыт решения крупных задач
показывает, что метод математического моделирования и вычислительный эксперимент
соединяют в себе преимущества традиционных теоретических и экспериментальных
методов исследования. Можно указать такие крупные области применения
вычислительного эксперимента, как энергетика, аэрокосмическая техника, обработка
данных натурного эксперимента, совершенствование технологических процессов.
2. Вычислительный алгоритм. Предметом данной книги является изложение
вопросов, отражающих этапы III, IV, V вычислительного эксперимента. Таким образом,
здесь не обсуждаются исходные задачи и их математическая постановка.
Необходимо подчеркнуть, что процесс исследования исходного объекта методом
математического моделирования и вычислительного эксперимента неизбежно носит
приближенный характер, потому что на каждом этапе вносятся те или иные погрешности.
Так, построение математической модели связано с упрощением исходного явления,
недостаточно точным заданием коэффициентов уравнения и других входных данных. По
отношению к численному методу, реализующему данную математическую модель,
указанные погрешности являются неустранимыми, поскольку они неизбежны в рамках
данной модели.
При переходе от математической модели к численному методу возникают
погрешности, называемые погрешностями метода. Они связаны с тем, что всякий
численный метод воспроизводит исходную математическую модель приближенно.
Наиболее типичными погрешностями метода являются погрешность дискретизации и
погрешность округления. Поясним причины возникновения таких погрешностей.
Обычно построение численного метода для заданной математической модели
разбивается на два этапа: а) формулирование дискретной задачи, б) разработка
вычислительного алгоритма, позволяющего отыскать решение дискретной задачи.
Например, если исходная математическая задача сформулирована в виде системы
дифференциальных уравнений, то для численного решения необходимо заменить ее
системой конечного, может быть, очень большого числа линейных или разностных
алгебраических уравнений. В этом случае говорят, что проведена дискретизация исходной
математической задачи. Простейшим примером дискретизации является построение
разностной схемы, путем замены дифференциальных выражений конечно-разностными
отношениями. В общем случае дискретную модель можно рассматривать как
конечномерный аналог исходной математической задачи. Ясно, что решение
дискретизированной задачи отличается от решения исходной задачи. Разность
соответствующих решений и называется погрешностью дискретизации. Обычно
дискретная модель зависит от некоторого параметра (или множества параметров)
дискретизации, при стремлении которого к нулю должна стремиться к нулю и
5
погрешность дискретизации. При этом число алгебраических уравнений, составляющих
дискретную модель, неограниченно возрастает. В случае разностных методов таким
параметром является шаг сетки.
Как уже отмечалось, дискретная модель представляет собой систему большого числа
алгебраических уравнений. Невозможно найти решение такой системы точно и в явном
виде. Поэтому приходится использовать тот или иной численный алгоритм решения
системы алгебраических уравнений. Входные данные этой системы, а именно
коэффициенты и правые части, задаются в ЭВМ не точно, а с округлением. В процессе
работы алгоритма погрешности округления обычно накапливаются, и в результате
решение, полученное на ЭВМ, будет отличаться от точного решения дискретизированной
задачи. Результирующая погрешность называется погрешностью округления (иногда ее
называют вычислительной погрешностью). Величина этой погрешности определяется
двумя факторами: точностью представления вещественных чисел в ЭВМ и
чувствительностью данного алгоритма к погрешностям округления.
Алгоритм называется устойчивым, если в процессе его работы вычислительные
погрешности возрастают незначительно, и неустойчивым — в противоположном случае.
При использовании неустойчивых вычислительных алгоритмов накопление погрешностей
округления приводит в процессе счета к переполнению арифметического устройства
ЭВМ.
Итак, следует различать погрешности модели, метода и вычислительную. Какая же
из этих трех погрешностей является преобладающей? Ответ здесь неоднозначен. Видимо,
типичной является ситуация, возникающая при решении задач математической физики,
когда погрешность модели значительно превышает погрешность метода, а погрешностью
округления в случае устойчивых алгоритмов можно пренебречь по сравнению с
погрешностью метода. С другой стороны, при решении, например, систем обыкновенных
дифференциальных уравнений возможно применение столь точных методов, что их
погрешность будет сравнима с погрешностью округления. В общем случае нужно
стремиться, чтобы все указанные погрешности имели один и тот же порядок. Например,
нецелесообразно пользоваться разностными схемами, имеющими точность 10
2
6
, если
коэффициенты исходных уравнений задаются с точностью 10 .
3. Требования к вычислительным методам. Одной и той же математической
задаче можно поставить в соответствие множество различных дискретных моделей.
Однако далеко не все из них пригодны для практической реализации. Вычислительные
алгоритмы, предназначенные для быстродействующих ЭВМ, должны удовлетворять
многообразным и зачастую противоречивым требованиям. Попытаемся здесь
сформулировать основные из этих требований в общих чертах.
Можно выделить две группы требований к численным методам. Первая группа
связана с адекватностью дискретной модели исходной математической задаче, и
вторая группа-с реализуемостью численного метода на ЭВМ.
К первой группе относятся такие требования, как сходимость численного метода,
выполнение дискретных аналогов законов сохранения, качественно правильное поведение
решения дискретной задачи.
Поясним эти требования. Предположим, что дискретная модель математической
задачи представляет собой систему большого, но конечного числа алгебраических
уравнений. Обычно, чем точнее мы хотим получить решение, тем больше уравнений
приходится брать. Говорят, что численный метод сходится, если при неограниченном
увеличении числа уравнений решение дискретной задачи стремится к решению исходной
задачи.
Поскольку реальная ЭВМ может оперировать лишь с конечным числом уравнений,
на практике сходимость, как правило, не достигается. Поэтому важно уметь оценивать
погрешность метода в зависимости от числа уравнений, составляющих дискретную
модель. По этой же причине стараются строить дискретную модель таким образом, чтобы
6
она правильно отражала качественное поведение решения исходной задачи даже при
сравнительно небольшом числе уравнений.
Например, дискретной моделью задачи математической физики может быть
разностная схема. Для ее построения область изменения независимых переменных
заменяется дискретным множеством точек - сеткой, а входящие в исходное уравнение
производные заменяются, на сетке, конечно-разностными отношениями. В результате
получаем систему алгебраических уравнений относительно значений искомой функции в
точках сетки. Число уравнений этой системы равно числу точек сетки. Известно, что
дифференциальные уравнения математической физики являются следствиями
интегральных законов сохранения. Поэтому естественно требовать, чтобы для разностной
схемы выполнялись аналоги таких законов сохранения. Разностные схемы,
удовлетворяющие этому требованию, называются консервативными. Оказалось, что при
одном и том же числе точек сетки консервативные разностные схемы более правильно
отражают поведение решения исходной задачи, чем неконсервативные схемы.
Сходимость численного метода тесно связана с его корректностью. Предположим,
что исходная математическая задача поставлена корректно, т.е. ее решение существует,
единственно и непрерывно зависит от входных данных. Тогда дискретная модель этой
задачи должна быть построена таким образом, чтобы свойство корректности сохранилось.
Таким образом, в понятие корректности численного метода включаются свойства
однозначной разрешимости соответствующей системы уравнений и ее устойчивости по
входным данным. Под устойчивостью понимается непрерывная зависимость решения от
входных данных, равномерная относительно числа уравнений, составляющих дискретную
модель.
Вторая группа требований, предъявляемых к численным методам, связана с
возможностью реализации данной дискретной модели на данной ЭВМ, т. е. с
возможностью получить на ЭВМ решение соответствующей системы
алгебраических уравнений за приемлемое время. Основным препятствием для
реализации корректно поставленного алгоритма является ограниченный объем
оперативной памяти ЭВМ и ограниченные ресурсы времени счета. Реальные
вычислительные алгоритмы должны учитывать эти обстоятельства, т. е. они должны быть
экономичными как по числу арифметических действий, так и по требуемому объему
памяти.
7
Численные методы алгебры и анализа
1 Решение систем линейных алгебраических уравнений
Рассмотрим систему линейных алгебраических уравнений:
а11х1  а12 х 2  ...  а1m х m  b1
а х  а х  ...  а х  b
22 2
2m m
2
 21 1

. . . . . . . . .

а m1 х1  а m 2 х 2  ...  а m m х m  bm
(1.1)
или в матричной форме:
Aх=B,
(1.2)
где: A={aij} квадратная матрица размерности (mm,); х=(х1,….,хm)T; T – операция
транспонирования; b=(b1,….,bm)T; detA0.
Предположим, что определитель матрицы A не равен нулю. Тогда решение х
существует и единственно. На практике встречаются системы, имеющие большой
порядок. Методы решения системы (1.1) делятся на две группы:
1) прямые (точные методы);
2) итерационные методы (приближенные).
1.1 Точные методы
В методах Гаусса решение х находится за конечное число действий, но из-за
погрешности округления и их накопления прямые методы можно назвать точными,
только отвлекаясь от погрешностей округления.
1.1.1 Метод Гаусса
Прямой ход метода
1-й шаг. Предположим, что а110. Поделим первое уравнение на этот элемент:
x1  c12 x2  ...  c1m xm  y1 .
(1.3)
Остальные уравнений системы (1.1) запишем в виде
ai1 x1  ai 2 x2  ...  aim xm  bi ,
где i= 2, m .
Уравнение (1.3) умножаем на ai1 и вычитаем из i-го уравнения системы (1.4).
Получим систему вида:
8
(1.4)
 x1  c12 x2  ...  c1m xm  y1

(1)
(1)
a22
x2  ...  a2m
x1  b2(1)


. . . . . . . . . .


am(1)2 x2  ...  am(1)m x1  bm(1)
(1.5)
aij( 1 )  aij  c1 j ai1
bi( 1 )  bi  y1ai1
.
Система (1.5) имеет матрицу вида:
1

0
 ...

0

x ... x 

x ... x 
.
... ... ...

x ... x 
Работаем с укороченной системой, т.к. х1 входит только в 1-ое уравнение
(1)
(1)
a22
x2  ...  a2m
xm  b2(1)


. . . . . . . .
 (1)
(1)
(1)
am 2x2  ...  am mxm  bm

(1)
2-й шаг. Если а22  0 , то из укороченной системы аналогично исключаем
неизвестное x2 и получаем матрицу коэффициентов такого вида:
1

0
0

 ...
0

x
1
0

0
x
x
x
...
x
...
...
...

...
x

x
x .

...
x 
Аналогично повторяем указанные действия для неизвестных х3,х4,...,
хm-1 и приходим к системе с матрицей вида:
9
 x1  c12 x2  ...  c1m xm  y1

x2  ...  c2 m xm  y 2



.
. . . . . .

.

xm1  cm1,m xm  y m1


cm m xm  y m


(1.6)
Эта матрица является верхней треугольной:
1

0
0


0

0

x

1 x ... x x 
0 1 ... ... x 
.
...  ...  ...
0 0 ... 1 x 
0 0 ... ... x 
x
x
...
x
Обратный ход метода. Из последнего уравнения системы (1.6) находим хm, из
предпоследнего хm-1, ..., из первого уравнения – х1.
Общая формула:
xm=ym/cmm,
x y 
i
i
m
 c x , (i=m-1,…,1).
ij j
j  i 1
Для реализации метода Гаусса требуется примерно (2/3)m3 арифметических
операций, причем большинство из них приходится на прямой ход.
Ограничение метода единственного деления заключается в том, что угловые
элементы не равны нулю, т.е. а k  1  0 .
kk
к
Ведущие элементы – а  1 – элементы на k-ом шаге исключения. Но если ведущий
кк
элемент близок к нулю, то в процессе вычисления может накапливаться погрешность. В
этом случае на каждом шаге исключают не хk, a хj (при jk). Такой подход называется
методом выбора главного элемента. Для этого выбирают неизвестные xj с наибольшим по
абсолютной величине коэффициентом либо в строке, либо в столбце, либо во всей
m(m 2  3m  1 )
матрице. Для его реализации требуется
- арифметических действий.
3
1.1.2 Связь метода Гаусса с разложением матрицы на множители. Теорема об LU
разложении.
Пусть дана система Aх=B (1.1), которая при прямом ходе преобразуется в
эквивалентную систему (1.6) и которую запишем в виде
10
Cх=y,
(1.7)
где С – верхняя треугольная матрица с единицами на главной диагонали.
Как связаны в системе (1.1) элементы В и элементы y из (1.7)?
Если внимательно посмотреть на прямой ход метода Гаусса, то можно увидеть, что
b1  a11 y1
(1)
b2  a21 y1  a22
y2
.
Для произвольного j имеем
b j  d j1 y1  d j 2 y2  ...  d jj yi ,
(1.7)
где j= 1, m , dji – числовые коэффициенты:
d jj  a(jjj 1 ) .
(1.8)
Это можно записать в виде:
В=Dy,
где D-нижняя треугольная матрица с элементами
a (jjj 1)
на главной диагонали
(j= 1, m , а11  а11 ).
( 0)
В связи с тем, что в методе Гаусса угловые коэффициенты не равны нулю
a
( j 1)
jj
 0,
то на главной диагонали матрицы D стоят не нулевые элементы.
Следовательно, эта матрица имеет обратную, тогда y=D-1В, Сx= D-1В. Тогда
DCx=B.
(1.9)
В результате использования метода Гаусса, получили разложение матрицы А на
произведение двух матриц
A = DC,
где D - нижняя треугольная матрица, у которой элементы на главной диагонали не равны
нулю, а C - верхняя треугольная матрица с единичной диагональю.
Таким образом, если задана матрица A и вектор B, то в методе Гаусса сначала
производится разложение этой матрицы А на произведение D и C, а затем
последовательно решаются две системы:
Dy=B,
Cx=y.
(1.10)
Из последней системы находят искомый вектор x. При этом разложение матрицы А
на произведение СD – есть прямой ход метода Гаусса, а решение систем (1.10) обратный
ход. Обозначим нижнюю треугольную матрицу через L, верхнюю треугольную матрицу U.
11
Теорема об LU разложении
Введем обозначения: j - угловой минор порядка j матрицы А, т.е.
1  a11 ,
 2  det
a11 a12
,
a21 a22
. . . . .
  det( A ).
m
.
Теорема. Пусть все угловые миноры матрицы А не равны нулю (Δj 0 для j= 1, m ).
Тогда матрицу А можно представить единственным образом в виде произведения
А=L*U.
Идея доказательства. Рассмотрим матрицу А второго порядка и будем искать
разложение этой матрицы в виде L и U.
a  l
0   1 u12 
a
 * 
 .
A   11 12    11
a
a
l
l
0
1

 21 22   21 22  
Сопоставляя эти два равенства, определяем элементы матриц L и U (перемножим и
приравняем неизвестные). Система имеет единственное решение. Методом
математической индукции сказанное можно обобщить для матрицы размерности mm.
Следствие. Метод Гаусса (схема единственного деления) можно применять только
в том случае, когда угловые миноры матрицы А не равны нулю.
1.1.3 Метод Гаусса с выбором главного элемента
Может оказаться так, что система (1.1) имеет единственное решение, хотя какой
либо из миноров матрицы А равен нулю. Заранее неизвестно, что все угловые миноры
матрицы А не равны нулю. Избежать этого можно с выбором главного элемента.
1. Выбор главного элемента по строке, т.е. производится перенумерация
неизвестных системы.
ПРИМЕР. Пусть дана система второго порядка
a11x1  a12 x2  b1
a21x1  a22 x2  b2
при а12> а11, тогда на первом шаге вместо неизвестного х1 исключают х2:
12
a12 x2  a11x1  b1

.
a22 x2  a21x1  b2
К этой системе применяем первый шаг прямого хода метода Гаусса.
2. Выбор главного элемента по столбцу.
Предположим, что а21> а11и переставим уравнения
a21x1  a22 x2  b2

a11x1  a12 x2  b1
и применяем первый шаг прямого хода метода Гаусса. Здесь имеет место перенумерация
строк.
3. Поиск главного элемента по всей матрице заключается в совместном
применении методов 1 и 2. Всё это приводит к уменьшению вычислительной
погрешности.
1.1.4 Метод Холецкого (метод квадратных корней)
Пусть дана система
Ах=В ,
(1.11)
где матрица А - симметричная матрица. Тогда решение системы (1.11) проводится в два
этапа:
1.
Симметричная матрица А представляется как произведение двух матриц
А = L * LТ.
Рассмотрим метод квадратных корней на примере системы 4-го порядка:
 l11 0 0 0   l11 l21 l31
 
 a11 ... a14  

  l21 l22 0 0   0 l22 l32
 ... ... ...   
*  0 0 l
l
l
l
0
31
32
33
33
a

 
 41 ... a44   l


 41 l42 l43 l44   0 0 0
l41 

l42 
l34  .

l44 
Перемножаем матрицы в левой части разложения и сравниваем с элементами в левой
части:
l11  a11 , l21 
l32 
a12
a11
, l 31 
a13
a11
, l 41 
a14
a11
, l 22 
2
a22  l 21
,
a32  l21  l31
2
2
2
2
2
, l 33  a33  l 31  l 32 , l 44  a44  l 41  l 42  l 43
l22
.
13
2. Решаем последовательно две системы
Ly=B,
LTx=у.
Особенности.
1) Под квадратным корнем может получиться отрицательное число, следовательно в
программе необходимо предусмотреть использование правил действия с комплексными
числами.
2) Возможно переполнение - если угловые элементы близки к нулю.
1.2 Итерационные методы решений систем алгебраических уравнений
Итерационные методы обычно применяются для решения систем большой
размерности и они требуют приведения исходной системы к специальному виду.
Суть итерационных методов заключается в том, что решение х системы (1.1)
находится как предел последовательности lim x(n) .
n
Так как за конечное число итераций предел не может быть достигнут, то задаётся
малое число  - точность, и последовательные приближения вычисляют до тех пор, пока
не будет выполнено неравенство
x n  x n1   ,
где n=n() – функция ,
х - норма вектора.
Прямые методы рассчитаны для решения систем, если её порядок не больше 100,
иначе используются итерационные методы.
1.2.1 Метод Якоби (простых итераций)
Исходную систему
Ах=В
(1.11)
преобразуем к виду:
i 1
xi  
aij
j 1 aii
xj 
m

aij
j  i 1 aii
xj 
bi
,
aii
(1.12)
где i=1,2,...,m; aii0.
Первая сумма равна нулю, если верхний предел суммирования меньше нижнего.
Так (1.12) при i=1 имеет вид
14
m
a1 j
x1   
j  2 a11
xj 
n 1
По методу Якоби (метод простых итераций) xi
формуле
xin 1
i 1
 
aij
j 1 aii
x nj

m
b1
.
a11
(n+1 приближение хi) ищем по
aij

j  i 1 aii
x nj 
bi
.
aii
(1.13)
где n – номер итерации (0,1,…,); i= 1, m .
Итерационный процесс (1.13) начинается с начальных значений xi0 , которые в
общем случае задаются произвольно, но предпочтительнее, если за xi0 взять свободные
члены исходной системы.
Условие окончания счета:
max x n  1  x n   ,
i
i
i
где i= 1, m .
1.2.2 Метод Зейделя
Система (1.11) преобразуется к виду (1.12) и организуем итерационную процедуру,
где неизвестные хi на n+1 шаге определяются по формулам
xin 1
i 1
 
aij
j 1 aii
x nj 1

m

aij
a1 j
x nj 
j  i 1 aii
x nj 
bi
.
aii
(1.14)
Например,
xin 1
x2n 1
m
m
 
 
j  2 a11
a2 j
j  3 a22
x nj 
b1
,
a11
b2 a21 n 1

x1 ,
a22 a22
(1.15)
(1.16)
и так далее.
Итерационные процессы (1.13) и (1.14) сходятся, если норма матрицы А (А - матрица
коэффициентов при неизвестных в правой части систем (1.13) и (1.14)) удовлетворяет
условию:
А  1.
15
1.2.3 Матричная запись методов Якоби и Зейделя
Исходную матрицу системы (1.11) представим в виде суммы трёх матриц
A=A1+D+A2,
где D - диагональная матрица;
D =diаg[а11а22…аmm];
A1 - нижняя треугольная матрица;
A2 - верхняя треугольная матрица.
Пример: Дана матрица размерности (33):
0
 0

 а21 0
а
 31 а32
0   0 а12
 
0   0 0
0   0 0
А1
а13   а11 0
 
а23    0 а22
0   0
0
А2
0 

0   А.
а33 
D
Тогда исходную систему (1.11) можно записать в виде
x=-D-1A1 x – D-1A2 x+D-1 b.
Тогда метод Якоби можно записать в виде:
x n 1   D 1 A1x n  D 1 A2 x n  D 1B
или
Dх n 1  ( A1  A2 )x n  b .
(1.17)
В матричной форме метод Зейделя будет выглядеть:
x
n 1
 D
1
A1 x
n 1
D
1
n
1
A2 x  D b
или
( D  А1 )х n 1  А2 х n  b .
(1.18)
Преобразуем формулы (1.17) и (1.18):
D(х n  1  x n )  Ах n  b ,
(D  А1 )(х n  1  x n )  Ax n  b .
(1.19)
(1.20)
Из (1.19) и (1.20) видно, что если итерационный метод сходится, то он сходится к
точному решению. Иногда при решении задач большой размерности, в итерационные
методы вводятся числовые параметры, которые могут зависеть от номера итерации.
16
Пример для метода Якоби.
х n 1  x n
D
 Ax n  B ,
tn 1
где t – числовой параметр.
Возникают вопросы:
1) При каких значениях t сходимость будет наиболее быстрой?
2) При каких значениях t метод сходится?
На примере двух методов просматривается вывод о том, что одни и те же методы
можно записывать несколькими способами. Поэтому вводят каноническую (стандартную)
форму записи:
x n 1  x n
Dn 1
 Ax n  B .
t n 1
(1.21)
Формула (1.21) получена путем объединения (1.19) и (1.20).
Матрица Dn+1 здесь задает тот или иной метод. Если существует обратная матрица
к этой матрице, то из последней системы мы можем найти все неизвестные.
1. Метод (1.21) – явный, если матрица Dn совпадает с единичной матрицей и
неявный - в противном случае.
2. Метод (1.21) – стационарный, если матрица Dn+1 = D, и параметр t не зависит от
номера итерации и нестационарный - в противном случае.
1.2.4 Метод Ричардсона
Явный метод с переменным параметром t:
x n1  x n
 Ax n  B ,
t n1
(1.21а)
называется методом Ричардсона.
1.2.5 Метод верхней релаксации (обобщённый метод Зейделя)
x n 1  x n
( D  wA1 )
 Ax n  B ,
w
(1.21б)
где  - числовой параметр.
Если матрица А - симметричная и положительно определена, то последний метод
сходится при (0 <  < 2). Последнюю формулу запишем в следующем виде:
( E  wD 1 A1 )x n 1  (( 1  w )E  wD 1 A2 )x n  wD 1  B ,
(1.22)
где Е - единичная матрица.
17
Тогда для вычисления неизвестных хi (i=1, m )
процедуру в виде:
i 1
aij
j 1
aii
xin1  w
можно записать итерационную
m
aij
j i 1
aii
x nj1  (1  w) xin  w 
x nj  w
bi
.
aii
(1.23)
Например, для х1 это будет такое выражение:
m
x1n1  ( 1  w )x1n  w 
a1 j
j 2 a11
x nj  w
b1
.
a11
1.2.6 Сходимость итерационных методов
Рассмотрим систему
Ax=B,
где А - невырожденная действительная матрица.
Для решения системы рассмотрим одношаговый стационарный метод
x n 1  x n
D
 Ax n  B ,
t
(1.24)
при n=0,1,2….
Предположим, что задан начальный вектор решения. Тогда метод (1.24) сходится,
если норма вектора
x  x n  0.
n 
Теорема. Условие сходимости итерационного метода.
Пусть А - симметричная положительно определенная матрица и выполнено
условие D - 0.5tA > 0 (где t > 0). Тогда метод (1.24) сходится.
Следствие 1. Пусть А - симметричная и положительно определенная матрица с
диагональным преобладанием, то есть:
m
| a |  | a |
jj
ij ,
i 1
i j
при j=1,2,…,m. Тогда метод Якоби сходится.
Следствие 2. Пусть А - симметричная и положительно определенная матрица с
диагональным преобладанием, тогда метод верхней релаксации сходится при (0< <2).
18
Проверяется, при каком  - метод достигает заданной точности быстрее. В
частности, при =1 метод верхней релаксации превращается в метод Зейделя,
следовательно, при =1 метод Зейделя сходится.
Теорема. Итерационный метод (1.24) сходится при любом начальном векторе x0
тогда и только тогда, когда все собственные значения матрицы
S  E  tD 1 A
по модулю меньше единицы.
19
2 Плохо обусловленные системы линейных алгебраических уравнений
Дана система линейных алгебраических уравнений
Ах=В.
(2.1)
Если система плохо обусловлена, то это значит, что погрешности коэффициентов
матрицы А и правых частей B или же погрешности их округления сильно искажают
решение системы. В качестве примера рассмотрим систему
1.03x1  0.991x2  2.51

0.991x1  0.943x2  2.41.
Решение этой системы
x1  1.981
x2  0.4735.
Оценим влияние погрешности правых частей на результат. Рассмотрим
“возмущенную” систему с правой частью b* = (2.505 , 2.415) и решим эту систему:
x1*  2.877
x2*  -0.4629.
Относительная погрешность правой части  (в) = 0.005/2.51  0.28% привела к
относительной погрешности решения  (x*) =0.9364/1.981  47.3%.
Погрешность возросла примерно в 237 раз. Число обусловленности системы (2.1)
приблизительно равна 237.
Подобные системы называются плохо обусловленными.
х1
а) х1
б) х1
с)
1)
2)
3)
х2
х2
х2
Рисунок 2 - а) система имеет единственное решение;
б) система не имеет решения;
с) система плохо обусловлена.
В случае с) малейшее возмущение системы сильно меняет положение точки
пересечения прямых. Встаёт задача – какими методами можно решать эти системы.
Для оценки обусловленности системы вводят число обусловленности MА
М А  А1  А
Чем больше MА, тем система хуже обусловлена.
Свойства числа обусловленности:
1) МЕ =1;
2) MА  1;
20
.
3) MА max | / | min , где мах, min - соответственно максимальное и
минимальное собственные числа матрицы А;
4) MАВ  MА * MВ;
5) Число обусловленности матрицы А не меняется при умножении матрицы на
произвольное число 0.
Найдем выражение для полной оценки погрешности решения системы.
Пусть в системе (2.1) возмущены коэффициенты матрицы А и правая часть В, т.е.
~
~
x  x.
δ A  A  A, δB  B  B , δx  ~
Теорема. Пусть матрица А имеет обратную матрицу, и выполняется условие
 A  A1
1
~
. Тогда матрица А   A  A имеет обратную и справедлива следующая
оценка относительной погрешности:
x
x

 A B 

.

A  A
B 
1 M A
A
MA
2.1 Метод регуляризации для решения плохо обусловленных систем
Рассмотрим систему
Ах=В.
(2.1)
Для краткости перепишем эту систему в эквивалентный форме
( Ax  B , Ax  B )  0 .
(2.2)
Для примера рассмотрим систему
2 x1  x1  1

.
 x1  2 x2  2
Тогда ее можно представить как
(2х1-х2-1)2+(х1-2х2-2)2=0.
(2.2*)
Решение системы (2.2) совпадает с решением системы (2.2*).
Если коэффициенты A или B известны неточно, то решение также является не
точным, поэтому вместо равенства ( Ax  B , Ax  B )  0 можем потребовать
приближенного выполнения равенства ( Ax  B , Ax  B )  0 и в этом виде задача
становится не определенной и нужно добавить дополнительные условия.
В качестве дополнительного условия вводят требование, чтобы решение как
можно меньше отклонялось от заданного х0 т.е. (х-х0, х-х0) было минимальным.
Следовательно, приходим к регуляризованной задаче вида
(Ах-B, Ax-B)+(x-x0, x-x0)=min,
(2.3)
где >0.
Используя свойства скалярного произведения, выражение (2.3) перепишем в виде
21
(x,ATAx)-2(x,ATB)+(B,B)+[(x,x)-2(x,x0)+(x0,x0)]=min.
(2.4)
Варьируя x в уравнении (2.4), получим уравнение вида
(ATА+E)x=ATB+x0.
(2.5)
Система (2.5) – система линейных алгебраических уравнений, эквивалентная
системе (2.1). Систему (2.5) решаем с помощью метода Гаусса или с помощью метода
квадратных корней. Решая систему (2.5) найдем решение, которое зависит от числа .
Выбор управляющего параметра . Если =0, то система (2.5) перейдет в плохо
обусловленную систему (2.1).
Если же –велико, то система (2.5) переходит в хорошо обусловленную систему и
решение этой системы может сильно отличаться от решения системы (2.1).
Оптимальное значение  – это такое число, при котором система (2.5)
удовлетворительно обусловлена.
На практике пользуются невязкой вида r  Ax  B , и эту невязку сравнивают по
норме с известной погрешностью правых частей B и с влиянием погрешности
коэффициентов матрицы  А .
Если – слишком велико, то || r ||||  B || или ||  А ||. Если – мало, то
|| r ||||  B || или ||  А ||.
Поэтому проводят серию расчетов, при различных  и в качестве оптимального
значения выбирают то значение , когда выполнено следующее условие
r   B   A .
Для выбора вектора х0 нужно знать приближенное решение или же, если
приближенное решение трудно определить, то х0 =0.
2.2 Метод вращения (Гивенса)
Метод Гивенса как и метод Гаусса состоит из прямого и обратного ходов.
Прямой ход метода. Исключаем неизвестное х1 из всех уравнений, кроме первого.
Для исключения х1 из 2-го уравнения вычисляют числа
 12
a11
2
2
a11
 a 21
,
 12
a 21
2
2
a11
 a 21
,
где  и  такие, что  12   12  1 ,   12 11   12 21  0 .
Первое уравнение системы заменяем линейной комбинацией первого и второго
уравнений с коэффициентами  12 и  12 ,а второе уравнение такой же комбинацией с  12
2
2
и -  12 . В результате получим систему
22
a ( 1 ) x  a ( 1 ) x  ...  a ( 1 ) x  b ( 1 )
12
2
1m m
1
 11 1
(1)
(1)

a 22 x 2  ...  a 2 m x m  b2( 1 )

 a31 x1  a32 x 2  ...  a3m x m  bm .


. . . . . . . . .

 a m1 x1  a m 2 x 2  ...  a m m x m  bm
(2.6)
Здесь
a1( 1j )   12 a1 j   12 a 2 j , a 2( 1j )   12 a 2 j   12 a1 j , b1( 1 )   12b1   12b2 ,
b2( 1 )   12b2   12b1 ,
где j=1, m .
Преобразование системы (2.1) к системе (2.6) эквивалентно умножению матрицы A
и вектора B слева на матрицу С12 вида
C12
  12

   12

...

 0

 12
 12
...
0
0 ... 0 

0 ... 0 
.
... ... ...

... 0 1 
Аналогично для исключения x1 из третьего уравнения вычисляем числа
 13 
такие, что 13  13  1,
2
2
a11(1)
(a11(1) ) 2  (a31 ) 2
и  13 
a31
(a11(1) ) 2  (a31 ) 2
,
(1)
13a31  13a11
 0.
Затем первое уравнение системы (2.6) заменяем линейной комбинацией первого и
третьего уравнений с коэффициентами  13 ,  13 , а третье уравнение системы (2.6) тоже
заменяем линейной комбинацией с
умножению слева на матрицу
  13

 0
C13     13

 ...
 0

0
1
0
...
0
 13 ,–  13 . Это преобразование эквивалентно
 13
0
 13
...
...
0
0
0
...
0
...
...
...
...
...
0
0
0
...
1



.




Исключая неизвестное х1 из всех последующих уравнений получим систему
А(1) х=В,
где матрица A(1)=C1m…C13C12A, , а вектор правых частей B ( 1 )  C1m ...C13C12 B .
23
Здесь и далее через Сkj обозначена матрица элементарного преобразования,
отличающаяся от единичной матрицы Е только четырьмя элементами. Действие матрицы
Сkj на вектор x эквивалентно повороту вектора x вокруг оси перпендикулярной плоскости
OX k X i на угол  kj такой, что
 ki  cos ki ,  ki  sin  ki .
Операцию умножения на матрицу Сkj называют плоским вращением или
преобразованием Гивенса.
Первый этап состоит из m-1 шагов, в результате чего получается система
( m 1 )
( m 1 )
a11
x1  a12
x2 ...  a1(mm1 ) x m  b1( m1 )

(1)
a 22
x2  ...  a 2( 1m) x m  b2( 1 )



. . . . . . . . . . .

(1)

a m( 12) x 2  ...  a mm
xm  bm( 1 ) .
(2.7)
В матричной форме А(1) х=В(1).
На втором этапе, состоящем из m-2 шагов, из уравнений системы (2.7) с номерами
3,4,…,m исключают неизвестное х2. B результате получим систему
B( 2 )
a ( m1 ) x  a ( m1 ) x  a ( m1 ) x ...  a ( m1 ) x  b ( m1 )
1
2
3
m
12
13
1m
1
 11
( m 1 )
( m 1 )

a 22
x2  a 23
x3 ...  a 2( mm1 ) xm  b2( m1 )

(2)
a33
x3  ...  a3( m2 ) xm  bm( 2 )



. . . . . . . . . . . . . .

(2)

a m( 23) x3  ...  a mm
xm  bm( 2 ) .
(2)
(2)
(2)
(1)
В матричной форме получаем A x  B , где A  C2 m ...C23 A ,
 C2 m ...C23 B ( 1 ) .
После завершения (m-1)-го шага придем к системе с верхней треугольной матрицей
вида
( m1 )
где B
 Cm1,m B( m2 ) .
A ( m 1 ) x  B ( m 1 ) ,
Обратный ход метода вращения проводится точно также, как и для метода Гаусса.
24
3 Решение нелинейных уравнений
Рассмотрим систему нелинейных уравнений с m неизвестными вида
f1 ( x1 ,..., x m )  0 
f 2 ( x1 ,..., x m )  0 
.
. . . . . 

f m ( x1 ,..., x m )  0
(3.1)
Задача решения такой системы является более сложной, чем нахождение корней
одного нелинейного уравнения, и чем задача решения линейных алгебраических
уравнений. В отличие от систем линейных уравнений здесь использование прямых
методов исключено и решение находится с использованием итерационных методов, т.е.
находится приближенное решение
x* = (x1*, ... , xm*),
удовлетворяющее при заданном  > 0 условию
х  х   .
Задача (3.1) совсем может не иметь решения или же число решений может быть
произвольным. Введем векторную запись решения задачи:
x=(x1,…,xm)T,
f=(f1,…,fm)T,
f(x)=0.
(3.2)
Будем считать, что функции fi непрерывно дифференцируемы в некоторой
окрестности точки х. Введем матрицу Якоби
 f1

 x1
 f 2
f ( x )   x1

 .
 f m
 x
 1
f1
x2
f 2
x2
.
f m
x2
f1 

xm 
f 2 
...
xm  .

.
. 
f m 
...
xm 
...
Как и в случае решения одного уравнения начинаем с этапа локализации решения
(отделения корней).
Пример. Дана система 2-х уравнений с 2-мя неизвестными
х 13  х 23  8х 1 х 2

.
х 1 ln x 2  x 2 ln x 1
Найдем на плоскости место расположения решения.
Строим графики уравнений этой системы: а) - график 1-го уравнения, б) – график
2-го уравнения, с) – совмещенные графики.
25
х2
4
а)
х2
б)
е
4
х1
х2
е
х1
с)
А
В
4
С
х1
4
Рисунок 3 – Графики уравнений системы
Определяем границы координат пересечения графиков. Данная система имеет три
решения. Координаты точек (B,C,A):
B: x1=4, x2=4
C: 3.5 < x1 < 4; 1.5 < x2 < 2.5.
Точки А и С симметричны относительно прямой х1 =х2. Координаты точки С
определим приближенно: x1  3.8, x2  2.
Обусловленность и корректность решения системы (3.1). Предположим что
система (3.1) имеет решение х и в некоторой окрестности этого решения матрица Якоби
не вырождена. Это означает, что в указанной окрестности нет других решений системы.
В одномерном случае нахождение корня нелинейного уравнения приводит к
определению интервала неопределенности (х*-, х*+).
у
х
а
в
х
х*-б
х*+б
Рисунок 4 – Графическое изображение интервала неопределенности
26
В этом случае мы не можем определить, какая же точка в интервале
неопределённости является решением.
Если случай многомерный, то получаем некоторую область неопределённости D, и
можем получить оценку радиуса  этой области:

  ( f ( x )) 1  ( f )
f  x   f ( r*)  ( f ).
Эта норма играет роль числа обусловленности. Чем оно больше, тем хуже эта
система обусловлена.
3.1 Метод простых итераций
Систему (3.1) преобразуем к следующему эквивалентному виду:
x1  1( x1 ,..., xm ) 
x2   2 ( x1 ,..., xm ) 

. . . . . . .

xm   m ( x1 ,..., xm )
Или в векторной форме
x   ( x ).
Пусть задано начальное приближение х
(3.3)
(3.4)
(0)
(0)
(0) T
 (х
,...,х
) . Подставляем его
1
m
в правую часть системы (3.4) и получаем x(1)=(x(0)), продолжая подстановку, находим х(2)
и т.д. Получим последовательность точек
приближается к исходному решению х.
{ х( 0 ) , х( 1 ) ,..., х( к 1 ) } , которая
3.1.1 Условия сходимости метода.
Пусть  '(x) - матрица Якоби (якобиан), соответствующая системе (3.4) и в
некоторой -окрестности решения х функции
выполнено неравенство вида:
 i ( х ) (i=1,2,…,m) дифференцируемы и
 ( х )  q ,
где (0  q < 1), q - постоянная.
Тогда независимо от выбора х(0) из -окрестности корня итерационная
последовательность {хk} не выходит за пределы данной окрестности, метод сходится со
скоростью геометрической прогрессии и справедлива оценка погрешности
27
х
(n)
 х  qn x
(0)
x
.
3.1.2 Оценка погрешности.
В данной окрестности решения системы, производные функции i(x) (i=1,…,m)
должны быть очень малы по абсолютной величине, т.е. сами функции должны быть почти
постоянными. Тогда исходную систему (3.1) следует преобразовать к виду (3.3) с учетом
условий сходимости.
Пример. Рассмотрим предыдущий пример и приведем систему к удобному для
итераций виду
x1  3 8 x1 x2  x23 ,
x2  x2 
x2
x
 1 .
ln x2 ln x1
Проверяем условие сходимости вблизи точки С. Вычислим матрицу Якоби

8x2

2
 3( 8 x1 x 23 ) 3
 ( x1 , x 2 )  
1
1
 2 
 ln x ln x
1
1



2
3
3 
3( 8 x1 x 2  x 2 )
1
1 .
1
 2 
ln x 2 ln x 2 
8 x1  3x 22
Так как x13.8, x22, то при этих значениях вычисляем норму матрицы
 ( x )
||  ( x ) ||||  ( 3.8,2 ) || 0.815.
Запишем итерационную процедуру
( k  1) 3 ( k ) ( k )
(k ) 3
x
 8x
x
(x
) ,
1
1
2
2
(k )
(k )
x
x
( k  1)
(k )
x
x
 2
 1
.
2
2
(k )
(k )
ln x
ln x
2
1
Следовательно, метод простых итераций будет сходиться со скоростью
геометрической прогрессии, знаменатель которой q0.815. Вычисления поместим в
таблице 1.
Таблица 1 Решение системы нелинейных уравнений
К
0
1
…
x1( k )
x 2( k )
28
8
9
3.80000
3,75155
….
3,77440
x1=3,77418
2.00000
2,03895
…
2,07732
x2=2,07712
При К=9 критерий окончания счета выполняется при =10-3 и можно положить x1
=3.774  0.001
x2 =2.077  0.001.
3.2 Метод Ньютона
Суть метода состоит в том, что система нелинейных уравнений сводится к
решению систем линейных алгебраических уравнений. Пусть дана система (3.1) и задано
начальное приближение x(0), приближение к решению х строим в виде
( 0 ) (1 )
(n)
,х
,..., х
последовательности х
.
В исходной системе (3.1) каждую функцию f i ( x1 , x2 ,..., xn ), где i= 1, m ,
раскладывают в ряд Тейлора в точке х(n) и заменяют линейной частью её разложения
fi ( x )  fi ( x
f i ( x ( n ) )
) 
( x j  x (j n ) ) .
x j
j 1
m
(n)
Для каждого уравнения получаем

f1 ( x ( n ) )
f1 ( x )  
( x j  x (j n ) )  0 
x j
j 1


. . . . . . . . . . . .

m f ( x ( n ) )
(n)
(n)
m
fm( x )  
( x j  x j )  0
x j

j 1

(n)
m
(3.5)
В матричной форме
f ( x ( n ) )  f ( x ( n ) )  ( x  x ( n ) )  0
(3.6)
где f ' - матрица Якоби.
Предположим, что матрица не вырождена, то есть существует обратная матрица
 f ( x )
(n)
1
.
Тогда система (3.6) имеет единственное решение, которое и принимается за
очередное приближение x(n+1). Отсюда выражаем решение x(n+1) по итерационной
формуле:


x ( n1 )  x ( n )  f ' ( x ( n ) )
1
 f ( x( n ) ) .
(3.7)
Формула (3.7) и есть итерационная формула метода Ньютона для приближенного
решения системы нелинейных уравнений.
Замечание. В таком виде уравнение (3.7) используется редко в виду того, что на
каждой итерации нужно находить обратную матрицу. Поэтому поступают следующим
образом: вместо системы (3.6) решают систему линейных алгебраических уравнений вида
29
f(x(n))*x(n+1) =-f(x(n)).
(3.8)
Это система линейных алгебраических уравнений относительно поправки x(n+1)=
- x(n). Затем полагают
(n+1)
x
x(n+1) =x(n) +x(n+1).
(3.9)
3.2.1 Сходимость метода
Теорема. Пусть в некоторой окрестности решения х системы (3.1) функции fi
(при i= 1, m ) дважды непрерывно дифференцируемы и матрица Якоби не вырождена.
Тогда найдется такая малая  окрестность вокруг решения х, что при выборе
начального приближения x0 из этой окрестности итерационный метод (3.7) не выйдет
за пределы этой окрестности решения и справедлива оценка вида
x ( n1 )  x 
1

2
x( n )  x ,
где n - номер итерации.
Метод Ньютона сходится с квадратичной скоростью. На практике используется
следующий критерий остановки:
x ( n )  x ( n1 )   .
30
4 Решение проблемы собственных значений
Пусть дана квадратная матрица A размерностью (m*m) и существует такое число
, что выполняется равенство
А  x    x, x  0 ,
тогда такое число  называется собственным значением
соответствующим ему собственным вектором.
Перепишем это равенство в эквивалентной форме
матрицы
(A - E) * x = 0 .
А,
а
x–
(4.1)
Система (4.1) - однородная система линейных алгебраических уравнений. Для
существования нетривиального решения системы (4.1) должно выполняться условие
det(A - E) = 0 .
(4.2)
Определитель в левой части уравнения является многочленом m-ой степени
относительно , его называют - характеристическим определителем (характеристическим
многочленом). Следовательно, уравнение (4.2) имеет m корней или m собственных
значений. Среди них могут быть как действительные, так и комплексные корни.
Задача вычисления собственных значений сводится к нахождению корней
характеристического многочлена (4.2). Корни могут быть найдены одним из
итерационных методов (в частности методом Ньютона).
Если найдено некоторое собственное значение матрицы A, то подставив это число
в систему (4.1) и решив эту систему однородных уравнений, находим собственный вектор
х, соответствующий данному собственному значению.
Собственные вектора будем при нахождении нормировать (вектор х умножаем на
-1
||х|| , и таким образом они будут иметь единичную длину), нахождение собственных
значений матрицы A и соответствующих им собственных векторов и есть полное решение
проблемы собственных значений. А нахождение отдельных собственных значений и
соответствующих им векторов - называется решением частной проблемы собственных
значений.
Эта проблема имеет самостоятельное значение на практике.
Например, в электрических и механических системах собственные значения
отвечают собственным частотам колебаний, а собственные вектора характеризуют
соответствующие формы колебаний.
Эта задача легко решается для некоторых видов матриц - диагональных,
треугольных и трехдиагональных матриц.
К примеру определитель треугольной или диагональной матрицы равен
произведению диагональных элементов, тогда и собственные числа равны диагональным
элементам.
Пример 1. Матрица А – диагональная
а 0 0


А   0 а 0  . Тогда
0 0 а


31
det(А-Е)= ( а   ) , а характеристическое уравнение ( а   )  0
трехкратный корень =а.
Собственными векторами для матрицы А будут единичные векторы
3
3
имеет
1 
 0
 0
 
 
 
e1   0  ,e 2  1  ,e3   0 .
 0
 0
1 
 
 
 
Пример 2. Найдем собственные числа матрицы
9
5 
2


А  1.2  5.3999
6 .
 1
1
 7.5 

Составим характеристический многочлен
2  

Р3 (  )  det( A  E )  det 1.2
 1

9
 5.3999  
1


6

 7.5   
5
 3  10.8999 2  26.49945   21.002 .
Используя метод Ньютона, определим один из корней уравнения Р 3()=0, а именно
1  -7.87279.
Разделив многочлен P3 ( ) на (-1) получим многочлен второй степени: P2 ( ) =2
+ 3.02711 + 2.66765. Решив квадратное уравнение, находим оставшиеся два корня:2,3  1.51356  0.613841 * i (комплексное сопряженные корни).
Существуют прямые методы нахождения собственных значений и итерационные
методы. Прямые методы неудобны для нахождения собственных значений для матриц
высокого порядка. В таких случаях с учетом возможностей компьютера более удобны
итерационные методы.
4.1 Прямые методы
4.1.1 Метод Леверрье
Метод разделяется на две стадии:
- раскрытие характеристического уравнения,
- нахождение корней многочлена.
Пусть
det(A-E)
характеристический многочлен матрицы А={aij}
m
m 1
   pm , и 1,2,…,m - есть
(i,j=1,2,…,m), т.е. det A  E    p1
полная совокупность корней этого многочлена (полный спектр собственных значений).

-
есть
Рассмотрим суммы вида
32

S k  1k  2k    km (k=1,2,…,m), т.е.
S1  1  2  ...  m  S p A
S 2  12  22    2m  S p A2
.
.
.
.
.
.
.
.
(4.3)
,
.
S m  1m  m2    mm  S p Am
где
SpA
m
 aii - след матрицы.
i 1
В этом случае при km справедливы формулы Ньютона для всех (1k m)
S k  p1S k 1    pk 1S 1  kpk ,
(4.4)
Откуда получаем
при k=1 р1 = -S1,
при k=2 р2 = -1/2 * (S2 + р1*S1),
. . . . . . . . . . . . . .
при k=m рm = -1/n * (Sm + р1*Sm-1 + р2*Sm-2 + ... + рm-1*S1).
(4.5)
Следовательно, коэффициенты характеристического многочлена рi можно
определить, если известны суммы S1,S2,...,Sm. Тогда схема алгоритма раскрытия
характеристического определителя методом Леверрье будет следующей:
1) вычисляем степень матрицы: Ак=Ак-1*А для k=1,…,m;
2) определяют Sk - суммы элементов стоящих на главной диагонали матриц Ак;
3) по формулам (4.5) находят коэффициенты характеристического уравнения
рi(i=1,2,…,m).
4.1.2 Усовершенствованный метод Фадеева
Алгоритм метода:
1) вычисляют элементы матриц A1,A2,..,Am:
A1  A;
SpA1  q1 ; B1  A1  q1  E ;
A2  A  B1 ;
SpA2
 q 2 ; B2  A2  q 2  E ;
2
.
.
.
.
.
Am  A  Bm1 ;
.
.
.
.
.
.
.
SpAm
 q m ; Bm  Am  q m * E ,
m
(в конце подсчета Bm нулевая матрица для контроля);
2) определяют коэффициенты характеристического уравнения рi
q1 = -р1, q2 = -р2,..., qm = -рm.
33
Существуют и другие методы раскрытия характеристического определителя: метод
Крылова, Данилевского и др.
4.1.3 Метод Данилевского
Две матрицы A и B называются подобными, если одна получается из другой путем
преобразования с помощью некоторой не вырожденной матрицы S:
B=S-1*AS,
если это равенство справедливо, то матрицы A и B подобны, а само преобразование
называется преобразованием подобия (переход к новому базису в пространстве m мерных векторов).
Пусть y - результат применения матрицы A к вектору х
y=A*х.
Сделаем замену переменных:
x=S*x' , y=S*y'.
Тогда равенство y=A*х преобразуется к виду
y'=S-1*A*S*x'.
В этом случае матрица B и матрица A имеют одни и те же собственные числа. Это
можно легко увидеть раскрыв определитель
det( S 1 AS  E )  det( S 1 ( A  E ) S )  det( S 1 )  det( A  E )  det( S )  det( A  E ) .
Следовательно, матрицы A и B - подобные, имеют одни и те же собственные
значения. Но собственные векторы х и х’ – не совпадают, они связаны между собой
простым соотношением
х = S*х'.
Такую матрицу A с помощью преобразования подобия или же последовательности
таких преобразований можно привести к матрице Фробениуса вида:
 f11

 1
F  0


 0

f12
0
1
...
0





f1m1
0
0
...
1
f1m 

0 
0 .


0 
Детерминант матрицы F det (F) можно разложить по элементам первой строки:
det( F  E )  ( 1 )m ( m  p1m 1    pm ) .
34
Тогда коэффициенты характеристического многочлена матрицы А будут р1 = f11 ,
p2 = f12,…, pn = f1m.
Второй случай. Матрицу А преобразованием подобия можно привести к матрице В
верхнего треугольного вида
 b11 b12  b1m 


0
b

b

22
2m 
B
.
.
.
. .


 0
0  bm m 

Тогда собственными числами будут диагональные элементы матрицы B:
det( B  E )  ( b11   )( b22   )( bmm   ) .
Третий случай. Матрицу A с помощью преобразования подобия можно привести к
Жордановой форме
S 1 AS  
 1 S1

 0 2

 ...

0 0




,

0   m 
0 0 
S2 0 
 ... 
0
0
0
...
где i - собственные числа матрицы A; Si - константы (0 или 1); если Si=1, то i=i+1.
К четвёртому случаю относятся матрицы, которые с помощью преобразования
подобия можно привести к диагональному виду (матрица простой структуры):
 1 0

 0 2
S 1 AS  D  
 ...

0 0

0

0
...  ,

 n 



у которой, как известно, собственными числами являются диагональные элементы.
4.1.4 Метод итераций определения первого собственного числа матрицы.
Пусть дано характеристическое уравнение:
det(A-*E) = 0,
где 1, 2,..., n - собственные значения матрицы А.
Предположим, что |1|>|2||3|…|m|, т.е. 1 – наибольшее по модулю
собственное число.
Тогда для нахождения приближенного значения λ1 используется следующая схема:
35
1) выбирают произвольно начальный вектор у(0);
2) строят последовательность итераций вида:
y ( 1 )  Ay ( 0 ) ,
y ( 2 )  А  Аy ( 0 )  A2 y ( 0 ) ,
.
.
.
.
.
.
.
y ( m )  А  Аm1 y  Am y ,
y ( m1 )  A  Am y  Am1 y .
(m)
 A m y и y ( m1 )  A m1 y , тогда
3) выбирают y
1  lim
yi( m 1 )
yim
n 
или
1 
yi( m 1 )
yi( m )
,
где yi – соответствующие координаты векторов y(m+1) и y(m).
Возникает вопрос выбора начального вектора у(0). При неудачном выборе можем не
получить значения нужного корня, или же предела может не существовать. Этот факт при
вычислении можно заметить по прыгающим значениям этого отношения, следовательно,
нужно изменить у(0). В качестве первого собственного вектора можно взять вектор у(n+1) и
пронормировать его.
Пример. Найти наибольшее по модулю собственное значение и соответствующий
ему собственный вектор матрицы А
 3 1 0


A  1 2 2
0 1 1


1) Выбираем начальный вектор y
(0)
1
 
 1 .
1
 
2) Вычисляем последовательно векторы y(1), y(2), …, y(10). Вычисления помещаем в
таблицу 2.
Таблица 2 – Вычисление векторов y(n+1)
y(0)
А*y(0)
А2*y(0)
А3*y(0)
……..
36
А9*y(0)
А10* y(0)
1
4
17
69
243569
941370
1
5
18
67
210663
812585
1
2
7
25
73845
284508
( 10 )
(9)
и y
3) Вычисляем отношения координат векторов y i
i
y3( 10 )
y1( 10 )
y 2( 10 )
(1)
(2)
(3)
1 
 3.865; 1 
 3.857; 1 
 3.853.
(9)
(9)
(9)
y1
y2
y3
4) Вычисляем λ1 как среднее арифметическое 1( 1 ) , 1( 2 ) , 1( 3 )
1 
1(1)  1( 2)  1(3)
3
 3,858 .
5) Определим соответствующий числу λ1 собственный вектор:
y ( 10 )  A( 10 )  y ( 0 )
 941370 


  812585 .
 284508 


Нормируем y(10), разделив на длину вектора
y ( 10 )
получим вектор x( 1 )
3
 941370 2  8125852  2845082  1.28* 106
 0.74 


  0.64 .
 0.22 


Далее можем определить второе собственное число
y i( n 1)  1 y i( n )
2  ( n 1)
yi
 1 y i( n 1)
,
где i=1,2,…,n.
При вычислении собственных чисел подобным образом, будет накапливается
ошибка. Данная методика позволяет приближенно оценить собственные значения
матрицы.
37
5 Задача приближения функции
Постановка задачи. Пусть на отрезке [a,b] задана функция у= f(x) своими n+1
значениями y 0  f ( x 0 ),..., y n  f ( x n ) , в точках x0 , x1 ..., xn .
Допустим, что вид функции f(x) неизвестен. На практике часто встречается задача
вычисления значений функции у= f(x) в точках х, отличных от x0 ,..., xn . Кроме того, в
некоторых случаях, не смотря на то, что аналитическое выражение у=f(x) известно, оно
может быть слишком громоздким и неудобным для математических преобразований
(например, специальные функции). Кроме этого значения yi могут содержать ошибки
эксперимента.
Определение. Точки x0 ,..., xn называются узлами интерполяции.
Требуется найти аналитическое выражение функции F(x), совпадающей в узлах
интерполяции со значениями данной функции, т.е.
F ( x0 )  y0 , F ( x1 )  y1 ,..., F ( xn )  y n .
Определение. Процесс вычисления значений функции F(x) в точках отличных от


узлов интерполирования называется интерполированием функции f(x). Если х  х0 , xn ,
то задача вычисления приближенного значения функции в т. х называется
интерполированием, иначе - экстраполированием.
Геометрически задача интерполирования функции одной переменной означает
построение
кривой,
проходящей
через
заданные
точки
( x0 , y 0 ),( x1 , y1 ),...,( x n , y n ) (рисунок 5). То есть задача в такой постановке может иметь
бесконечное число решений.
у
x0
x1
x2
x3
х
Рисунок 5 - Геометрическая иллюстрация задачи интерполирования функции
Задача становится однозначной, если в качестве F(x) выбрать многочлен степени не
выше n, такой что:
F n (x 0 )=y 0 , F n (x
1
)=y 1 ,..., F n (x n )=y n .
Определение. Многочлен F n (x), отвечающий вышеназванным условиям,
называется интерполяционным многочленом.
Определение. Когда многочлен F(x) выбирается в классе степенных функций, то
интерполяция называется параболической.
Знание свойств функции f позволяет осознанно выбирать класс G
аппроксимирующих функций. Широко используется класс функций вида
38
Фm ( x )  c0 0 ( x )  c11 ( x )  ...  cm m ( x ),
(5.1)
являющихся линейными комбинациями некоторых базисных функций  0 (x),...,  m(x).
Будем искать
приближающую
функцию в виде многочлена степени
m, с
коэффициентами с 0 ,...,с m , которые находятся в зависимости от вида приближения.
Функцию Фm(х) называют обобщенным многочленом по системе функций
0(х),1(х),…,m(х), а число m – его степенью. Назовем обобщенный многочлен Фm(х)
интерполяционным, если он удовлетворяет условию
Фm(хi)=yi, (i=0,1,…,n).
Покажем, что условие (5.2)
единственным образом
позволяет найти
(5.2)
приближающую функцию
c0 0 ( x0 )  c11 ( x0 )  ...  cm m ( x0 )  y 0
c  ( x )  c  ( x )  ...  c  ( x )  y
1 1
1
m m
1
1
 0 0 1

. . . . . . . . . . .
c  ( x )  c  ( x )  ...  c  ( x )  y
1 1
n
m m
n
n,
 0 0 n
(5.3)
Система (5.3) есть система линейных алгебраических уравнений относительно
коэффициентов с0,с1,…,сm.
Эта система n линейных уравнений имеет единственное решение, если
выполняется условие m=n и определитель квадратной матрицы Р
det P 
 0 ( x0 ),1 ( x0 ),..., m ( x0 )
 0 ( x1 ),1 ( x1 ),..., m ( x1 )
 0.
. . . . . . . .
 0 ( xn ),1 ( xn ),..., m ( xn )
Определение. Система функций  0 (x),...,  m(x), линейно независимая в точках
х0,х1,…,хn, которые попарно различны и выписанный выше определитель не равен нулю,
называется Чебышевской системой функций. Если мы имеем такую систему, то можно
утверждать, что существует единственный для данной системы функций
интерполяционный многочлен
Фm(х), коэффициенты которого определяются
единственным образом из системы (5.3).
Пример. При mn система функций 1,х,х2,…,хm линейно независима в точках
х0,х1,…,хn, если они попарно различны.
5.1 Интерполяционный многочлен Лагранжа
39
Рассмотрим случай, когда узлы интерполирования не равноотстоят друг от друга на
отрезке [a,b]. Тогда шаг h = xi+1- x i  const. Задача имеет единственное решение, если в
качестве интерполирующей функции F(x) взять алгебраический многочлен
Ln(x )=a0+a1 x+a2 x2+…+anxn,
где а i неизвестные постоянные коэффициенты.
Используя условие (5.2) можем записать
L( x0 )  y 0 , L( x1 )  y1 ,..., L( x n )  y n .
(5.4)
Запишем это в виде:
a 0

a 0

.

a 0
 a1 x0  a12 x22  ...  a1n xnn  y 0
 a1 x0  a12 x22  ...  a1n xnn  y1
(5.5)
.
.
.
.
.
.
.
.
.
 a1 x0  a12 x22  ...  a1n xnn  y n .
Эта система однозначно разрешима, так как система функций 1,х,х2,…,хn линейно
независима в точках х0,х1,…,хn. Однозначная разрешимость следует из того факта, что
определитель этой системы (определитель Вандермонда)
1
x0
x 02
... x 0n
1
x1
x12
... x1n
... ...
... ...
1
x n2
xn
...

 ( xi
0  j ,i  n
 x j )  0.
... x nn
Без вывода приведем одну из форм записи интерполяционного многочлена
Лагранжа
Ln ( x )  y 0 
( x  x1 )...( x  xn )
( x  x0 )( x  x2 )...( x  xn )
 y1 
 ...
( x0  x1 )...( x0  xn )
( x1  x0 )( x1  x2 )...( x1  xn )
( x  x0 )...( x  xn1 )
...  y n 
.
( xn  x0 )...( xn  xn1 )
(5.6)
Определение. Этот многочлен называется интерполяционным многочленом
Лагранжа и сокращенно записывается в виде
n
L n (x) =
40
y
io
i
( x  x0 )( x  x1 )...( x  xi 1 )( x  xi 1 )...( x  xn )
.
( xi  x0 )( xi  x1 )...( xi  xi 1 )( xi  xi 1 )...( xi  xn )
(5.7)
5.1.1 Оценка погрешности интерполяционного многочлена
Оценить погрешность интерполяционной формулы Лагранжа можно только тогда,
когда известно аналитическое выражение интерполируемой функции, а точнее, если
известно максимальное значение (n+1)-ой производной функции f(x) на отрезке [a,b].
Пусть
|R n (x)| =| f(x) - L n (x)|,
где R n (x) –погрешность;
f(x)- точное значение функции в точке х;
L n (x)- приближенное значение, полученное по полиному Лагранжа.
Если обозначить через M n1 = max
[ a ,b ]
f
( n 1)
( x) , где x [a,b], причем х0=а, х n = b,
то
max
Rn ( x ) 
[ a ,b ]
Mn 1
( x  x0 )( x  x1 )....( x  xn )
(n  1)!
.
Рассмотрим теперь случай с равноотстоящими узлами. Тогда интерполяционная
формула Лагранжа заметно упрощается. В этом случае шаг h=xi+1-xi=const. Введем в
рассмотрение многочлен вида
( x  x0 )( x  x1 )...( x  xi1 )...( x  xn )
.
Qi(x)=
( xi  x0 )( xi  x1 )...( xi  xi1 )...( xi  xn )
Введем обозначение q=
x  x0
, отсюда следует, что
h
x  x0 = q  h ,
x  x1 = 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 примет вид
Qi(x)=
q( q  1 )  [ q  ( i  1 )]  [ q  ( i  1 )]...( q  n )  h n
yi
.
i  h( i  1 )  h...h( h )...[ ( n  i )  h ]
Произведя простейшие преобразования, получим выражение вида:
41
i
q  ( q  1 )...( q  n )  ( 1 ) n i
q( q  1 )...( q  n )
n i C n
(

1
)


Q i (q)=
=
,
qi
n!
( q  i )  i!( n  i )!
n!
.
i! ( n  i )!
Тогда интерполяционный многочлен Лагранжа для равноотстоящих узлов имеет
где C ni 
вид:
L
n
i
q( q  1 )...( q  n ) n
n i C n
  ( 1 ) 
 yi .
(x)=
n!
q

i
i 0
На практике часто пользуются линейной и квадратичной интерполяцией. В этом
случае формула Лагранжа имеет вид
L1(x)=
y0
( x  x0 )
( x  x0 )
 y1
( x0  x1 )
( x1  x0 )
L2(x)=
y0
( x  x0 )( x  x2 )
( x  x0 )( x  x1 )
( x  x1 )( x  x2 )
 y1
 y2
( x0  x1 )( x0  x2 )
( x1  x0 )( x1  x2 )
( x2  x0 )( x2  x1 )
- при линейной интерполяции;
при квадратичной интерполяции.
5.2 Интерполяционные полиномы Ньютона
5.2.1 Интерполяционный многочлен Ньютона для равноотстоящих узлов
Вычисление значений функции для значений аргумента, лежащих в начале
таблицы удобно проводить, пользуясь первой интерполяционной формулой Ньютона. Для
этого введем понятие конечной разности.
Определение. Конечной разностью перового порядка называется разность между
значениями функции в соседних узлах интерполяции. Тогда конечные разности в точках
х0,х1,…,хn-1
y 0  y1  y 0  f ( x1 )  f ( x0 )  f ( x0 ) ,
y1  y 2  y1  f ( x 2 )  f ( x1 )  f ( x1 ) ,
.
.
.
.
.
.
.
y n 1  y n  y n 1  f ( x n )  f ( x n 1 )  f ( x n 1 ) .
Конечная разность второго
42
порядка имеет вид:
2 yi  yi 1  yi ,
.
.
.
.
.
.
n yi  ( n1 yi ).
Рассмотрим некоторые свойства конечных разностей. Вторая конечная разность в
точке хi
2 yi   f ( xi1  x )  f ( xi  x )   f ( xi1 )  f ( xi ) 
 f ( xi2 )  2  f ( xi1 )  f ( xi )  yi2  2  yi1  yi
.
Аналогично третья конечная разность
3 yi  yi3  3  yi2  3  yi1  yi .
Общее выражение для конечной разности n-го порядка имеет вид
n yi  yn  i  C1n yn  i 1  Cn2 yn  i  2  ...  ( 1 )m Cnm yn  i  m  ...( 1 )n yi ,
а вообще, конечная разность порядка m от конечной разности порядка n
m (n y )  m n y .
Конечные разности n-го порядка от многочлена степени n - есть величина
постоянная, а конечные разности n+1-го порядка равны нулю.
Для вычисления значений функции в начале таблицы требуется построить
интерполяционный многочлен степени n такой, что выполнены условия интерполяции
Pn ( x0 )  y0 ,..., Pn ( xn )  yn .
В силу единственности многочлена степени n, построенного по n+1 значениям
функции f(x) многочлен Pn ( x ) , в конечном счете, совпадает с многочленом Лагранжа.
Найдем этот многочлен в виде:
Pn ( x )  a0  a1  ( x  x0 )  a2 ( x  x0 )( x  x1 )  ...  an ( x  x0 )...( x  xn1 ) ,
где аi(i=0,1,…, n) – неизвестные коэффициенты. Для нахождения а0 положим x  x0 .
Тогда P ( x0 )  a0 , отсюда а0=у0.
Для вычисления a1 рассмотрим первую конечную разность для многочлена Pn(x) в
точке х.
43
Pn ( x )  Pn ( x  h )  Pn ( x )  a0  a1 ( x  x0  h )  ...  an ( x  x0  h )  ...( x  xn1  h ) 
 a0  a1 ( x  x0 )  ...  an ( x  x0 )...( x  xn1 ).
В результате преобразований получим
Pn ( x )  h  a1  2ha2 ( x  x0 )  ...  n  han ( x  x0 )...( x  xn1 ).
Вычислим первую конечную разность многочлена Pn(x) в точке х0
y 0
.
h
Чтобы определить коэффициент а2, составим конечную разность второго порядка
Pn ( x0 )  a1  h , но Pn ( x0 )  f ( x1 )  f ( x0 )  y1  y0  y0 , откуда a1 
2 Pn ( x )  Pn ( x  h )  Pn ( x ).
a2 
2 y0
2!h 2
Отсюда
после
преобразования
получим
. Вычисляя конечные разности более высоких порядков и полагая х=х 0,
i y0
придем к общей формуле для определения коэффициентов: ai 
(i=0,1,2,…,n).
i!h i
Подставим значения a i в
интерполяционную формулу Ньютона:
многочлен,
в
результате
получим
первую
y0
n y0
pn ( x )  y0 
 ( x  x0 )  ... 
 ( x  x0 )...( x  xn 1 ).
n
1!h
n!h
Первую интерполяционную формулу можно записать в том виде, в котором ее
удобнее использовать для интерполирования в начале таблицы. Для этого введем
переменную q=(x-x0)/h, где h-шаг интерполирования, а q-число шагов. Тогда первая
формула примет вид
Pn ( x )  y 0  q  y 0 
q( q  1 ) 2
q( q  1 )...( q  n  1 ) n
  y 0  ... 
  y0 .
2!
n!
5.2.2 Вторая интерполяционная формула Ньютона
Эта формула используется для интерполирования в конце таблицы. Построим
интерполяционный многочлен вида
Pn ( x )  a0  a1 ( x  xn )  a2 ( x  xn )( x  xn1 )  ...  an ( x  xn )...( x  x1 ).
Неизвестные коэффициенты а0,а1,…,аn подберем так, чтобы были выполнены
равенства
Pn ( x0 )  y0 , Pn ( x1 )  y1 ,..., Pn ( xn )  yn .
достаточно, чтобы
i Pn (xn  i )  i yn  i (i=0,1,…,n).
В случае, если положить
44
Для этого необходимо и
x  xn , то сразу определяется
коэффициент а0
Pn ( x )  yn  a0 .
Из выражения для первой конечной разности найдем a1 :
Pn ( x )  1  ha1  2  ha2 ( x  xn1 )  ...  n  han ( x  x n1 )( x  xn2 )...( x  x1 ).
Отсюда, полагая х=хn-1 получим a1 
разности найдем а2: a 2 
ai 
i y ni
i
2 y n2
2! h 2
y n1
. Из выражения для второй конечной
h
. Общая формула для коэффициента аi имеет вид
.
i! h
Подставим эти коэффициенты в
интерполяционную формулу Ньютона:
формулу многочлена и получим вторую
yn1
n y0
Pn ( x )  yn 
( x  xn )  ... 
( x  xn )...( x  x1 ).
h
n! h n
На практике используют формулу Ньютона в другом виде. Положим q=(x-xn)/h.
Тогда
Pn ( x )  y n  qy n 1 
q( q  1 ) 2
q( q  1 )...( q  n  1 ) n
 y n  2  ... 
 y0 .
2!
n!
5.3 Интерполирование сплайнами
Многочлен Лагранжа или Ньютона на всем отрезке  a , b с использованием
большого числа узлов интерполирования часто приводит к плохому приближению, что
объясняется накоплением погрешностей в ходе вычислений. Кроме того, из-за
расходимости процесса интерполирования увеличение числа узлов не обязано приводить
к повышению точности вычислений. В силу вышесказанного на практике весь отрезок
a ,b разбивается на частичные интервалы и на каждом из них приближающая функция
f (x ) заменяется многочленом невысокой степени. Такая интерполяция называется
кусочно-полиномиальной интерполяцией.
Определение. Сплайн - функцией называют кусочно-полиномиальную функцию,
определенную на отрезке  a , b и имеющую на этом отрезке некоторое число
непрерывных производных.
Слово сплайн означает гибкую линейку, которую используют для проведения
гладких кривых через определенное число точек на плоскости. Преимущество сплайнов сходимость и устойчивость процесса вычисления. Рассмотрим частный случай (часто
используемый на практике), когда сплайн определяется многочленом третьей степени.
45
5.3.1 Построение кубического сплайна
Пусть на отрезке  a , b в узлах сетки заданы значения некоторой функции f ( x ) ,
т.е.
a  x0  x1  x2 ...  xn  b , yi  f ( xi ) (i= 0,1,…, n).
Сплайном, соответствующим этим узлам функции f ( x ) называется функция S(х),
которая:
1) на каждом частичном отрезке является многочленом третьей степени;
2) функция S ( x ) и ее первые две производные S ( x ), S ( x ) непрерывны на a , b ;
3) S ( xi )  f ( xi ) .
На каждом частичном отрезке
x
i 1
, xi
 будем искать сплайн
S ( x )  Si ( x ) , где
Si ( x ) многочлен третьей степени
Si ( x)  ai  bi ( x  xi ) 
То есть для
x  xi 1 , xi 
ci
di
 ( x  xi ) 2   ( x  xi ) 3 .
2
6
нужно построить
(5.8)
такую функцию S i ( x ) , где
подлежат определению. Для всего отрезка интерполирования  a , b , таким
образом, необходимо определить 4n неизвестных коэффициента.
ai , bi , ci , di
S ( x )  bi  ci ( x  xi ) 
S ( x )  ci  d i ( x  xi ),
di
 ( x  xi ) 2 ,
2
S i ( x )  ai  y i .
Доопределим a0  f ( x0 )  y0 . Требование непрерывности функции S(x) приводит к
условиям Si ( xi )  Si 1 ( xi ), (i=0, 1,…,n-1).
Отсюда из (5.8) получаем следующие уравнения:
ci 1
d
( xi  xi 1 ) 2  i 1 ( xi  xi 1 )3 (i= 1,2,…,n-1).
2
6
Введем шаг интерполирования hi  xi  xi 1 . Тогда последнее равенство можно
ai  ai 1  bi 1 ( xi  xi 1 ) 
hi2
hi3
переписать в виде hi  bi 
 ci   di  fi  fi 1 (i= 1,2,…,n). Из непрерывности
2
6
h2
первой производной следует hi  ci  i  d i  bi  bi 1 (i= 2,3,…,n), а из непрерывности
2
второй производной
h d  c c
i i
i
i  1 (i= 2,3,…,n).
Объединив все три вида уравнений, получим систему из 3n-2 уравнений
относительно 3n неизвестных bi , ci , di . Два недостающих уравнения получим, задав
граничные условия для функции S(x). Для этого воспользуемся граничными условиями
для сплайн-функции в виде S ( a )  S ( b )  0 (концы гибкой линейки свободны).
Тогда получим систему уравнений
46

hi  d i  ci  ci 1 , c0  cn  0 ,( i  1,2 ,..., n )

hi2

h

c

 d i  bi  bi 1 ,( i  2 ,3,..., n )
 i i
2


hi2
hi3
 ci 
 d i  f i  f i 1 ,( i  1,2 ,..., n ).
hi  bi 
2
6

(5.9)
Решая систему методом подстановки (исключаем из (5.9) неизвестные bi,di),
получим систему:
yi 1  yi y i  yi 1

h
c

2
(
h

h
)

c

h
c

6

(

)
 i i 1
i
i 1
i
i 1 i 1
hi 1
hi

c  c  0
n
 0
(5.10)
(i= 1,2,…,n-1).
Система (5.10) имеет трехдиагональную матрицу. Эта система может быть решена
методом прогонки или Гаусса. После ее решения коэффициенты сплайна
определим через коэффициенты сi с помощью явных формул
di 
di , bi
ci  ci 1
,
hi
hi
hi2
y  yi 1
bi   ci 
 di  i
(i= 1,2,…,n).
2
6
hi
5.3.2 Сходимость процесса интерполирования кубическими сплайнами
Доказывается, что при неограниченном увеличении числа узлов на одном и том же
S (x )  f (x ) .
a ,b
отрезке
Оценка
погрешности
интерполяции R( x )  f ( x )  S ( x ) зависит от выбора сетки и степени гладкости
функции f(x).
При равномерной сетке xi  a  i  h (i=0,1,…,n)
M 4  h4
f ( x )  Sh ( x ) 
,
 
8
где M 4  max | f
[ a ,b ]
IV
( x ) |.
Другие постановки задачи интерполирования функций.
1. Если функция периодическая, то используется тригонометрическая
47
интерполяция с периодом l, которая строится с помощью тригонометрического
многочлена
Tn ( x )  a0 
n
kx
K 1
l
 ak cos
 bk sin
kx
l
, коэффициенты которого
находятся из системы Tn ( xi )  f ( xi ) (i= 1,2,…,2n+1).
2. Выделяют приближение функций рациональными, дробно – рациональными и
другими функциями. В данной книге эти вопросы не рассматриваются.
5.4 Аппроксимация функций методом наименьших квадратов
К такой задаче приходят при статистической обработке экспериментальных
данных с помощью регрессионного анализа. Пусть в результате исследования некоторой
величины x значениям x1 , x 2 , x3 ,...,x n поставлены в соответствие значения
y1 , y 2 , y 3 ,..., y n некоторой величины у.
Требуется подобрать вид аппроксимирующей зависимости y=f(x), связывающей
переменные х и у. Здесь могут иметь место следующие случаи. Во-первых: значения
функции f(x) могут быть заданы в достаточно большом количестве узлов; во-вторых:
значения таблично заданной функции отягощены погрешностями. Тогда проводить
приближения функции с помощью многочлена нецелесообразно, т.к.
- это неудобно делать, поскольку число узлов велико и пришлось бы строить несколько
интерполяционных многочленов;
- построив интерполяционные многочлены, мы повторили бы те же самые ошибки,
которые присущи таблице.
Будем искать приближающую функцию из следующих соображений:
1) приближающая функция не проходит через узлы таблицы и не повторяет ошибки
табличной функции;
2) чтобы сумма квадратов отклонений приближающей функции от таблично заданной
была минимальной.
у
отклонения
х0
х1
хn-1 хn
х
Рисунок 6 – Графическое изображение отклонений
Рассмотрим линейную задачу наименьших квадратов.
Пусть даны функции  0 ( x ),1 ( x ),..., m ( x ) , назовем их базисными
функциями. Будем искать приближающую (аппроксимирующую) функцию в виде
линейной комбинации
y  Фm ( x )  c0 0 ( x )  c11( x )  ...  cm m ( x ) .
48
(5.11)
Такая аппроксимация называется линейной, а Фm(х) – обобщенный многочлен.
Согласно критерию метода наименьших квадратов вычислим сумму квадратов
отклонений таблично заданной функции от искомого многочлена в узлах:
n
n
 m   ( yi  Фm ( xi ))   ( yi  c0 0 ( xi )  ...  cm m ( xi )) 2 .
2
i 0
(5.12)
i 0
Но нам неизвестна степень обобщенного многочлена. Подберем ее так, чтобы
было наименьшим и:
- аппроксимирующая кривая не проходила через узлы таблицы;
- получить приближение с заданной степенью точности.
Выражение
m
можно рассматривать как функцию от неизвестных
c0 ,..., cm .
m
Нас
интересует, при каких значениях c0 ,..., cm , значение  m будет минимально.
Для этого воспользуемся условием существования экстремума, а именно, найдем
частные производные от
Получим систему вида:
m
по всем переменным
c0 ,..., cm
и приравняем их к нулю.
n
 m


2
 ( yi  c0 0 ( xi )  ...  cm m ( xi ))   0 ( xi )  0
 c
i 0
 0

. . . . . . . . . . . . . . . .

n
m

 2 ( yi  c0 0 ( xi )  ...  cm m ( xi ))   m ( xi )  0

c
i 0
 m

..
(5.13)
Система (5.13) - система линейных уравнений относительно c0 ,..., cm .
Введем определение, чтобы лучше записать (5.13).
Определение. Скалярным произведением функции f на g на множестве точек
x0 ,..., xn
называется выражение ( f , g ) 
n
 f ( xi )  g ( xi ) .
i 0
Тогда систему (5.13) можно записать в виде:
c0 (  0 , 0 )  c1 (  0 ,1 )  ...  c m (  0 , m )  (  0 , y )
c (  , )  c (  , )  ...  c (  , )  (  , y )
1
1 1
m
1 m
1
 0 1 0
.

. . . . . . . . . . . . . . .

c0 (  m , 0 )  c1 (  m ,1 )  ...  c m (  m , m )  (  m , y )
(5.13а)
Системы (5.13) и (5.13а) будем называть нормальными системами уравнений.
49
Решив эти системы, мы найдем коэффициенты c0 ,..., cm , и следовательно,
найдем вид аппроксимирующего многочлена. Напомним, что это возможно, если узлы не
равноотстоящие и базисные функции линейно не зависимы. Осталось определить m.
Алгоритм выбора степени ‘’m’’. В случае, когда m=n мы получим
интерполяционный многочлен, поэтому m<<n. Так же необходимо задать числа 1 и 2,
учитывая следующее:
1) 1 >0 и 2>0 должны быть такими, чтобы  m находилось между ними;
2) первоначально m выбирают произвольно, но учитывая условие, что m<<n;
3) выбрав m, строят системы (5.13) и (5.13a), решив которые находят c0 ,..., cm ;
4) используя найденные коэффициенты вычисляется  m и проверяется, попала ли
она в промежуток между 1 и 2. Если попала, то степень многочлена выбрана
правильно, иначе
 m > 1, то степень необходимо уменьшить хотя бы на единицу;
б) если  m <2, то степень необходимо увеличить хотя бы на единицу.
а) если
5) затем строить приближающую функцию.
Очень часто для приближения по методу наименьших квадратов используются
k
алгебраические многочлены степени mn, т.е.  k ( x )  x . Тогда нормальная система
(5.13) принимает следующий вид:
m
n
 (  xi
j 0 i o
j k
n
)c j   yi xik (k= 0,1,…,m).
i 0
(5.14)
Запишем систему (5.14) в развернутом виде в двух наиболее простых случаях m=1
и m=2. В случае многочлена первой степени P1(x)=c0+c1x, нормальная система имеет вид
n
n

( n  1 )c0  (  xi )c1   yi

i 0
i 0
 n
n
n

2
(  xi )c0  (  xi )c1   yi xi .
i 0
i 0
 i 0
(5.15)
Для многочлена второй степени P2(x)=c0+c1x+c2x2, нормальная система имеет вид
n
n
n

2
( n  1 )c0  (  xi )c1  (  xi )c2   yi
i 0
i 0
i 0

n
n
n
 n
2
3
(  xi )c0  (  xi )c1  (  xi )c2   yi xi .
i 0
i 0
i 0
 i 0
n
n
n
 n
(  xi2 )c0  (  xi3 )c1  (  xi4 )c2   yi xi2
 i 0
i 0
i 0
i 0
50
(5.16)
6 Численные методы решения задачи Коши для обыкновенных
дифференциальных уравнений и систем дифференциальных уравнений
Будем
рассматривать
задачу
Коши
для
системы
обыкновенных
дифференциальных уравнений(ОДУ).Запишем систему в векторной форме
du
 f (t , u) ,
dt
(6.1)
где: u -искомая вектор-функция; t-независимая переменная; u(t )  (u1 (t ),..., u m (t )) ;
f (t )  ( f 1 ,..., f m) , m-порядок системы; u1 (t ),...,u m (t )  координаты; t0;
u ( 0)  u 0 .
Запишем систему (6.1) в развернутом виде
d ui
 f i (t , u1 ,..., u m) ,
dt
(6.2)
0
где: i=1,...,m; u i (0)  u i .
В случае i=1 -это будет ОДУ 1-го порядка, а при i=2 - система из двух уравнений
первого порядка.
В случае i=1 решение задачи Коши предполагает нахождение интегральной
кривой, проходящей через заданную точку и удовлетворяющую заданному начальному
условию.
Задача состоит в том, чтобы найти искомую вектор-функцию u,
удовлетворяющую (6.1) и заданным начальным условиям.
Известны условия, гарантирующие существование и единственность решения
(6.1) или (6.2).
f i ( i  1,..., m ) непрерывны по всем
Предположим, что функции
0
аргументам в некоторой замкнутой области D={t  a, u i  u i  b }, где a,b-известные
константы.
Из непрерывности функций следует их ограниченность, т.е. функции f i сверху
ограничены некоторой константой М: | f i |<M (где М  0) всюду в области D и пусть в
области D функции f i удовлетворяют условию Липшица по аргументам u1 ,..., u m . Это
значит, что
| f i (t, u 1 ,....,u m )  f i (t, u 1 ,...,u m )|  L(|u 1  u 1|  ....  | u m  u m |)
для любых двух точек (t , u 1 ,...., u m) и
существует единственное решение задачи (6.1)
(t , u 1 ,..., u m)
из области D. Тогда
u1  u1 (t ),...., u m  u m (t ) ,определенное при t  T  min a, b / M 
(6.3)
и принимающее при t=0 заданное начальное значение.
Существует два класса методов для решения задачи (6.1):
1) семейство одношаговых методов(Рунге-Кутта);
51
2) семейство многошаговых(m-шаговых) методов.
Сначала рассмотрим одношаговые методы. Для простоты возьмем одно
уравнение
du
 f (t , u ) ,
dt
(6.4)
где: u (0)  u 0 ; t>0.
По оси t введем равномерную сетку с шагом  , т.е. рассмотрим систему точек
ωτ  t n  n  t,n  0,1,2,...... Обозначим через u (t ) точное решение (6.4) , а через
y n  y( t n ) приближенные значения функций u в заданной системе точек.
6.1 Семейство одношаговых методов решения задачи Коши
6.1.1 Метод Эйлера (частный случай метода Рунге-Кутта)
Уравнение (6.4) заменяется разностным уравнением
y n 1  y n

 f (t n , y n ) , n=0,1,2,…, y 0  u 0 .
В окончательной форме значения y n 1 можно определить по явной формуле
yn1  yn  τ  f( t n , yn ).
(6.5)
Вследствие систематического накопления ошибок метод используется редко или
используется только для оценки вида интегральной кривой.
Определение 1. Метод сходится к точному решению в некоторой точке t , если
y n  u (t n )  0, при , t n  t .
Метод сходится на интервале (0,t], если он сходится в любой точке этого
интервала.
Определение 2. Метод имеет р-й порядок точности, если существует такое число
p
р>0, для которого y n  u (t n )  O( ), при , где: - шаг интегрирования; O-малая
величина порядка  .
p
Так как
u n 1  u n

 u (t n)  O( ) , то метод Эйлера имеет первый порядок
точности. Порядок точности метода совпадает с порядком точности разностной
аппроксимации исходного дифференциального уравнения.
6.1.2 Методы Рунге-Кутта
Метод Рунге-Кутта второго порядка точности
52
Отличительная особенность методов Рунге-Кутта от метода (6.5) заключается в
том, что значение правой части уравнения вычисляется не только в точках сетки, но и
также в середине отрезков(промежуточных точках).
Предположим, что приближенное значение y n решения задачи в точке t  t n
уже известно. Для нахождения y n 1 поступают так:
1) используют схему Эйлера в таком виде
y n1 2  y n
0,5
 f (t n , y n)
(6.6)
и отсюда вычисляют yn 1 2 ;
2) воспользуемся разностным уравнением вида
y n 1  y n

 f (t n  0,5 , y n 1 2 ) ,
(6.7)
откуда найдем значение y n 1 . Далее подставим значение y n 1 2  y n  0,5 в
уравнение (6.7). Тогда
y n 1  y n
 f(t n  0 ,5  τ,y n  0 ,5  τ  f n ) ,
τ
(6.8)
где f n  f (t n , y n ) .
Можно показать, что метод (6.8) имеет второй порядок точности, т.е.
yn  u(t )  O( 2 ) .
Метод (6.8) называется методом прогноза и коррекции в том смысле, что на
первом этапе решение как бы предсказывается с точностью O(τ ) , а на втором этапе с точностью до O ( ) (второй порядок точности).
2
Будем рассматривать явные методы. Задаем числовые коэффициенты
a i , bij ,
i=2,...,m; j=1,2,...,(m-1) и =1,2,...,m . Последовательно вычисляем функции
k1  f(t n ,y n ) ;
k 2  f(t n  a 2 τ,y n  b21 τ  k1 ) ;
k 3  f(t n  a3 τ,y n  b31 τ  k1  b32 τ  k 2 ) ;
……………………………………………..
k n  f(t n  a n τ,y n  bm1 τ  k1  ...  bmm1 τ  k m1 ) .
y n1  y n m
   i k i находим значения y n 1 . Здесь
Затем из формулы

i 1
a i , bij ,  i -числовые параметры, которые определяются или выбираются из соображений
точности вычислений.
При m=1 и =1 получается метод Эйлера, при m=2 получаем семейство методов
53
y n1  y n   ( 1k1   2 k 2 ) ,
(6.9)
где: k1  f (t n , y n ) ; k 2  f (t n  a 2 , y n  b21k1 ) ; y0=u0.
Семейство определяет явные методы Рунге-Кутта. Подставив нужные 1 и 2,
получаем окончательную формулу. Точность этих методов совпадает с точностью
аппроксимирующего метода и равна O ( ) .
Невязкой, или погрешностью аппроксимации метода (6.9) называется величина
2
u
 un
 n   n1
  1 f (t n , u n )   2 f (t n  a 2 , u n  b21f (t n , u n )) ,

полученная заменой в (6.9) приближенного решения точным решением.
При 1+2=1 получим первый порядок точности. Если же потребовать
дополнительно  2 b21   2 a 2  0,5 , то получим методы второго порядка точности
вида
y n 1  y n
 (1   ) f (t n , y n )  f (t n  a , y n  af (t n , y n ))

при
  a  0,5 .
Приведем один из методов Рунге-Кутта третьего порядка точности
yn 1  yn 1
 (k1  4k 2  k3 ) ,
τ
6
где: k1  f (t n , y n ) ;
τ

k2  f(t n  ,yn  k1 ) ; k3  f (t n   , yn  k1  2k 2 ) .
2
2
Метод Рунге-Кутта 4-го порядка точности
y n1  y n
τ
где:
1
 ( k1  2  k 2  2  k 3  k 4 ) ,
6
k 2  f( t n 
k1  f( t n , y n );
k 4  f( t n  τ, yn  τ  k 3 ).
τ
τ
, y n   k1 );
2
2
k 3  f( t n 
τ
τ
, y n   k 2 );
2
2
Методы Рунге-Кутта сходятся и порядок их точности совпадает с порядком
аппроксимации разностным отношением.
Теорема. Пусть правая часть уравнения (6.4) f (t , u ) удовлетворяет условию
Липшица по аргументу
u
с константой L, и пусть
 n -невязка метода Рунге-Кутта.
Тогда для погрешности метода при n    T справедлива оценка
54
y n  u(t n )  TeT max  n ,
где:
  Lm (1  Lb ) m 1 ;   max  i ; b  max bij .
i, j
i
На практике обычно пользуются правилом Рунге. Для этого сначала проводят
 2

вычисления с шагом  , затем -  2 . Если y n - решение при шаге , а y 2 n - при шаге
 2 , то справедлива оценка y 2n2  u (t n ) 
16  2
y 2n  y n . Тогда за оценку
15
погрешности при шаге  2 принимают величину
max
i
y n  y 2 n2
15
.
6.2 Многошаговые разностные методы решения задачи Коши для
обыкновенных дифференциальных уравнений
Рассмотрим задачу Коши для обыкновенного дифференциального уравнения
du
 f (t , u ) ,
dt
(6.10)
где u (0)  u 0 .
Для решения задачи Коши для уравнения (1) при t>0 введем равномерную сетку с
постоянным шагом  ω τ  t n  n  τ,n  0 ,1,....
Введем понятие линейного m шагового разностного метода для решения задачи
(6.10). Линейным m-шаговым методом называется система разностных уравнений
a 0 y n  a1 y n 1  ...  a m y n  m
 b0 f n  b1 f n 1  ...  bm f n  m ,
τ
(6.11)
где: n=m,m+1...; a k , bk -числовые коэффициенты не зависящие от n; k=0,1,…,m.
Систему (6.11) будем рассматривать как рекуррентные соотношения,
выражающие новое значения y n  y (t n ) через ранее найденные значения
y n 1 , y n  2 ,..., y n  m , причем расчет начинают с индекса n=m, т.е. с уравнения
a 0 y m  a1 y m 1  ...  a m y 0
 b0 f m  b1 f m 1  ...  bm f 0 .
τ
Отсюда следует, что для начала расчета по формулам (6.11) надо знать m предыдущих
значений функции y, причем y 0 =u 0 . Эти предыдущие m значений могут быть найдены
одним из одношаговых методов Рунге-Кутта.
55
Отличие от одношаговых методов состоит в том, что по формулам (6.11) расчет
ведется только в точках сетки.
Определение. Метод (6.11) называется явным, если коэффициент b 0 =0. Тогда
значение y n легко выражается через y n 1 , y n  2 ,..., y n  m . В противном случае метод
называется неявным, и для нахождения y придется решать нелинейное уравнение вида
m
a0
a
y n  b0 f(t n ,y n )   (bk t nk  k y nk ) .
τ
τ
k 1
(6.12)
Обычно это уравнение решают методом Ньютона при начальном значении
y n( 0)
 y n 1 . Коэффициенты уравнения (6.11) определены с точностью до множителя,
m
тогда, чтобы устранить этот произвол, вводят условие
 bk
 1 , с тем условием, что
k 0
правая часть (6.11) аппроксимирует правую часть уравнения (6.10).
На практике используют частный случай методов (6.11), т.н. методы Адамса, т.е.
когда производная u (t ) аппроксимируется разностным отношением, включающим две
соседние точки t n и t n 1 . Тогда a 0   a1  1 ; ak =0, k=2,...,m и
y n  y n1

m
  bk f nk .
(6.13)
k 0
Это и есть методы Адамса. При b 0 =0 метод будет явным, в противном случае неявным.
6.2.1 Задача подбора числовых коэффициентов aк , bк
Выясним, как влияют коэффициенты ak, bk на погрешность аппроксимации
уравнения (6.11), на устойчивость и сходимость.
Определение. Невязкой, или погрешностью аппроксимации методов (6.11)
называется функция
m
rn   
ak
k 0 
un  k 
m
 bk f (tn  k , un  k ) ,
(6.14)
k 0
где u (t ) -точное решение дифференциального уравнения (6.10).
Если разложить функции u n  k  u (t n , k   ) в ряд Тейлора в точках t  t n
равномерной сетки, окончательно получим функцию
m
rn  ( 
k 0
56
ak

p
m
)U (t n )   (  (k   ) l 1 (a k
l 1 k  0
U (l ) (t n )
k
 bk )) 
 O( p ) .
l
(l  1)!
(6.15)
Из вида функции rn следует, что порядок аппроксимации будет равен p, если
выполнены условия
m
 ak
 0;
k 0
m
 k l 1 (ka k
k 0
m
 bk
 lbk )  0;
(6.16)
 0,
k 0
где l=1,...,p.
Условия (6.16) представляют собой СЛАУ относительно неизвестных a 0 ,..., a m ,
b0 ,..., bm . Их количество равно 2(m+1). Решив систему (6.16), получаем неизвестные
числовые коэффициенты. Для неявных методов наивысшим порядком аппроксимации
p=2m, а для неявных – p=2m-1.
Запишем систему (6.16) для методов Адамса
m
l   k l 1bk  1;
k 1
(6.17)
m
b0  1   b k ,
k 1
где l=2,...,p . Отсюда наивысший порядок аппроксимации для неявного метода p=m+1, для
явного – p=m.
6.2.2 Устойчивость и сходимость многошаговых разностных методов
Наряду с системами уравнений
однородные разностные уравнения вида
(6.11)
будем
a 0Vn  a1Vn 1  ...  a mVn  m  0 ,
рассматривать
т.н.
(6.18)
где n=m,m+1,... .
Будем искать его решение в виде функции
Vn  q n ,
где q-число подлежащее определению. Подставив V n в (6.18) получаем уравнение для
нахождения q
a 0 q m  a1 q m 1  ...  a m1 q  a m  0 .
(6.19)
Уравнение (6.19) принято называть характеристическим уравнением для
разностных методов (6.11). Говорят, что разностный метод (6.11) удовлетворяет условию
57
корней, если все корни уравнения (6.19) q1 ,..., q m лежат внутри или на границе
единичного круга комплексной плоскости, причем на границе нет кратных корней.
Разностный метод (6.11), удовлетворяющий условию корней, называется
устойчивым методом.
Теорема. Пусть разностный метод (6.11) удовлетворяет условию корней и
выполнено условие
f (t , u )  L при 0  t  T . Тогда при
m   tn  n   T ,
nm и достаточно малых  будет выполнена оценка
y n  u (t n )  M ( max y j  u (t j )  max rk ) ,
0 j  m 1
0 k  n  m
(6.20)
где: rk -погрешность аппроксимации; y j  u (t j ) -погрешность в задании начальных
условий; M=const.
Методы Адамса удовлетворяют условию корней, т.к. a0=-a1=1, следовательно,
q=q1=1.
6.2.3 Примеры m-шаговых разностных методов Адамса для различных m
Явные методы. При m=1 порядок точности p=1. Тогда метод описывается
формулой
y n  y n 1

 f n 1 .
В этом случае получаем метод Эйлера. При m=2 порядок точности p=2. Тогда метод
описывается формулой
y n  y n 1


3
1
f n 1  f n  2 .
2
2
При m=3 порядок точности p=3. Тогда метод описывается формулой
y n  y n 1


1
(23 f n 1  16 f n  2  5 f n 3 .
12
При m=4 порядок точности p=4. Метод описывается формулой
y n  y n 1


1
(55 f n 1  59 f n  2  37 f n 3  9 f n  4 ) .
24
Неявные формулы Адамса.
m=1, p=2,
m=2, p=3,
58
y n  y n 1

y n  y n 1

1
( f n  f n 1 ) -метод трапеций;
2
1
 (5 f n  8 f n 1  f n  2 ) ;
12

m=3, p=4,
y n  y n 1


1
(9 f n  19 f n 1  5 f n  2  f n 3 ) .
24
Неявные методы содержат искомое значение y n нелинейным образом, поэтому
для его нахождения применяют итерационные методы решения нелинейных уравнений.
6.3
Численное
интегрирование
дифференциальных уравнений
жестких
систем
обыкновенных
Жесткие системы можно сравнить с плохо обусловленными системами
алгебраических уравнений.
Рассмотрим систему дифференциальных уравнений(ДУ)
du
 f (t , u) ,
dt
(6.21)
где u (0)  u 0 . Для решения (6.21) рассмотрим разностные методы вида
m
1 m
  a k  y nk   bk  f( t nk , y nk ) ,
τ k 0
k 0
(6.22)
где n= m, m+1, m+2,….
Устойчивость и сходимость методов (6.22) определяется расположением корней
характеристического уравнения, т.е. |q|1 - корни принадлежат единичной окружности.
Среди методов (6.22) выделим те, которые позволяют получить асимптотически
устойчивые решения.
Пример. В качестве частного случая (6.21) рассмотрим уравнение вида
du
  u ,
dt
(6.23)
t
где: u (0)  u0 ; <0; u (t )  u 0 e - решение ДУ. При  <0 решение есть монотонно
убывающая функция при t. Для этого решения можно записать при любом шаге  >0
u (t   )  u (t ) ,
(6.24)
что означает устойчивость решения.
Рассмотрим для задачи (6.23) метод Эйлера
y n 1  y n

   yn ,
где: n=0, 1, 2, …, y n 1  q  y n , q-промежуточный параметр, равный 1+.
59
Оценка (6.24) для метода Эйлера будет выполнена тогда и только тогда, когда
|q|. Шаг  лежит в интервале 0 <  <. Метод Эйлера для задачи (6.23) устойчив при
выполнении этого условия.
Определение 1. Разностный метод (6.22) называется абсолютно устойчивым, если
он устойчив при любом  >0.
Определение 2. Разностный метод называется условно-устойчивым, если он
устойчив при некоторых ограничениях на .
Например, метод Эйлера для (6.23) условно-устойчив, т.к. 0 <  <.
Примером абсолютно устойчивого метода является неявный метод Эйлера
y n 1  y n
   y n 1 ,

q  (1   ) 1  1 .
Замечание. Условная устойчивость является недостатком явных
методов в
связи с тем, что приходится выбирать мелкий шаг интегрирования.
Пример для задачи (6.23). Если =-200, тогда 0.01. Если мы рассмотрим
интервал (0,1], то необходимо будет 100 шагов. Неявные методы со своей стороны
приводят к решению на каждом шаге нелинейного уравнения, но это уже недостаток
неявного метода.
6.3.1 Понятие жесткой системы ОДУ
Замечание. Все вышерассмотренные методы легко реализуются на примере
одного уравнения и легко переносятся на системы ДУ, но при решении систем возникают
дополнительные трудности, связанные с разномасштабностью описанных процессов.
Рассмотрим пример системы двух уравнений:
 d u1
 dt  a1  u1  0
,
 du
2

 a2  u2  0
 dt
где: t >0; a1,a2>0. Это система однородных независимых ДУ
 a t

 u1(t)  u1( 0 )  e 1
.


a

t
2

u 2(t)  u 2( 0 )  e
Решение монотонно убывает с ростом t. Пусть коэффициент а2 на порядок и выше
больше а1, т.е. а2>>a1. Тогда компонента u2 затухает гораздо быстрее u1, начиная с
некоторого момента времени t и тогда решение задачи u(t) полностью будет определяться
поведением компоненты u1. Однако при численном решении данной задачи шаг
интегрирования  будет определяться компонентой u2, несущественной с точки зрения
поведения решения системы. Рассмотрим метод Эйлера для решения данной системы
60
 u1(n1 )  u1(n)
 a  u1(n)  0


τ
.
 (n1 )
(n)
u

u
 2
2
 a  u 2(n)  0

τ
Он будет устойчив, если на  наложены ограничения
τ  a1  2
τ  a2  2
.
Учитывая, что a 2 >> a1 , получаем окончательное ограничение на 

2
.
a2
Такие трудности могут возникнуть при решении любых систем ОДУ. Рассмотрим в
качестве примера систему
du
 Au,
dt
(6.25)
где А-квадратная матрица m*m. Если матрица А имеет большой разброс собственных
чисел, то возникают проблемы с разномасштабностью описываемых системой процессов.
Допустим, что матрица А постоянна (т.е. не зависит от t). Тогда система (6.21)
будет называться жесткой, если:
1)
вещественные части собственных чисел  k  0 для всех k, где к=1,…,m;
2)
число S 
max | Re  k |
велико (десятки и сотни), и число S называется
min | Re  k |
числом жесткости системы.
Если же матрица А зависит от t, то и собственные числа зависят от t и  k зависят
от t.
Решение жесткой системы (6.25) содержит как быстроубывающие, так и
медленно убывающие составляющие.
6.3.2 Некоторые сведения о других методах решения жестких систем
Разностные методы (6.22) для решения жестких систем на практике используются
в виде методов Гира (неявный разностный метод) и метода матричной экспоненты(метод
Ракитского).
6.3.2.1 Методы Гира
Это частный случай методов (6.22), когда коэффициент b0  1 , b1 ,...,bm  0 .
Запишем числовые коэффициенты, которые определяются из условия p-го порядка
точности аппроксимации системы разностными методами
61
m
a0   a k ;
k 1
m
 k  ak
 1 ;
k 1
m
 k l  ak
 0,
k 1
(6.26)
где l=2,...,p.
Решив систему линейных уравнений (6.26) с учетом предыдущих условий,
получаем все нужные коэффициенты.
Трехшаговый метод Гира (частный случай методов (6.22) с учетом условий (6.26))
имеет вид
11
3
1
y n  3  y n1  y n2  y n3    f ( t n , y n ) .
6
2
3
(6.27)
При m=4, получаем четырехшаговый метод Гира
25  y n  48  y n 1  36  y n  2  16  y n 3  3  y n  4
 f(t n ,y n ) .
12  τ
(6.28)
Запишем систему (6.26) в виде
 a1  2  a 2  ....  m  a m  1
 a  2  a  ....  2  a  0
m
 1 2
2
m
.

..........
..........
..........
........

a1  2m  a 2  ....  mm  a m  0
(6.29)
Решив (6.29) для каждого случая можем найти коэффициенты a k , к=1,2,…,т.
6.3.2.2 Метод Ракитского(матричной экспоненты) решения систем ОДУ
du
 Au,
dt
(6.30)
где: u  (u1 ,...,u n ) ; u(0)  u 0 ; А-матрица размерности n*n.
Допустим, что матрица А - постоянная, т.е. ее элементы не зависят от времени.
Система (6.30)–однородная, с постоянными коэффициентами. Запишем аналитическое
решение (6.30)
u  e At  u0 ,
где e
62
At -матричная экспонента и
(6.31)
e
At
( A  t)2
( A  t)n
 E  At 
 ... 
+….
2!
n!
(6.32)
Пусть необходимо (6.30) проинтегрировать при значениях t=, 2, 3,….
A
Если точно знать матрицу e , то точное решение в указанных точках можно
получить по формуле (6.31), т.е. решение можно записать
u |t   e A  u0 ;
u |t  2  e A  u
x  ;
……………..…
Таким образом, задача сводится к тому, чтобы достаточно точно знать матрицу
A
. На практике поступают следующим образом: при больших  рядом Тейлора нельзя
воспользоваться в связи с его бесконечностью, т.е. для удовлетворительной точности
пришлось бы взять много членов ряда, что трудно. Поэтому поступают так: отрезок [0,]
разбивают на к-частей, чтобы длина h=/к удовлетворяла условию ||A*h||<0.1. Тогда
запишем по схеме Горнера
e
e A h  E  A  h(E 
Каждый столбец матрицы e
Ah
A h
Ah
A h
(E 
(E 
))).
2
3
4
- w j вычисляют по формуле
Ah k
w j  ( e )  w j0 ,
где
w j 0 - вектор столбец, в i-ой строке которого 1, а в остальных - нули.
Если эта матрица найдена, то решение находится по (6.31).
Для
исследования разностных методов при решении жестких систем
рассматривают модельное уравнение
du
  u,
dt
(6.33)
где -произвольное комплексное число.
Для того, чтобы уравнение (6.33) моделировало исходную систему (6.30) его
нужно рассматривать при таких значениях , которые являются собственными числами
матрицы А. Многошаговые разностные методы (6.31) имеют вид
m
 (a k  μ  bk )  y n  k ,
(6.34)
k 0
где: n=m, m+1…;  .
Если решение уравнения (6.34) искать в виде y n  q , то для нахождения числа
q получим характеристическое уравнение вида
n
63
m
mk
 0.
 (a k  μ  bk )  q
k 0
Для устойчивости метода достаточно выполнения условия корней | qk |  1. В
случае жестких систем используются более узкие определения устойчивости.
Предварительные сведения. Областью устойчивости разностных методов
называется множество всех точек комплексной плоскости *, для которых разностный
метод применительно к уравнению (6.33) устойчив.
Определение 1. Разностный метод называется А-устойчивым, если область его
устойчивости содержит левую полуплоскость комплексной полуплоскости, т.е. Re<0.
Замечание. Решение модельного уравнения (6.33) асимптотически устойчиво при
значениях Re<0, поэтому сущность А-устойчивого метода заключается в том, что Аустойчивый разностный метод является абсолютно устойчивым, если устойчиво решение
исходного дифференциального уравнения.
Так как класс А-устойчивых методов узок, то пользуются А()-устойчивым
методом.
Определение 2. Разностный метод (6.31) называется А()-устойчивым, если
область его устойчивости содержит угол меньший , т.е. |arg(-)|<, где .Исходя из
этого определяется, что при  А() устойчивость совпадает с определением Аустойчивого метода.
6.4 Краевые задачи для обыкновенных дифференциальных уравнений
Постановка краевой задачи. Рассматриваем дифференциальное уравнение
порядка n(n2)
y ( n)  f ( x, y, y ,..., y ( n1) ) ,
(6.35)
где: y k ( x 0 )  y 0 ; к=0,1,…,(n-1).
Если сделаем замену переменных вида
(k )
y   y1 ;


y1  y 2 ;

 ................................
 y   f ( x, y ,..., y );
1
n 1
 n 1
(k )
y k ( x0 )  y 0 ,

(6.36)
то задача (6.35) сводится к задаче Коши для нормальной системы ОДУ порядка n.
Типовые примеры краевых задач. Рассмотрим теперь дифференциальное
уравнение
F ( x, y, y ,..., y ( n ) )  0 .
(6.37)
Для уравнения (6.37) краевая задача формулируется следующим образом: найти
решение y=y(x), удовлетворяющее уравнению (6.37), для которой значения ее
64
производных в заданной системе точек x  x i удовлетворяют n независимым краевым
условиям, в общем виде нелинейным. Эти краевые условия связывают значения искомой
функции y и ее производных до (n-1) порядка на границах заданного отрезка.
1. Рассмотрим уравнение
второго порядка y   f ( x, y, y ) .
Необходимо найти решение уравнения,
удовлетворяющее заданным краевым
условиям: y(a)=A, y(b)=B, т.е.
необходимо найти интегральную
кривую, проходящую через две
заданные точки (рисунок 7).
Рисунок 7 – Краевые условия для случая 1
2. Рассмотрим уравнение
y   f ( x, y, y ) с краевыми
условиями y (a )  A1 ,
y (b)  B1 .
Из графика на рисунке 8
видно, что tg()=A1 , tg()=B1.
Здесь интегральная кривая
пересекает прямые x=a и x=b под
заданными углами  и 
соответственно.
3. Смешанная краевая
задача. Рассмотрим то же самое
y   f ( x, y, y ) с
уравнение
краевыми
условими
y(a)=A1
y’(b)=B1
.
Геометрическую
иллюстрацию
этих
краевых
условий
легко
представить,
используя рисунки 7 и 8.
Рисунок 8 – Краевые условия для случая 2
Замечание. Краевая задача
для уравнения (6.37) в общем случае может не иметь решений, иметь единственное
решение, иметь несколько решений или бесконечное множество решений.
4. Поражение заданной цели баллистическим снарядом. Дифференциальные
уравнения движения снаряда с учетом сопротивления воздуха имеют вид
 x   E cos 
,

 y   E sin   g
65
где: x - вторая производная по
времени; E=E(y,v) -известная функция
высоты и скорости; v 
x 2  y 2 ;
g=g(y)- ускорение силы тяжести;  угол наклона к горизонту касательной
к траектории движения снаряда;
  arctg
Рисунок 9 – Траектория снаряда
y
.
x
Предполагая, что при t=t0
снаряд
выпущен
из
точки,
совпадающей с началом координат с
начальной скоростью v0 под углом 0
, а в момент t=t1
поразит
неподвижную
мишень
в
точке
M ( x1 , y1 ) получаем краевые условия
 x  0, y  0, x  v 0 cos , y  v 0 sin ,приt  t 0 ,

x  x1 , y  y1 , приt  t1 .

Здесь неизвестны 0 и t1. Решив данную краевую задачу, можем найти начальный
угол  0  arctg
y 0
, где: x 0  x (t 0 ); y 0  y (t 0 ) ; 0 -угол, при котором поражается
x 0
цель в точке M.
6.5 Решение линейной краевой задачи
Рассмотрим важный частный случай решения краевой задачи, когда
дифференциальное уравнение и краевые условия линейны.
Для этого рассмотрим уравнение
(n)
(n1 )
P 0 (x)  y (x)  P1 (x)  y (x)  ...  P n (x)  y(x)  f(x) ,
(6.38)
где: Pi (x ) и f(x) известные непрерывные функции на отрезке [a, b].
Предположим, что в краевые условия входят две абсциссы x=a, x=b. Это
двухточечные краевые задачи. Краевые условия называются линейными , если они имеют
вид
n 1
(k)
(ν )
(k )
)
Rν (y)   ( α(ν
k  y (a)  β k  y (b)) =,
k 0
где:   -заданные константы. Причем они одновременно не равны нулю, т.е.
n 1
( )
 [|  (k ) |  |  k |]  0 , при v=1,2,…,n.
k 0
66
(6.39)
Например, краевые условия во всех трех рассмотренных ранее задачах линейны,
т.к. их можно записать в виде
 0  y (a )  1  y (a )   1
 0  y (b)   1  y (b)   2
причем
 0  1,1  0, 1  A,  0  1, 1  0, 2  B
,
- для первой задачи.
6.6 Решение двухточечной краевой задачи
второго порядка сведением к задаче Коши
для линейного уравнения
Запишем линейное уравнение второго порядка в виде
y   p( x)  y   q( x)  y  f ( x) ,
(6.40)
где: p, q, f-известные непрерывные функции на некотором отрезке [a,b].
Требуется найти решение уравнения (6.40), удовлетворяющее заданным краевым
условиям
 0  y(a)  1  y (a)  A,
 0  y(b)  1  y (b)  B.
(6.41)
Причем константы  и  одновременно не равны нулю
 0   1  0,
 0   1  0.
Решение задачи (6.40), (6.41) будем искать в виде линейной комбинации
y=Cu+V,
где С - константа, u-общее решение соответствующего однородного уравнения
u   p( x)  u   q( x)  u  0 ,
(6.42)
а V-некоторое частное решение неоднородного уравнения
V   p( x)  V   q( x)  V  f ( x) .
(6.43)
Потребуем ,чтобы первое краевое условие было выполнено при любом C,
C ( 0  u (a)   1  u (a))  ( 0  V (a)   1  V (a))  A ,
откуда следует, что
 0  u (a)   1  u (a)  0 ,  0  V (a)   1  V (a)  A .
67
Тогда
u (a)   1 k
,
u (a)   1 k
(6.44)
где k- некоторая константа, не равная нулю. Значение функции V и ее производная в
точке а
если коэффициент

0
V (a)  A  0
,
V (a)  0
(6.45)
V (a)  0
,
V (a)  A  1
(6.46)
 и

если коэффициент
.
1
Из этих рассуждений следует, что функция u - есть решение задачи Коши для
однородного уравнения (6.42) с начальными условиями (6.44), а функция V - есть решение
задачи Коши для неоднородного уравнения (6.43) с начальными условиями (6.45) или
(6.46) в зависимости от условий. Константу C надо подобрать так, чтобы выполнялись
условия (6.41) (вторая строчка) в точке x=b
C( 0  u(b)   1  u (b))   0  V (b)   1  V (b)  B .
Отсюда следует, что
C
B  (  0  V (b)   1  V (b)
,
 0  u (b)   1  u (b)
где знаменатель не должен быть равен нулю, т. е.
 0  u(b)   1  u (b)  0 .
(6.47)
Если условие (6.47) выполнено, то краевая задача (6.35), (6.36) имеет
единственное решение. Если же (6.47) не выполняется, то краевая задача (6.35), (6.36)
либо не имеет решения, либо имеет бесконечное множество решений.
6.7 Методы численного решения двухточечной краевой задачи для
линейного уравнения второго порядка
6.7.1 Метод конечных разностей
Рассмотрим линейное дифференциальное уравнение
68
y   p( x)  y   q( x)  y  f ( x)
(6.48)
с двухточечными краевыми условиями
 0 y (a )   1 y (a)  A
;

  0 y (b)   1 y (b)  B
(  0  1  0,  0  1  0) ,
(6.49)
где: p, q, f-известные непрерывные функции на некотором отрезке [a,b].
Одним из наиболее простых методов решения этой краевой задачи является
сведение ее к системе конечно-разностных уравнений.
Основной отрезок [a,b] делим на n - равных частей с шагом h=(b-a)/n, то есть
рассматриваем равномерную сетку x i  x 0  i  h , i=0,1,…,n. Производные в исходном
уравнении (6.48) заменяем конечно-разностными отношениями. Для внутренних точек
y i 1  y i 1
y i 
y i 
;
2h
y i  2  2  y i  y i 1
h2
(6.50)
,
где i=1,...,n-1.
Для граничных точек x 0  a и x n  b , чтобы не выходить за границы отрезка,
производные заменяем отношениями
y 0 
y1  y 0
h
, yn 
y n1  y n
.
h
(6.51
)
Используя отношения (6.50), (6.51) исходное дифференциальное уравнение (6.48)
аппроксимируем конечно-разностными уравнениями
yi 1  2  yi  yi 1
h
2
 pi
yi 1  yi 1
2h
 qi  yi  f i ,
(6.52
)
где i=1,...,n-1. Учитывая краевые условия, получим еще два уравнения
 y 2  4  y1  3  y 0





A
y
0
1

0
2h
.

3  y n  4  y n 1  y n  2
  y  
B
1
 0 n
2h
(6.53
)
Таким образом получена линейная система n+1 уравнений с n+1 неизвестными
y 0 , y1 ,..., y n , представляющими собой значения искомой функции y  y(x) в точках
x 0 , x1 ,..., x n . Решив эту систему, получим таблицу значений искомой функции y.
69
6.7.2 Метод прогонки (одна из модификаций метода Гаусса)
При применении метода конечных разностей к краевым задачам для
дифференциальных уравнений второго порядка получается система линейных
алгебраических уравнений с трехдиагональной матрицей, т.е. каждое уравнение системы
содержит три соседних неизвестных. Для решения таких систем разработан специальный
метод – «метод прогонки».
Для этого систему (6.52) перепишем в виде
~
yi 1  mi  yi  ni  yi 1  f i  h2 для внутренних точек (i=1,…,n-1),
где:
mi 
1
2  qi  h
; ni 
pi  h
1
1
2
2
pi  h
2 ; ~ 
fi
pi  h
(6.54
)
fi
.
pi  h
1
2
2
На концах отрезка x0=a и x n=b производные заменяем разностными отношениями
y 0 
y1  y 0
h
и
y n 
y n1  y n
.
h
Учитывая эту замену получим еще два уравнения
 0  y 0  1
 0  yn   1
y1  y 0
h
 A;
y n 1  y n
h
 B.
(6.55
)
Обратим внимание на внешний вид записи системы (6.54), (6.55). В каждом
уравнении системы присутствует три ненулевых элемента. В первом и
последнем - по
два ненулевых коэффициента.
Разрешая уравнение (6.54) относительно y i , получим
~
f
n
1
yi  i h 2 
y i 1  i y i 1 .
mi
mi
mi
(6.56
)
Предположим, что с помощью полной системы (6.54), (6.55) из уравнения (6.56)
исключена неизвестная y i 1 . Тогда это уравнение примет вид
y i  c i (d i  y i 1 ) ,
где: c i , d i - некоторые коэффициенты; i=1,2,…,n-1. Отсюда
70
(6.57
)
y i 1  c i 1 (d i 1  y i ) .
Подставляя это выражение в уравнение (6.54), получим
~
y i 1  mi y i  ni ci 1 (d i 1  y i )  f i h 2 ,
а отсюда
~
( f i h 2  ni c i 1 d i 1 )  y i 1
yi 
.
mi  ni ci 1
(6.58
)
Сравнивая (6.57) и (6.58), получим для определения с i и d i рекуррентные
формулы
ci 
1
~
; d i  f i h 2  ni ci 1 d i 1 ; i=1,…,n-1.
mi  ni ci 1
(6.59
)
Из первого краевого условия (6.55) и из формулы (6.57) при i=0 находим
c0 
1
 0 h  1
; d0 
Ah
1
.
(6.60
)
На основании формул (6.59), (6.60) последовательно определяются коэффициенты
с i , d i (i=1,…,n-1) до с n 1 и d n 1 включительно (прямой ход).
Обратный ход начинается с определения y n . Для этого из второго краевого
условия (6.55) и из формулы (6.51) при i=n-1 найдем
yn 
 0 h   1c n 1 d n 1
.
 0 h   1 (c n 1  1)
(6.61
)
Далее по формуле (6.57) последовательно находим y n1 , y n2 ,..., y0 .
Заметим, что метод прогонки обладает устойчивым вычислительным алгоритмом.
71
7 Приближенное решение дифференциальных уравнений в частных
производных
В реальных физических процессах искомая функция зависит от нескольких
переменных, а это приводит к уравнениям в частных производных от искомой функции.
Как и в случае обыкновенных дифференциальных уравнений(ОДУ), в этом случае для
выбора одного конкретного решения, удовлетворяющего уравнению в частных
производных, необходимо задавать дополнительные условия (т.е. краевые условия ).
Чаще всего такие задачи на практике не имеют аналитического решения и приходится
использовать численные методы их решения, в том числе метод сеток, метод конечных
разностей и так далее. Мы будем рассматривать класс линейных уравнений в частных
производных. В общем виде эти уравнения записываются в виде
 2u
 2u
 2u
u
A(x,y) 2  B(x,y)
 C(x,y) 2  a(x,y) 
xy
x
x
y
u
 b(x,y)  c(x,y)u  F(x,y) ,
y
(7.1)
где: A, B, C, a, b, c-заданные непрерывные функции двух переменных, имеющие
непрерывные частные производные, u-искомая функция. Для сокращения записи введем
обозначения
u xx 
2
u
u
 2u
 u
u

;
;
; ux 
;
u

yy
xy
2
2
x
xy
y
x
uy 
u
.
y
Будем рассматривать упрощенную форму записи (7.1) вида
A( x, y )u xx  B( x, y )u xy  C ( x, y )u yy  a( x, y )u x 
 b( x, y )u y  c( x, y )u  F ( x, y )
(7.2)
и рассмотрим частный случай (7.2), когда a=b=c=F0, т.е.
A( x, y)u xx  B( x, y)u xy  C ( x, y)u yy  0 .
(7.3)
Путем преобразований уравнение (7.3) может быть приведено к каноническому
виду (к одному из трех стандартных канонических форм) эллиптическому типу,
гиперболическому типу, параболическому типу. Причем тип уравнения будет
определяться коэффициентами А, В, С, а именно – знаком дискриминанта
D=B2-4AC.
Если D <0, то имеем уравнение эллиптического типа в точке с координатами x, y;
если D=0, то (7.3)-параболического типа; если D>0, то (7.3)-гиперболического типа; если
D не сохраняет постоянного знака, то (7.3)-смешанного типа.
Замечание. Если А, В, С - константы, тогда каноническое уравнение (7.3)
называется полностью эллиптического, параболического, гиперболического типа.
72
Введем понятие оператора Лапласа
уравнений вида
для сокращенной записи канонических
 2u
u
u 

.
 x2  y2
Используя это определение, запишем сокращенные канонические уравнения
всех трех типов
1. u=0. Это уравнение эллиптического типа, так называемое уравнение Лапласа.
В механике это уравнение описывает стационарные тепловые поля, установившееся
течение жидкости и т.д.
2.u=-f , где f-заданная непрерывная функция. Это уравнение Пуассона имеет
эллиптический тип и описывает процесс теплопередачи с внутренним источником тепла.
3. a u  u t , где a-константа. Не во всех уравнениях в качестве переменных
будут выступать стандартные переменные x, y. Может быть также переменная времени.
Это уравнение диффузии описывает процесс теплопроводности и является уравнением
параболического типа.
2
 2u
 a 2 u , а-константа. Это уравнение гиперболического типа - так
4.
2
t
называемое волновое уравнение и оно описывает процесс распространения волн.
7.1 Метод сеток для решения смешанной
параболического типа (уравнения теплопроводности)
задачи
для
уравнения
Смешанная задача означает, что следует найти искомую функцию,
удовлетворяющую заданному уравнению в частных производных, краевым, а так же
начальным условиям.
Рассмотрим смешанную задачу для однородного уравнения теплопроводности
u
 2u
 k 2 , k=const>0.
t
x
(7.4)
Задано начальное условие
u( x,0)  f ( x)
(7.5)
u (0, t )  1 ( x);
u (a, t )   2 ( x).
(7.6)
и заданы краевые условия первого рода
Требуется найти функцию u(x,t), удовлетворяющую в области D(0<x  a, 0<t  T)
условиям (7.5) и (7.6). Физически это можно представить как стержень, на концах
которого поддерживается требуемый температурный режим, заданный условиями (7.6).
73
При
проведении
t  t k получим
замены
u  2 u

, т.е. k=1.
t x 2
Задача решается методом сеток:
строим в области D равномерную
сетку с шагом h по оси x и шагом  по
t (см. рисунок 10).
Приближенное значение
искомой функции в точке ( xi , yi ) -
u ( xi , yi ) обозначим через u ij . Тогда
xi  i  h ; h  a h ; i=0,1,...,n;
t j  j  ;
Рисунок 10 – Неявная схема
j=0,1,...,m;   T m .
Заменим производные разностными отношениями
u ui, j  ui, j 1

 O( ) ;
t

 2u ui 1, j  2ui , j  ui 1, j

 O( ) .
x 2
h2
В результате получим неявную двухслойную схему с погрешностью O(+h2)
ui , j  ui , j 1

Используя подстановку

ui 1, j  2ui , j  ui 1, j
h2
.
   h 2 , выразим из этой схемы ui,j-1
ui , j 1  (2  1)ui, j  ui 1, j  ui 1, j ,
(7.7)
где: u0,j=1(tj); un,j=2(tj).
Получаем разностную схему, которой аппроксимируем уравнение (7.4). Эта схема
(7.7) неявная, и выглядит так, как показано на рисунке 10. При построении схемы (7.7)
получается система линейных уравнений с трехдиагональной матрицой. Решив ее любым
способом (в частности, методом прогонки), получаем значения функции на определенных
временных слоях. Так, на нулевом временном слое используем начальное условие
Ui,0=f(xi), т.к. j=0. Эта неявная схема более устойчива для любых значений параметра >0.
Есть и явная схема (рисунок 11), но она устойчива только при   1 2 , т.е. при
  h2 2 .
74
Рисунок 11 - Явная схема
7.2 Решение задачи Дирихле для уравнения Лапласа методом сеток
Рассмотрим уравнение Лапласа
2
2 u   u  0
.
 x2  y2
(7.8)
Уравнение (7.8) описывает распространение электромагнитных волн(полей).
Будем
рассматривать
уравнение
Лапласа
в
прямоугольной
области
  ( x, y ),0  x  a,0  y  b с краевыми условиями
u (0, y )  f 1 ( y ) ; u (a, y )  f 2 ( y ) ; u ( x,0)  f 3 ( x) ; u ( x, b)  f 4 ( x) ,
где f1 , f 2 , f 3 , f 4 -заданные функции. Заметим, что чаще всего область бывает не
прямоугольной.
Введем обозначения uij=u(xi,yj). Накладываем на прямоугольную область сетку
xi  h  i ; i=0,1,…,n; y j 1  j ; j=0,1,…,m. Тогда xn  h  n , y m  l  m .
Частные производные аппроксимируем по формулам
 2u u i 1  2  u i , j  u i 1, j

 O(h 2);
2
2
x
h
 2u
u i , j 1  2  u i , j  u i , j 1
y
2

2
l
 O(l 2),
и заменим уравнение Лапласа конечноразностным уравнением
75
Рисунок 12 – Схема “крест”
u i 1, j  2  u i , j  u i 1, j
h
2

u i , j 1  2  u i , j  u i , j 1
l
2
 0,
(7.9)
где: i=1,…,n-1, j=1,...,m-1 (т.е. для внутренних узлов).
Погрешность замены дифференциального уравнения разностным составляет
величину О( h  l ). Выразим ui,j при h=l, и заменим систему
2
2
u ij  (u i 1, j  u i 1, j  u i , j 1  u i , j 1) / 4;
u i 0  f 3 ( xi );
u im  f 4 ( xi );
u 0 j  f 1 ( y j );
(7.10)
u nj  f 2 ( y j ).
Получаем систему (7.10) линейных алгебраических уравнений, которые можно
решить любым итерационным методом (Зейделя, простых итераций и т.д.). При этом
построении системы использовалась схема типа “крест”(рисунок 12). Строим
последовательность итераций по методу Гаусса-Зейделя
1 ) 1
1 )
(s)
(s)
(s1 )
 ( u(s
u(s
i,j
i 1,j  ui 1,j  ui,j 1  ui,j 1 ) ,
4
где s-текущая итерация.
Условие окончания итерационного процесса
max u ij( S 1)  u ij( S )   .
i, j
(7.11)
Условие (7.11) ненадежно и на практике используют другой критерий
max u ij( S 1)  u ij( S )   (1  v),
i,j
где
v
max u ij( S 1)  u ij( S )
max u ij( S )  u ij( S 1)
.
Схема “крест “- явная устойчивая схема ( малое изменение входных данных
ведет к малому изменению выходных данных).
76
7.3 Решение смешанной задачи для уравнения гиперболического
методом сеток
типа
Рассмотрим уравнение колебания однородной и ограниченной струны.
Задача состоит в отыскании функции u(x,t) при t>0, удовлетворяющей уравнению
гиперболического типа
2 u
2 u
C
,
 t2
 x2
(7.12)
где: 0<x< a; 0<t<T,
начальным условиям
u(x,0 )  f(x);
u
(x,0 )  g(x);
t
(7.13)
0xa
и краевым условиям
u 0 ,t)  μ1 (t);
u(a,t)  μ 2 (t);
0  t  T.
(7.14)
Заменим С на сt и получим уравнение
 2u
t 2

 2u
x 2
и в дальнейшем будем считать С=1.
Для построения разностной схемы решение задачи (7.12)-(7.14) построим в
области D  ( x, t ),0  x  a,0  t  T  сетку x i  ih ; i=0,1,…,n; a  h  n ; t j  j ;
j=0,1,…,m; m=T.
Аппроксимируем (7.12) разностными производными второго порядка точности
относительно шага
u i,j 1  2  u i,j  u i,j 1
τ
2

u i 1,j  2  u i,j  u i 1,j
h
2
.
(7.15
)
Полагая =/h перепишем (7.15), выразив Ui,j+1. Таким образом получим
трехслойную разностную схему
ui,j 1  λ2 ( ui 1,j  ui 1,j )  2  ( 1  λ2 )  ui,j  ui,j 1 ,
(7.16
)
77
где: i=1,…,n; j=1,…,m. Задаем нулевые граничные условия 1(t)=0,
(7.16) uoj  0 , u nj  0 для всех j.
2(t)=0. Тогда в
Схема (7.16) называется трехслойной, т.к. она связывает значения искомой
функции на трех временных слоях j-1, j, j+1.
Численное решение задачи состоит в вычислении приближенных значений u ij
решения u(x,t) в узлах ( xi , t j ) при i=1,…,n; j=1,…,m. Алгоритм решения основан на том,
что решение на каждом следующем слое (j=2,3,..,n) можно получить пересчетом решений
с двух предыдущих слоев (j=0,1,..,n-1) по формуле (7.16). При j=0 решение известно из
начального условия u i 0  f ( x i ) . Для вычисления решения на первом слое (j=1)
положим
u
u ( x, )  u ( x,0)
(x,0 ) 
,
t
τ
(7.17
)
тогда u i1  u i 0  g ( x i ) , i=1,2,…,n. Теперь для вычисления решений на следующих
слоях можно использовать формулу (7.16).
Описанная схема аппроксимирует задачу (7.12)-(7.14) с точностью O(+h).
Невысокий порядок аппроксимации по  объясняется грубостью аппроксимации по
формуле (7.17).
Схема будет устойчивой, если выполнено условие   h .
78
Лабораторная работа № 1
Решение систем линейных алгебраических уравнений
Точные методы
Метод Гаусса
Входные параметры: n—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий матрицу коэффициентов системы
(а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n
действительных чисел, содержащий столбец свободных членов системы (b(1) = b1,
b(2)=b2,…b(n)=bn).
Выходные параметры: b—массив из n действительных чисел (он же входной); при
выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; error—
признак правильности решения (код ошибки): если ks = 0, то в массиве b содержится
решение системы, если error= 1, исходная система не имеет единственного решения
(определитель системы равен нулю).
Перед обращением к подпрограмме SIMQ необходимо:
1) описать массивы а и b. Если система содержит n уравнений, то массив а должен
содержать n2 элементов, а массив b – n элементов;
2) присвоить
значение
параметру
n,
который
равен
числу
уравнений системы;
3) присвоить элементам массивов а и b значения коэффициентов
системы
следующим образом: a(l) = a11, а(2) = а21, а(3) = а31,…а(n) = аn1 а(n+1) = а12, а(n+2) =
а22… а(n x n) = аnn. b(1) = b1, b(2)=b2,…b(n)=bn
4) проверить соответствие фактических параметров по типу и порядку следования
формальным параметрам подпрограммы SIMQ. Параметры а и b
- величины
вещественного типа, n и error - целого типа.
Задание. Используя программу SIMQ, решить заданную систему трех линейных
уравнений. Схема алгоритма приведена на рисунке 13.
Порядок выполнения лабораторной работы:
1. Составить головную программу, содержащую обращение к SIMQ и печать
результатов;
2. Произвести вычисления на ЭВМ.
Пример. Решить систему уравнений
 x 1  x 2  x3  6

 x1  x3  2
 x 2 x  x  8
2
3
 1
79
Procedure
SIMQ(Nn:integer;
var Aa:Tmatr:var
Bb:TVector;var
Ks:integer);
A
I
I>Nn
J
I>Nn+1
Aa[i,Nn+1]=Bb[i]
Aa[i,j]=Aa[i,j] /V
I=I+1
I
J=J+1
J
I
I>Nn
L
J>Nn
max=abs(aa[i,i])
V=Aa[i,i]
k1=I
J
I>Nn+1
L
J>Nn
Aa[l,j]=Aa[l,j]-Aa[i,j]*V
abs(aa[l,i])>max
+
J=I+1
J
max=abs(aa[l,i])
K1=L
L=L+1
L
L=L+1
L
I=I+1
I
Max<eps
Bb[nn]=Aa[Nn,Nn+1]
+
-
I
I<Nn-1
KS=0
KS=1
Bb[i]=Aa[i,Nn+1]
K1<>I
+
J
I>Nn+1
U=Aa[i,j]
Aa[i,j]=Aa[k1,j]
Aa[k1,j]=U
J
I>Nn+1
Bb[i]=Bb[i]-Aa[i,j]*Bb[j]
J=I+1
J
J=J+1
J
I=Nn-1
I
V=Aa[i,i]
M1
Возв рат
A
Рисунок 13 – Схема алгоритма метода Гаусса
80
Текст программы:
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;
I
f(Max<Eps) Then Begin Ks:=1; Goto M1;
End Else Ks:=0;
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 {все последующие строки после строки с максимальным
элементом}{при I=1: L=2 (2,2),(2,3)..(2,Nn+1)
L=3 (3,2),(3,3),..(3,Nn+1)
L=Nn (Nn,2), (Nn,3),.. (Nn,Nn+1)}
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]; {находим n-ый элемент решения}
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)= .100000E+01 Х(2)= .200000Е+01 Х(3)= .З00000Е + 01
признак выхода 0
Варианты заданий для решения систем линейных алгебраических уравнений
методом Гаусса приведены в таблице 1.
Метод квадратных корней Холецкого
Входные параметры: n—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий матрицу коэффициентов системы
(а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n
81
действительных чисел, содержащий столбец свободных членов системы (b(1) = b1,
b(2)=b2,…b(n)=bn).
Выходные параметры: b—массив из n действительных чисел (он же входной); при
выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p—
количество операций.
Схема алгоритма приведена на рисунке 14.
Пример. Решить систему уравнений
 x 1  x 2  x3  6

 x1  x3  2
 x 2 x  x  8
2
3
 1
Текст программы:
Procedure Holets(n:integer;a:TMatr;b:TVector;var x:TVector;var p:integer);
Var i,j,k:integer; a11:real;
Begin
Out_Slau_T(n,a,b);
For i:=1 To n Do Begin
If i<>1 Then Begin
If a[i,i]=0 Then Begin
p:=0; error:=2; MessageDlg('!!!!',mtError,[mbOk],0);
Exit;
End;
a[1,i]:=a[1,i]/a[1,1];
End;
For j:=1 To i Do Begin
For k:=1 To j-1 Do Begin
a[i,j]:=a[i,j]-a[i,k]*a[k,j];
End;
For i:=1 To n Do Begin
For j:=1 To i-1 Do b[i]:=b[i]-a[i,j]*b[j];
If a[i,i]=0 Then Begin
p:=0; error:=2; MessageDlg('!!!!',mtError,[mbOk],0);
Exit;
End;
b[i]:=b[i]/a[i,i];
End;
For i:=n DownTo 1 Do Begin
For j:=n DownTo i+1 Do b[i]:=b[i]-a[i,j]*b[j];
End;
x:=b;
p:=2*n*n;
End;
Вычисления по программе привели к следующим результатам:
X(1)= .100000E+01 Х(2)= .200000Е+01 Х(3)= .З00000Е + 01
82
procedure
Xolets(n:integer;a:tmatr;b:t
Vector;;var x:tvector;var
p:integer)
A
J
J>I-1
Out_Slau_T(n,a,b)
b[i]=b[i]-a[i,j]*b[j]
I
I>N
i<>1
J=J+1
J
+
a[i,i]=0
+
a[1,i]=a[1,i] / a[1,1]
p=0
I=I+1
I
Возв рат
b[i]=b[i]/ a[i,i]
p=0
I=I+1
I
Возв рат
J
J<I+1
K
K>J-1
b[i]=b[i]-a[i,j]*b[j]
a[i,j]=a[i,j]-a[i,k]*a[k,i]
J=J-1
J
+
a[,j,i]=a[j,i]-a[j,k]*a[k,i]
K=K+1
K
j>1and j<i
+
I
I<1
J
J>I
j<>i
a[i,i]=0
J=J-1
I
x=b
+
p=2*n*n
a[i,i]=0
a[j,i]=a[j,i] / a[j,j]
p=0
J=J+1
J
Возв рат
Возв рат
I
I>N
A
Рисунок 14 - Схема алгоритма метода Холецкого
Тема лабораторной работы №1 для контроля знаний проиллюстрирована
контрольно – обучающей программой.
83
Варианты заданий. Решить систему линейных уравнений вида Ах=b
Таблица 1
Матрица А
коэффициентов системы
Номер варианта
1
2
1
2
3
4
5
6
7
8
9
10
11
12
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,69
2,73
Продолжение таблицы 1
84
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,47
2,39
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
2,07
1,92
Столбец
свободных
членов 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
19,37
19,43
2
1
13
14
15
16
17
18
19
20
21
22
23
24
25
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
3,74
4,02
4,18
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
3,36
3,51
3,61
3
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
2,94
3,04
3,09
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
63,26
67,51
70,03
Продолжение таблицы 1
85
1
26
27
28
29
30
86
2
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
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
3
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
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
Лабораторная работа №2
Решение систем линейных алгебраических уравнений
Приближенные методы
Метод Якоби
Входные параметры: n—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий матрицу коэффициентов системы
(а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а (nn) = аnn); b — массив из n
действительных чисел, содержащий столбец свободных членов системы (b(1) = b1,
b(2)=b2,…b(n)=bn), eps – малое число для условия окончания итерационного процесса.
Выходные параметры: b—массив из n действительных чисел (он же входной); при
выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p—
количество итераций.
Схема алгоритма приведена на рисунке 15.
Пример. Решить систему уравнений с погрешностью ε=0,01
100 x1 6 x2  2 x3  200

6 x1  200 x2  10 x3  600
 x 2 x  100 x  500.
2
3
 1
Текст программы:
Procedure Jackoby(n:integer;a:tmatr;b:tvector;Eps:real;var x:tvector;var p:integer);
Var i,j:integer;
x0:tvector;
e,d,d1,d2,s:real;
procedure Vector;
{рассчитывает очередное приближение x0 через предыдущее х}]
var i,j:integer;
begin
for i:=1 to n do
begin x0[i]:=b[i];
for j:=1 to n do if j<>i then x0[i]:=x0[i]+a[i,j]*x[j];
end;
end;
function Normlm(x:Tvector):real; {рассчет нормы вектора как максимального по модулю
элемента вектора}
var y:real; i,j:integer;
begin
y:=abs(x[1]); for i:=1 to n do if abs(x[i])>y then y:=abs(x[i]);
normlm:=y;
end;
procedure OutVec;
var i:integer;
begin
for i:=1 to n do writeln(x0[i]);
end;
{ Jackoby}
87
Begin
error:=0;
Out_Slau_T(n,a,b);
for i:=1 to n do
if a[i,i]=0 then
begin
MessageDlg('!!!!',mtError,[mbOk],0);
error:=1; exit;
end;
d2:=0;
for i:=1 to n do
{рассчет норм d и d2}
begin
s:=a[i,i]; a[i,i]:=0;x0[i]:=0;b[i]:=b[i]/s; x[i]:=b[i];
for j:=1 to n do if j<>i then
begin
a[i,j]:=-a[i,j]/s; x0[i]:=x0[i]+abs(a[i,j]); d2:=d2+abs(a[i,j])*abs(a[i,j]);
end;
end;
d2:=sqrt(d2);
Out_Slau_T(n,a,b);
d:=Normlm(x0);
for i:=1 to n do{рассчет нормы d1}
begin
x0[i]:=0; for j:=1 to n do if j<>i then x0[i]:=x0[i]+abs(a[j,i]);
end;
d1:=normlm(x0);
if d1<d then d:=d1;
{поиск наименьшей нормы}
if d2<d then d:=d2;
if d>=1 then {проверка достаточного условия}
begin writeln(‘достаточное условие не выполнено’); readln; exit; end;
s:=d/(1-d);
p:=0; {подсчет итераций}
repeat
p:=p+1; vector; { x0=b+Ax}
for i:=1 to n do x[i]:=x0[i]-x[i];
d:=normlm(x);
outvec;{вывод вектора x0}
for i:=1 to n do x[i]:=x0[i];
until d*s<eps;
End;
Вычисления по программе привели к следующим результатам:
X1=1,907
X2=3,1884
X3=4,917
Количество итераций:2
88
procedure
Jakoby(n:integer;a:tmatr;b
:tVector;eps;real;var
x:tvector;var p:integer)
A
B
x0[i]=0
I=I+1
I
J
J>N
d=Normlm(x)
Out_Slau_T(n,a,b)
I
I>N
a[i,i]=0
+
j<>i
+
Outvec
x0[i]=x0[i]+abs(a[i,j])
Возв рат
I
I>N
J=J+1
J
x[i]=x0[i]
I=I+1
I
I=I+1
I
d1=Normlm(x0)
D*S<eps
P
I=I+1
I
d2=0
I
I>N
d1<d
+
s=a[i,i]
a[i,i]=0
b[i]=b[i]/ s
x[i]=b[i]
d=d1
J
J>N
j<>i
Возв рат
d2<d
+
d=d2
+
a[i,j]=-a[i,j]/ s
x0[i]=x0[i]+abs(a[i,j])
d2=d2+abs(a[i,j]*
abs(a[i,j]))
d>=1
+
Возв рат
J=J+1
J
s=d/ (1-d)
I=I+1
I
p=o
d2=sqrt(d2)
P
P=P+1
Out_Slau_T(n,a,b)
Vector
d=Normlm(x0)
I
I>N
I
I>N
x[i]=x0[i]-x[i]
A
B
Рисунок 15 - Схема алгоритма метода Якоби
89
Варианты заданий для решения систем линейных алгебраических уравнений
методом Якоби приведены в таблице 2.
Метод верхней релаксации
Входные параметры: n—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий матрицу коэффициентов системы
(а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n
действительных чисел, содержащий столбец свободных членов системы (b(1) = b1,
b(2)=b2,…b(n)=bn); eps – малое число для условия окончания итерационного процесса.
Выходные параметры: b—массив из n действительных чисел (он же входной); при
выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p—
количество итераций.
Схема алгоритма приведена на рисунке 16.
Пример. Решить систему уравнений методом релаксации с погрешностью ε=0,01 и
параметром релаксации w=1,8
100 x1 6 x2  2 x3  200

6 x1  200 x2  10 x3  600
 x 2 x  100 x  500.
2
3
 1
Текст программы:
Procedure Relax(n:integer;a:tmatr;b:tvector;Eps,w:real;var x:tvector;var p:integer);
Var i,j:integer; x0:tvector; e:real;
Begin
Out_Slau_T(n,a,b);For i:=1 To n Do x0[i]:=x[i];p:=0;
Repeat
For i:=1 To n Do Begin
If a[i,i]=0 Then Begin
p:=0;
MessageDlg('!!!!',mtError,[mbOk],0);
error:=2;
Exit;
End;
x[i]:=w*b[i]/a[i,i];
For j:=1 To i-1 Do x[i]:=(1-w)*x[i]-w*a[i,j]*x[j]/a[i,i];
For j:=i+1 To n Do x[i]:=(1-w)*x[i]-w*a[i,j]*x0[j]/a[i,i];
End;e:=0;
For i:=1 To n Do Begin
If e<Abs(x[i]-x0[i]) Then e:=Abs(x[i]-x0[i]);
x0[i]:=x[i];End;p:=p+1;
Until e<=Eps;End;
Вычисления по программе привели к следующим результатам:
X1=2,860
X2=4,088
X3=5,654
Количество итераций:3
90
procedure
relax(n:integer;a:tmatr;b:t
Vector;eps,w :real;var
x:tvector;var p:integer)
A
I
I>N
Out_Slau_T(n,a,b)
I
I>N
e<abs(x[i]-x0[i])
X[0]=X[i]
x0[i]=x[i]
+
e=abs(x[i]-x0[i])
I=I+1
I
I=I+1
I
p=0
p=p+1
P
P=P+1
E<=EPS
P
I
I=I+1
Возв рат
a[i,i]=0
+
p=0
x[i]=w *b[i] / a[i]
Возв рат
J
J>I-1
X[i]=(1-w )*X[i]-w *a[i,j]*x[j] /
a[i,i]
J=J+1
J
J
J>N
X[i]=(1-w )*X[i]-w *a[i,j]*
x0[j] / a[i,i]
J=J+1
J
I=I+1
I
e=0
A
Рисунок 16 - Схема алгоритма метода релаксации
Варианты заданий для решения систем линейных алгебраических уравнений
методом верхней релаксации приведены в таблице 2.
Метод Зейделя
91
Входные параметры: n—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий матрицу коэффициентов системы
(а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n
действительных чисел, содержащий столбец свободных членов системы (b(1) = b1,
b(2)=b2,…b(n)=bn); eps – малое число для условия окончания итерационного процесса.
Выходные параметры: b—массив из n действительных чисел (он же входной); при
выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p—
количество итераций.
Схема алгоритма приведена на рисунке 17.
Пример. Решить систему уравнений с погрешностью ε=0,01
100 x1 6 x 2  2 x3  200

6 x1  200 x 2  10 x3  600
 x 2 x  100 x  500.
2
3
 1
Текст программы:
Procedure Zeidel(n:integer;a:tmatr;b:tvector;Eps:real;var x:tvector;var p:integer);
Var i,j:integer;
x0:tvector;
e:real;
Begin
Out_Slau_T(n,a,b);
For i:=1 To n Do x0[i]:=x[i];
p:=0;
Repeat
For i:=1 To n Do Begin
If a[i,i]=0 Then Begin
p:=0;
MessageDlg('!!!!',mtError,[mbOk],0);
error:=2;
Exit;
End;
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 e<Abs(x[i]-x0[i]) Then e:=Abs(x[i]-x0[i]);
x0[i]:=x[i];
End;
p:=p+1;Until e<=Eps;End;
92
procedure
Zeidel(n:integer;a:tmatr;b:t
Vector;eps:real;var
x:tvector;var p:integer)
A
Out_Slau_T(n,a,b)
I
I>N
I
I>N
e<abs(x[i]-x0[i])
e=abs(x[i]-x0[i])
X[0]=X[i]
x0[i]=x[i]
I=I+1
I
p=0
I=I+1
I
P
e<=eps
p=p+1
I
I>N
P
Возв рат
a[i,i]=0
p=0
x[i]=w *b[i] / a[i,i]
Возв рат
J
J>I-1
X[i]=X[i]-a[i,j]*x[j] /
a[i,i]
J=J+1
J
J
J>N
X[i]=X[i]-a[i,j]*
x0[j] / a[i,i]
J=J+1
J
I=I+1
I
e=0
A
Рисунок 17- Схема алгоритма метода Зейделя
Вычисления по программе привели к следующим результатам:
93
X1=1,907
X2=3,188
X3=4,917
Количество итераций:3
Тема лабораторной работы №2 для контроля знаний проиллюстрирована
контрольно – обучающей программой.
Варианты заданий
Таблица 2
Номер варианта
1
1
Матрица системы
.4000
-.0029
-.0055
-.0082
.0003
-.5000
-.0050
-.0076
2
.0008
-.0018
-1.4000
-.0070
2
1.7000
.0000
-.0003
-.0005
.0003
.8000
- .0002
-.0004
.0004
.0001
-.1000
-.0003
.0005
.0002
.0000
-1.0000
.6810
.4803
-.0802
-1.0007
3
3.0000
.0011
-.0005
-.0022
.0038
2.1000
.0005
-.0011
.0049
.0032
1.200C
-.0001
.0059
.0043
.0026
.3000
1.5136
1.4782
1.0830
.3280
4
4.3000
.0100
.0037
- .0027
.0217
3.4000
.0090
.0027
.0270
.0207
2.5000
.0080
.0324
.0260
.0197
1.6000
2.6632
2.7779
2.5330
1.9285
5
5.6000
.0147
.0087
.0028
.0268
4.7000
.0150
.0090
.0331
.0271
3.8000
.0153
.0393
.0334
.0274
2.9000
4.0316
4.3135
4.2353
3.7969
6
6.9000
.0191
.0134
.0077
.0319
6.0000
.0205
.0149
.0390
.0333
5.1000
.0220
.0461
.0405
.0348
4.2000
5.6632
6.1119
6.2000
5.9275
7
8.2000
.0234
.0179
.0124
.0370
7.3000
.0260
.0205
.0451
.0396
6.4000
.0286
.0532
.0477
.0422
5.5000
7.5591
8.1741
8.4281
8.3210
Продолжение таблицы 2
1
94
Правая часть
2
3
.0014
-.0012
- .0039
-2.3000
.1220
-.2532
- .9876
-2.0812
3
8
9.5000
.0278
.0224
.0170
.0422
8.6000
.0315
.0261
.0513
.0459
7.7000
.0351
.0604
.0550
.0496
6.8000
9.7191
10.5000
10.9195
10.9775
9
10.8000
.0321
.0268
.0215
.0475
9.9000
.0369
.0316
.0576
.0523
9.0000
.0416
.0676
.0623
.0570
8.1000
12.1430
13.0897
13.6744
13.8972
10
12.1000
.0365
.0312
.0260
.0528
11.2000
.0423
.0370
.0639
.0586
10.3000
.0481
.0749
.0697
.0644
9.4000
14.8310
15.9430
16.6926
17.0800
11
13.4000
.0408
.0356
.0304
.0581
12.5000
.0477
.0425
.0702
.0650
11.6000
.0546
.0822
.0770
.0718
10.7000
17.7828
19.0599
19.9744
20.5261
12
14.7000
.0452
.0400
.0349
.0635
13.8000
.0531
.0479
.0765
.0714
12.9000
.0610
.0896
.0844
.0793
12.0000
20.9985
22.4406
23.5195
24.2353
13
16.0000
.0496
.0444
.0393
.0688
15.1000
.0585
.0534
.0829
.0777
14.2000
.0674
.0970
.0918
.0867
13.3000
24.4781
26.0849
27.3281
28.2078
14
17.3000
.0539
.0488
.0437
.0741
16.4000
.0639
.0588
.0892
.0841
15.5000
.0739
.1043
.0992
.0941
14.6000
28.2215
29.9928
31.4001
32.4435
15
23.8000
.0757
.0707
.0656
.1010
22.9000
.0909
.0858
.1212
.1161
22.0000
.1060
.1414
.1363
.1313
1.1000
50.8968
53.4873
55.7118
57.5703
16
19.9000
.0626
.0576
.0525
.0849
19.0000
.0747
.0696
.1020
.0969
18.1000
.0867
.1191
.1140
.1090
17.200
36.5001
38.5997
40.3345
41.7045
17
21.2000
.0670
.0619
.0569
.0902
20.3000
.0801
.0750
.1084
.1033
19.4000
.0932
.1265
.1215
.1164
18.5000
41.0351
41.2986
45.1968
46.7299
.0956
21.6000
.0855
.0804
2
.1148
.1097
20.7000
.0996
.1339
.1289
.1238
19.8000
3
45.8340
48.2611
50.3226
52.0184
Продолжение таблицы 2
1
18
22.5000
.0714
.0663
.0612
95
19
23.8000
.0757
.0707
.0656
.1010
22.9000
.0909
.0858
.1212
.1161
22.0000
.1060
.1414
.1363
.1313
21.1000
50.8968
53.4873
55.7118
57.5703
20
25.1000
.0801
.0750
.0700
.1063
24.2000
.0963
.0912
.1276
.1225
23.3000
.1124
.1488
.1437
.1387
22.4000
56.2234
58.9772
61.3645
63.3853
21
26.4000
.0844
.0794
.0744
.1117
25.5000
.1017
.0966
.1339
.1289
24.6000
.1189
.1562
.1512
.1461
23.7000
61.8139
64.7307
67.2806
69.4636
22
27.7000
.0888
.0838
.0788
.1171
26.8000
.1070
.1020
.1403
.1353
25.9000
.1253
.1636
.1586
.1536
25.0000
67.6682
70.7478
73.4601
75.8051
23
29.0000
.0932
.0882
.0831
.1225
28.1000
.1124
.1074
.1467
.1417
27.2000
.1317
.1710
.1660
.1610
26.3000
73.7864
77.0286
79.9030
82.4098
24
30.3000
.0975
.0925
.0875
.1278
29.4000
.1178
.1128
.1531
.1481
28.5000
.1381
.1784
.1734
.1684
27.6000
80.1684
83.5730
86.6095
89.2778
25
31.6000
.1019
.0969
.0919
.1332
30.7000
.1232
.1182
.1595
.1545
29.8000
.1445
.1859
.1809
.1759
28.9000
86.8143
90.3811
93.5793
96.4090
26
32.9000
.1062
.1013
.0963
.1386
32.0000
.1286
..1236
.1659
.1610
31.1000
.1510
.1933
.1883
.1833
30.2000
93.7240
97.4528
100.8126
103.8034
27
34.2000
.1106
.1056
.1006
.1400
33.3000
.1340
.1290
.1724
.1674
32.4000
.1574
.2007
.1957
.1907
31.5000
100.8.976
104.7881
108.3093
111.4610
.1494
34.6000
.1394
.1344
2
.1788
.1738
33.7000
.1638
.2082
.2032
.1982
32.8000
3
108.3351
112.3871
116.0694
119.3819
.1547
35.9000
.1448
.1398
.1852
.1802
35.0000
.1702
.2156
.2106
.2056
31.1000
116.0363
120.2497
124.0930
127.5660
Продолжение таблицы 2
1
28
35.5000
.1150
.1100
.1050
29
96
36.8000
.1193
.1143
.1094
30
38.1000
.1237
.1187
.1137
.1601
37.2000
.1502
.1452
.1916
.1866
36.3000
.1766
.2230
.2180
.2131
35.4000
124.0015
128.3760
132.3800
136.0134
97
Лабораторная работа № 3
Решение плохо обусловленных систем линейных алгебраических уравнений
Метод регуляризации
Входные параметры: n—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий матрицу коэффициентов системы;
b — массив из n действительных чисел, содержащий столбец свободных членов системы
(b(1) = b1, b(2)=b2,…b(n)=bn).
Выходные параметры: х – решение системы ; p—количество итераций.
Схема алгоритма приведена на рисунке 18.
Пример. Решить систему уравнений
1.03x 1  0.991x 2  2.51

0.991x 1  0.943x 2  2.41
Текст программы:
procedure regul(N:Integer;a:Tmatr;b:Tvector;var X:Tvector; var p:integer);
var a1,a2:tmatr; b1,b2,x0:tvector; alfa,s1,s:real; max,eps:real; i,j,k,l:integer;
begin
eps:=0.01;
Out_Slau_T(n,a,b);
For I:=1 To n Do {получение АТА}
Begin
For K:=1 To N Do
Begin S:=0.0;
For J:=1 To N Do S:=S+A[j,i]*A[j,k];
A1[i,k]:=S;
End;
End;
For I:=1 To N Do {получение АТВ}
Begin S:=0.0;
For J:=1 To N Do
Begin S:=S+A[j,i]*B[j];
End; b1[i]:=S;
End;
alfa:=0; {нач-ое знач-е альфа}
k:=0; {кол-во итераций}
repeat
alfa:=alfa+0.01; inc(k); a2:=a1;
for i:=1 to N do a2[i,i]:=a1[i,i]+alfa; {получение АТА+alfa}
for i:=1 to N do b2[i]:=b1[i]+alfa*x0[i]; {получение АТВ+alfa}
a1:=a2; b1:=b2;
SIMQ(n,a2,b2,l);
a2:=a1; X:=b2; x0:=X; b2:=b1;
vozm(N,eps,a2,b2);
simq(n,a2,b2,l);
max:=abs(b2[1]-X[1]);
for i:=2 to n do
if abs(b2[i]-X[i])>max then max:=abs(b2[i]-X[i]);
98
until max<eps;
p:=k;
end;
Вычисления по программе привели к следующим результатам:
X1 = 1.981
X2 = 0.4735
99
procedure
regul(N:integer;a:Tmatr:b:
Tvector:var X:tvector:var
p:integer);
eps=0.01
Out_Slau_T(n,a,b)
I
I>N
K
K>N
S=0.0
J
J>N
A
B
K
K=K+1
I
I>N
alf a=alf a+0.01:
inc(k);
a2=a1'
abs(b2[i]-x[i])>max
+
max=abs(b2[i]-x[i])
I
I>N
a2[i,i]=a1[i,i]+alf a
I=I+1
I
I=I+1
I
MAX<EPS
K
I
I>N
p=k
b2[i]=b1[i]+alf a*x0[i]
Возв рат
S=S+A[i,j]*A[j,k]
J=J+1
J
A1[i,k]=S
K=K+1
K
I=I+1
I
I
I>N
I=I+1
I
a1=a2;
b1=b2
SIMQ(n,a2,b2,1)
a=a1;
X=b2;
x0=X;
b2=b1;
VOZM(N,eps,a2,b2)
S=0.0
J
J>N
SIMQ(n,a2,b2,1)
max=abs(b2[1]-x[1])
S=S+A[j,i]*B[j]
J=J+1
J
B
B1[i]=S
I=I+1
I
alf a=0;
k=0;
A
Рисунок 18 - Схема алгоритма метода регуляризации
100
Варианты заданий для решения
регуляризации приведены в таблице 3.
плохо
обусловленных
систем
методом
Метод вращения (Гивенса)
Схема алгоритма приведена на рисунке 19.
Пример. Решить систему уравнений
1.03x 1  0.991x 2  2.51

0.991x 1  0.943x 2  2.41
Текст программы:
PROCEDURE Vrash;
Var I,J,K: Integer; M,L,R : Real; F1:TEXT; Label M1,M2;
Begin
Out_Slau_T(nn,aa,b);
for i:=1 to Nn do
aa[i,0]:=b[i];
M:=0.0;
For I:=1 To Nn-1 Do Begin
For K:=I+1 To Nn Do Begin
If (Aa[i,i]<>0.0) Then Goto M1;If (Aa[k,i]<>0.0) Then Goto M1;
M:=1.0;L:=0.0;
Goto M2;
1: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;
M2: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];
End;
Aa[0,i]:=(Aa[i,0]-M)/Aa[i,i];
End;
for i:=1 to Nn do x[i]:=Aa[0,i];End;
Вычисления по программе привели к следующим результатам:
X1 = 1.981
X2 = 0.4735
101
procedure Vrash;
A
Out_Slau_T(nn,aa,b)
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>Nn
K=K+1
K
aa[i,0]=b[i]
I=I+1
I
I=I+1
I
I
I>Nn
M=0.0
M=0.0
I
I>Nn-1
K
K>Nn-1
K
K>Nn
Aa[i,i]<>0.0
+
M=M+Aa[0,nn-k]*
Aa[i,nn-k]
AA[k,i]<>0.0
+
K=K+1
K
M=1.0;
L=0.0
Aa[0,i]=(Aa[i,0]-M) / Aa[i,i]
I=I+1
I
M1
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
M2
I
I>Nn
x[i]=Aa[0,i]
I=I+1
I
J
J>Nn
Возв рат
R=M*Aa[i,j]-L*Aa[k,j];
Aa[k,j]=L*Aa[i,j]+M*Aa[k,j];
Aa[i,j]=R;
J=J+1
J
A
Рисунок 19 - Схема алгоритма метода Гивенса (вращения)
102
Варианты заданий
Таблица 3
№
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Матрица 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
Тема лабораторной работы №3 для контроля знаний проиллюстрирована
контрольно – обучающей программой.
103
Лабораторная работа № 4
Решение нелинейных уравнений и систем нелинейных уравнений
Метод простых итераций
Порядок выполнения лабораторной работы:
1. Найти нулевое приближение решения;
2. Преобразовать систему f(x) = 0 к виду х = Ф(х);
3. Проверить условие сходимости метода.
Схема алгоритма приведена на рисунке 20.
Пример. Решить методом простых итераций систему
ln( y / z )  1  x  0

 2
2
10 z  10 y  20 x  4  0

xy  20 z  40  0

В качестве нулевого приближения выберем точку х=1, у = 2.2, z = 2. Преобразуем
систему к виду
 x  ln( y / z )  1

2
2
 y  0,4  z  2 x
 z  2  0,05 xy

Текст программы:
PROCEDURE Iteraz;
Var I,J,K,J1 : Integer;
S,U,U1 : Real;
X2,X3,Eps : Real;
R
: tvector;
Begin
Eps:=0.01; X2:=0.0; K:=1;
Repeat
For J:=1 To Nn Do Begin
S:=0.0;
For I:=1 To Nn Do Begin S:=S+Aa[i,j]*Xx[i]; End;
R[j]:=S;
End;
For J1:=1 To Nn Do Begin Xx[j1]:=R[j1]; End; X3:=Xx[1];
For I:=1 To Nn Do Begin If (Xx[i]>=X3) Then X3:=Xx[i]; Еnd;
For I:=1 To Nn Do Begin Xx[i]:=Xx[i]/X3; End;
X1:=X3; U:=Abs(X2-X1); U1:=U/Abs(X1);
If (U1>=Eps) Then X2:=X1;
K:=K+1;
Until ((K>=50)or(U1<=1e-4)) End;
Вычисления по программе привели к следующим результатам:
X(1)= 1.1132
Х(2)= 2.3718 Х(3)= 2.1365
Количество итераций:5
104
procedure Iteraz
A
eps=0.01
x2=0.0
k=1
I
I>Nn
Xx[i]=XX[i]/3
K
I=I+1
I
J
I>Nn
S=0.0
I
I>Nn
X1=X3
U=Abs(x2-X1)
U1=U/abs(X1)
U1>=eps
X2=X1
S=S+aa[i,j]*Xx[i]
I=I+1
I
K=K+1
R[j]=s
K>=50 orU1<=1e-4
K
J=J+1
J
Возв рат
J1
I>Nn
Xx[j1]=R[j1]
J1=J1+1
J1
x3=Xx[1]
I
I>Nn
Xx[i]>x3
X3=Xx[i]
I=I+1
I
A
Рисунок 20 - Схема алгоритма метода простых итераций
105
Метод Ньютона
Программу можно использовать для решения систем не выше десятого порядка.
Входные параметры: n — число уравнений системы (совпадает с числом
неизвестных), n10; х—массив из n действительных чисел, содержащий начальное
приближение решения; f— имя внешней процедуры f(n, х, у), вычисляющей по заданным
значениям х, расположенным в элементах массива х, текущие значения функции f и
размещающей их в элементах массива у; g — имя внешней процедуры g(n, x, d),
 f 
вычисляющей по заданным значениям х из массива х элементы матрицы   ,которая
 x 
размещается в массиве d размерности n x n; eps — значение условия окончания
итерационного процесса.
Выходные параметры: х — массив из n действительных чисел (он же входной)
содержит при выходе из подпрограммы приближенное значение решения; k—количество
итераций.
Порядок выполнения лабораторной работы:
1. Определить из геометрических соображений начальное приближение решения.
 f 
2. Составить подпрограммы f и g для вычисления значений f и   .
 x 
3. Составить головную программу, содержащую описание массива х, имен f и g,
присвоение фактических значений параметрам n, х, eps, обращение к ТNUTON и печать
результатов.
4. Провести вычисления на ЭВМ.
Схема алгоритма приведена на рисунке 21.
Пример. Решить систему уравнений
ln( y / z )  1  x  0

 2
2
10 z  10 y  20 x  4  0

xy  20 z  40  0

Текст программы:
procedure TNuton;
var a: T2DArray; i, j: byte; finish: boolean;
begin
IterCount:= 0;
SetLength(a, UrCount);
for i:= 0 to High(a) do SetLength(a[i], UrCount + 1);
repeat { Заполнение матрицы частных производных }
for i:= 0 to High(a) do begin
for j:= 0 to High(a[i])-1 do a[i, j]:= DerivativeFn(i, j, Results);
a[i, High(a[i])]:= -Poliz.ExternFn(i, Results);
end; { Решение полученной СЛАУ методом Гаусса }
SetLength(Gauss.Base, Length(a));
for i:= 0 to High(a) do begin
SetLength(Gauss.Base[i], Length(a[i]));
for j:= 0 to High(a[i]) do
Gauss.Base[i, j]:= a[i, j]; end; try
Gauss.Solve;
106
except
raise Exception.Create('Данную систему этим методом решить невозможно!');
end; { Получение очередного приближения решения СНАУ }
finish:= false;
for i:= 0 to High(Results) do begin
Results[i]:= Results[i] + Gauss.Results[i];
if not finish then finish:= (Abs(Gauss.Results[i]/Results[i]) > Eps);
end; inc(IterCount);
until not finish;
end;
В результате вычисления по программе получены следующие результаты:
X(1)= 1.1132 Х(2)= 2.3718
Количество итераций:4
Х(3)= 2.1365
107
TNuton.Solve
try gauss.Solve
Itercount=0
finish=false
SetLength(a,Urcou
nt)
I
I>high(a)
I
I>high(Results)
Results[i]=results[i]+ga
uss.Results[i]
SetLength(a,Urcou
nt+1)
not finish
I=I+1
I
Z
I
I>high(a)
J
I>high(a[i])-1
a[i,j]=derivativeFn(i,jres
ults)
finish=(Abs(Gauss.resul
ts[i]/results[i])>Extract
I=I+1
I
inc(itercount)
not finish
Z
Возв рат
J=J+1
J
a[i,high(a[i])]=-poliz.exte
rnfn(i,results)
I=I+1
I
SetLength(Gausse
.Base[i],Length
(a[i]))
I
I>high(a)
h=h/k
SetLength(Gausse
.Base[i],Length
(a[i]))
J
I>high(a[i])
Gauss.Base[i,j]=a[i,j]
J=J+1
J
I=I+1
I
Рисунок 21 - Схема алгоритма метода Ньютона
108
Варианты заданий
Таблица 4
sin(x  l) - y  1,2

1
 2x  cosy  2.
16
 sin x  2y  2

cos(y - l)  x  0,7
17
2
cos(x  0,5) - y  2
3 
Sin y2x  1
sin у+2х=2
4 cos(x-1)+y = 0,7
18
sin(x  0,5) - y  l

cos(y - 2)  x  0

sin x (x1)  1,3 - y

 x  sin  y  

sin(y+l)-x=l,2
2y+cos x = 2.
19
sin(y+0,5)-x=l
cos(x-2)+y =0
5
sin(y-l)+x=l,3
y-sin(x+l)=0,8
20
cos(y+0,5)-x = 2
sin x —2y= 1
6
sin(x+l)-y=l
2x+cos y = 2
21
Sin x+2y= 1,6
cos(y-1)+x=l
7
sin(x+0,5)-y=1,2
cos(y-2)+x = 0
22
Cos(x-l)+y = 0,5
x –cos y = 3
8
cos x+y= 1,5
2x-sin(y-0,5)=l
23
Cos (x+0,5)+у = 0,8
sin y — 2x=l,6
9
2y-cos(x+l)=0
x+sin y= -0,4
24
cos(y-l)+x=0,5
10 y-cos x = 3
26
2x-cos(y+l) = 0
y+sin x= -0,4
27
cos(x-l)+y=0,8
x—cos y=2
28
cos(x+0,5)+y=l
siny—2x=2
Sin(x-1)+y= 1,5
14 х - sin(y+ 1)= 1
29
sin(у+1)-х=1
2y+cos x = 2
Cos(y-l)+x=0,8
15 y-cos x=2.
30
cos(x-l)+y=l
sin y+2x= 1,6
11
cos(y+0,5) + x=0,8
sin x-2y=l,6
25
Sin(x  2) - y  l,5

x  cos(y - 2)  0,5
cos y+x=l,5
2y-sin(x-0,5)=l
sin(y + 2)-x=l,5
12 y+cos(x-2)=0,5.
13
Cos x+y= 1,2
2x-sin(y-0,5) = 2.
Тема лабораторной работы №4 для контроля знаний проиллюстрирована
контрольно – обучающей программой.
109
Лабораторная работа № 5
Решение проблемы собственных значений и собственных векторов
Точные методы
Метод Леверрье
Входные параметры: n—целое положительное число, равное порядку n системы;
Выходные параметры: b—массив из n действительных чисел, при выходе из
программы содержит решение системы.
Пример. Вычислить собственные значения и собственные вектора матрицы
|2 2
|2 5
|-2 –4
–2|
–4|
5|
Текст программы:
PROCEDURE Liver (Var VeS:Tvector;Nn:Integer);;
Label 35,270,220,100,80,190,500,250,350,120,10;
Var
I,J,K,T:Integer; Y,Yy:tvector; {A,Aa:Mas;}
S,C,Q,P,H,D,U,M,V,F,W,Yyy,Z,L,R,X,Aaa,B:Real;
Sq,Sq1: Real; F1: TEXT;
Begin
Assign(F1,'last.out');
Rewrite(F1);
For I:=Nn Downto 1 Do Y[i+1]:=VeS[i];
Y[1]:=1;
K:=1;
35: T:=1;
C:=Y[2]/Y[1];
If (Nn=1) Then Begin
P:=-C; Q:=0; Goto 270;
End;
If (Nn=2) Then Begin
H:=C*C/4-Y[3]/Y[1];
Goto 220;
End;
M:=10;C:=4;D:=8;U:=4;
V:=8;F:=1;W:=2;T:=0;
80: If(M<>10) Then Goto 100;
P:=C;M:=0;Q:=D;C:=U;D:=V;
U:=P;V:=Q;Yyy:=C;Z:=D;F:=-F;
100:M:=M+1;H:=0;Q:=Y[1];P:=Y[2]-C*Q;L:=Q;
120:For J:=3 To Nn Do Begin
R:=P;P:=Y[j]-C*R-D*Q;Q:=R;
R:=L;L:=Q-C*R-H*D;H:=R;
End;
Q:=Y[Nn+1]-D*Q;
S:=L+C*R;
If (T=0) Then Begin
X:=D*R;H:=R*X+S*L;
110
If H=0 Then Goto 80;
End;
C:=C+(P*S-Q*R)/H;
D:=D+(P*X+Q*L)/H;
If ((C-Yyy+D-Z)<>0) Then Goto 190;
If (F=-W) Then Begin writeln('Љ®аҐм Ґ ©¤Ґ');
Goto 500;
End;
W:=-F;
190:H:=C*C/4-D;
Sq:=Sqrt((Q-P*C/2)*(Q-P*C/2)+P*P*Abs(H));
If (Sq>0.0000001) Then Goto 80;
T:=0;
Y[2]:=Y[2]-C*Y[1];
For J:=3 To Nn-1 Do Begin
Y[j]:=Y[j]-C*Y[j-1]-D*Y[j-2];End;
220:P:=-C/2;
Q:=Sqrt(Abs(H));
If(h>=0) Then Begin
M:=P+Q;P:=P-Q;Q:=0;
Goto 250; End;
M:=P;
250:write(F1,'p',k,'=',m:9:4,' + i',q:7:4);K:=K+1;{Ves[k-1]:=M;}WriteLn(F1,'');
270:write(F1,'p',k,'=',p:9:4,' + i',-q:7:4);K:=K+1;{Ves[k-1]:=P;}WriteLn(F1,'');
If(t<>0) Then Goto 350;
Nn:=Nn-2;
Aaa:=0;
Sq1:=Sqrt((S-R*C/2)*(S-R*C/2)+R*R*Abs(H));
If (Sq1<=0.0000001) Then Aaa:=1;
B:=0;
If (Nn>=2) Then B:=1;
If((Aaa+B)=2) Then Begin
T:=1;
Goto 120; End; Goto 35;350:500:
Close(F1);
End;
Вычисления по программе привели к следующим результатам:
Собственные числа
Собственные вектора
.10000Е+01
-.94281Е+00 .23570Е+00 -.23570Е+00
.10000Е+02
-.33333Е+00 -.66667Е+00 .66667Е+00
.10000Е+01
.00000Е+00 -.70711Е+00 -.70711Е+00
Варианты заданий для нахождения собственных значений и собственных векторов
матрицы приведены в таблице 5.
Метод Фадеева
Входные параметры: n—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий входную матрицу.
Выходные параметры: q—массив из n действительных чисел при выходе из
программы содержит решение системы.
111
Схема алгоритма приведена на рисунке 23.
Пример. Вычислить собственные значения и собственные вектора матрицы
|2 2
|2 5
|-2 –4
–2|
–4|
5|
Текст программы:
procedure Fadeev(n:integer;a:tmatr;var q:tvector);
var Aa,E,B:tmatr;
i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do if i<>j then e[i,j]:=0 else e[i,j]:=1;
Aa:=a;
q[1]:=spA(n,Aa);
MulChislo(n,q[1],e,b);
MatrVich(n,Aa,b,b);
for i:=2 to n do
begin
MulMatr(n,a,b,Aa);
q[i]:=-spA(n,Aa)/i;
MulChislo(n,q[i],e,b);
MatrVich(n,Aa,b,b);
end;
end;
Вычисления по программе привели к следующим результатам:
Собственные числа
Собственные вектора
.10000Е+01
-.94281Е+00
.23570Е+00
-.23570Е+00
.10000Е+02
-.33333Е+00
-.66667Е+00
.66667Е+00
.10000Е+01
.00000Е+00
-.70711Е+00
-.70711Е+00
112
Procedure
Fadeev(n:integer;a:tmatr;
var q:tvector);
I
I>N
J
J>N
+
I<>J
-
e[i,j]=0
e[i,j]=1
J=J+1
J
I=I+1
I
Aa=a;
q[1]=spa(n,Aa)
Mulchislo(n,q[1],e,b)
Matrvich(n,aa,b,b)
I
I>N
MulMatr(n,a,b,Aa)
q[i]= - spa(n,Aa) / i
Mulchislo(n,q[i],e,b)
Matrvich(n,Aa,b,b)
I=I+1
I
Возв рат
Рисунок 23 - Схема алгоритма метода Фадеева
Варианты заданий для нахождения собственных значений и собственных векторов
матрицы приведены в таблице 5.
113
Метод Крылова
Входные параметры: n—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий входную матрицу.
Выходные параметры: q—массив из n действительных чисел при выходе из
программы содержит решение системы.
Схема алгоритма приведена на рисунке 24.
Пример. Вычислить собственные значения и собственные вектора матрицы
|2 2
|2 5
|-2 –4
–2|
–4|
5|
Текст программы:
PROCEDURE Krylov(Nn:integer; A: TMatr;Var Y:TVector);
Label 2;
Var I,J,K,T,Nn1 :Integer;
yy
:TVector ;
aa
:TMatr ;
s,c,q,p,h,d,u,
m,v,f,w,yyy,z,
l,r,x,aaa,b : Real ;
Begin
form3.Caption:='Крылов';
Nn1:=Nn;
For I:=1 To Nn Do Yy[i]:=I*Trunc(10*ranDom);
2:For I:=Nn Downto 1 Do Begin
Y:=Yy;
For J:=1 To Nn Do Aa[j,i]:=Yy[j];
For J:=1 To Nn Do Begin
S:=0;
For K:=1 To Nn Do S:=S+A[j,k]*Y[k];
Yy[j]:=S; End;
End;
For I:=1 To Nn Do Y[i]:=-Yy[i];
Simq(Nn1,Aa,Y,K);
If(K=1) Then Begin
For I:=1 To Nn Do Yy[i]:=I*I*trunc(7*ranDom);
Goto 2;
End;
End;
114
Procedure
Krilov(Nn:integer;
a:Tmatr:var y:TVect);
Nn1=Nn
I
I>Nn
Yy[i]=I*Trunc(10*
random)
I=I+1
I
I
I<1
A
I
I>Nn
Y[i]= -Yy[i]
I=I+1
I
Simq(Nn1,aa,y,K)
K=1
+
I
I>Nn
Y=Yy
Yy[i]=I*I*trunc(7*
random)
J
J>Nn
I=I+1
I
Aa[i,j]=Yy[i]
J=J+1
J
Возврат
J
J>Nn
s=0;
K
K>Nn
S=S+A[j,k]*Y[k]
K=K+1
K
Yy[j]=S
J=J+1
J
I=I+1
I
A
Рисунок 24 - Схема алгоритма метода Крылова
Вычисления по программе привели к следующим результатам:
Собственные числа
Собственные вектора
.10000Е+01
-.94281Е+00
.23570Е+00
-.23570Е+00
115
.10000Е+02
.10000Е+01
-.33333Е+00
-.66667Е+00
.00000Е+00
-.70711Е+00
.66667Е+00
-.70711Е+00
Варианты заданий для нахождения собственных значений и собственных векторов
матрицы приведены в таблице 5. Тема лабораторной работы №5 для контроля знаний
проиллюстрирована контрольно – обучающей программой.
116
Лабораторная работа № 6
Решение проблемы собственных значений и собственных векторов
Итерационные методы
Метод QR-разложения
Входные параметры: nn—целое положительное число, равное порядку n системы; а
— массив из n х n действительных чисел, содержащий входную матрицу.
Выходные параметры: R_1, R_2—массив из n действительных чисел при выходе из
программы содержит решение системы.
Пример. Вычислить собственные значения и собственные вектора матрицы
|2 2
|2 5
|-2 –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;
I1,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:
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;
117
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
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-ўҐй} 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;
118
Вычисления по программе привели к следующим результатам:
Собственные числа
Собственные вектора
.10000Е+01
-.94281Е+00
.23570Е+00
-.23570Е+00
.10000Е+02
-.33333Е+00
-.66667Е+00
.66667Е+00
.10000Е+01
.00000Е+00
-.70711Е+00
-.70711Е+00
Варианты заданий для нахождения собственных значений и собственных векторов
матрицы приведены в таблице 5.
Метод обратных итераций
Входные параметры: nn—целое положительное число, равное порядку n системы;
Aа — массив из n х n действительных чисел, содержащий входную матрицу, eps – малое
число для условия окончания итерационного процесса.
Выходные параметры: V0,V1—массив из n действительных чисел при выходе из
программы содержит решение системы, it – количество итераций.
Пример. Вычислить собственные значения и собственные вектора матрицы
|2 2
|2 5
|-2 –4
–2|
–4|
5|
Текст программы:
PROCEDURE IObrIter(Nn:integer;Aa:tmatr;lam,lam1,eps:real;var V0,V1:tvector;var it:byte);
var x,x1:tvector; c,c1:extended; nev:real; i,j,k,p:integer; i1:byte; aa1:tmatr;
rv,rv1:tvector;
begin
it:=1;
for i:=1 to 2*nn do
for j:=1 to 2*nn do
begin
if (i<=Nn)and(j<=Nn)then
if i=j then aa1[i,i]:=aa[i,i]-lam else aa1[i,j]:=aa[i,j];
if (i<=Nn)and(j>Nn) then if j=Nn+i then aa1[i,j]:=-lam1 else aa1[i,j]:=0;
if (i>Nn)and(j<=Nn)then if i=j+Nn then aa1[i,j]:=-lam1 else aa1[i,j]:=0;
if (i>Nn)and(j>Nn)then if i=j then aa1[i,j]:=aa[i-nn,j-nn]-lam
else aa1[i,j]:=aa[i-nn,j-nn];
end;
for i:=1 to Nn do rv1[i]:=1;
for i:=Nn+1 to 2*nn do rv1[i]:=0;
repeat
rv:=rv1;
rv1:=rv;
simq(2*Nn,AA1,rv1,p);{
c:=rv1[1]; c1:=rv1[nn+1];
for i1:=1 to Nn do
begin
if rv1[i1]<c then c:=rv1[i1]; if rv1[i1+nn]<c1 then c1:=rv1[i1+nn];
end;}
for i1:=1 to Nn do
begin
rv1[i1,1]:=rv1[i1,1]/c; rv1[i1,2]:=rv1[i1,2]/c1;
end ;}
c:=0;
c1:=0;
119
for i:=1 to Nn do
begin
c:=c+sqr(rv1[i]); c1:=c1+sqr(rv1[i+nn]);
end;
c:=sqrt(c); c1:=sqrt(c1); nev:=0;
for i:=1 to Nn do
begin
rv1[i]:=rv1[i]/c; rv1[i+nn]:=rv1[i+nn]/c1;
nev:=nev+(sqr(rv[i])+sqr(rv[i+nn])-sqr(rv1[i])-sqr(rv1[i+nn]));
end;
nev:=sqrt(nev);
inc(it);
until (nev<eps)or (it>15);
for i:=1 to Nn do
begin
v0[i]:=rv1[i]; v1[i]:=rv1[i+nn];
end;
end;
Вычисления по программе привели к следующим результатам:
Собственные числа
Собственные вектора
.10000Е+01
-.94281Е+00
.23570Е+00
-.23570Е+00
.10000Е+02
-.33333Е+00
-.66667Е+00
.66667Е+00
.10000Е+01
.00000Е+00
-.70711Е+00
-.70711Е+00
Варианты заданий
Таблица 5
Вариан
т
Матрица A
1
.15446E + 00
.33012E + 00
1
–.54037E + 00
.58495Е + 00
.10194E + 01
2
.13770E+00
Продолжение таблицы 5
1
.14613E+00
–.12171E-01
.37712E + 01
-.43613E + 01
3
.52997E+01
.40591E+01
.41585H + 00
.13936E + 01
4
-.87625E + 00
-.48377E + 01
.11107E + 01
5
.33082E+00
120
-.43024E + 00
-.94878E+00
.15346E + 01
-.16812Е + 01
.13661E+01
.19687Е+00
2
.55900E-01
.12327E + 00
.19939E+00
-.21843Е + 00
.51685E + 01
.74484E + 00
.24055E + 00
.51413E + 00
–.84158E+00
.91101Е + 00
-.22275E + 01
-.30089E+00
.19598Е+00
-.17401E-01
.48587E + 00
-.59594E+00
.69610E+00
.55464E + 00
-.35891E+00
.12212E + 01
-.73761E+00
-.42394E + 01
.10590E+02
.30755E+01
2
.74144E+00
.65832E-01
19836E + 00
243 З0Е + 00
28419E+00
22644E+00
63151E + 00
21488E + 01
12978E + 01
74592E + 01
79845E + 01
23188E + 01
-.31930E+00
.26593E-01
-.53757E + 00
.62168E + 00
-.75546E+00
-. 57861 E+ 00
.48148E + 00
.16136E+01
-.10145E + 01
-.56012E + 01
-.37547E + 01
-.11183Е + 01
-.17127E+00
.29074E+00
.94217E + 01
-.82311E + 01
6
.10527E + 02
.28367E+01
.22224Е+00
.17226Е + 01
7
.10474Е + 02
.54542Е + 01
.42016Е + 00
.19439Е + 00
8
- 61729Е+ 01
-.20038Е+00
15788Е + 02
-10221Е + 02
9
.46778Е + 01
-11261Е + 02
.41750Е-01
.93292Е-01
10
-19135Е+02
.89416Е + 01
.70954Е-03
-.99360Е-04
11
.37446Е-03
-.35194Е-04
.21121Е+02
-.97494Е + 01
12
.54455Е+01
.92933Е + 01
Продолжение таблицы 5
1
.58993Е+00
-.43515Е + 01
13
.67688Е + 01
-.31085Е + 02
.46329Е + 00
.37616Е + 00
14
-.42388Е + 00
.28498Е + 00
.23797Е + 02
-.72308Е + 01
15
-.74144Е + 01
-.96619Е + 00
.33057Е + 01
16
-11653Е + 02
.27268Е + 02
.32367Е + 02
.16823Е + 01
17
19161Е + 01
.7З100Е - 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
13043E+01
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 1
9138Е + 01
.23236Е+02
14775Е + 02
16709Е + 02
-.52335Е + 01
-.32325Е + 00
15081Е + 00
-.81334Е-01
-14376Е + 00
.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
.36004Е-01
-.24076Е+00
.39005Е + 00
-.17198Е+01
.23325Е + 02
.19986Е + 02
-.21495Е + 02
.15141Е + 02
-.96479Е + 01
.28581Е + 01
.30008Е + 01
.38190Е + 00
10035Е + 01
-.31905Е + 01
.76123Е + 01
.88617Е + 01
-.12521Е + 02
-14239Е + 02
-.90481Е + 00
2
-.32946Е + 00
.22030Е + 01
-.35692Е + 01
.15737Е + 02
.56599Е + 01
.48497Е + 01
-.52159Е + 01
.36742Е + 01
.25078Е+02
-.74291Е + 01
-.78002Е + 01
-.99269Е + 00
.54364Е + 00
-17284Е + 01
.41118Е + 01
.48006Е + 01
.17330Е + 02
19707Е + 02
12523Е + 01
.27315Е + 00
-.20148Е + 01
.31341Е + 01
-.14393Е+02
.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
121
-.28993Е+01
.23026Е+02
-.34268Е + 01
18
.25324Е + 01
-.24584Е + 01
.93047Е + 01
-.20747Е + 02
19
-.50813Е + 02
.23840Е + 01
.29497Е+01
20
.63919Е+01
.53881Е + 01
.18899Е + 02
-15438Е + 00
21
11694Е + 00
15299Е + 00
18736Е+02
-.29757Е + 02
22
.31857Е + 02
-.45869Е + 02
.36164Е + 01
23
.74821Е + 01
-17309Е + 02
Продолжение таблицы 5
1
.38860Е + 01
24
25
26
27
28
29
122
.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
.21545Е + 02
-.29821Е + 02
-10130Е + 02
-.28865Е + 02
.44373Е + 01
-.30771Е + 01
.31833Е + 01
-.96771Е + 00
.25205Е + 01
.60245Е4-01
-.28963Е + 00
-.87224Е + 01
-18646Е + 02
-15501Е+02
.47944Е + 02
-.43842Е + 00
-.45833Е-01
.43447Е + 00
-.80167Е-01
.57914Е-01
-12683Е + 00
.89269Е-01
10248Е + 02
.22156Е + 02
-.50828Е + 02
-.27154Е + 02
.41743Е + 01
-.28947Е + 01
.29947Е + 01
.79337Е + 00
-.20664Е + 01
-.49391Е + 01
.23745Е + 00
-13989Е+02
-.29905Е + 02
-. 24861 Е + 02
-.21890Е + 02
.20017Е + 00
.20926Е-01
-19837Е + 00
-.25998Е+00
18781Е + 00
-.41130Е + 00
.28950Е + 00
-17581Е + 01
-.38041Е + 01
.87201Е+01
-.26187Е + 02
.38973Е + 01
-.28802Е + 01
.27959Е + 01
14105Е + 01
-.31451Е + 01
-.77027Е + 01
.36139Е + 00
.65990Е + 01
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
.11507Е + 02
2
-.19742Е + 01
.61716Е +01
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
.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Е4-01
.12662Е + 02
.44536Е + 01
-.83855Е+00
-.49981Е+01
-.49087Е+02
-.28666Е+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
30
.17965Е+01
.78083Е + 00
.26239Е + 00
-.82565Е + 00
.49866Е + 02
.22034Е+02
.60831Е + 01
-.23299Е + 02
-.55218Е+02
-.24399Е + 02
-.67359Е + 01
.25799Е + 02
-.11507Е + 02
-.50015Е + 01
-16807Е + 01
.52886Е + 01
Тема лабораторной работы №6 для контроля знаний проиллюстрирована
контрольно – обучающей программой.
123
Лабораторная работа № 7
Приближение функций
Интерполяционный полином Лагранжа
Входные параметры: N - число узлов интерполяции; y - массив размерности n,
содержащий значения функции в узлах интерполяции; x-массив размерности n,
содержащий значения узлов интерполяции; q-точка в которой вычисляем значения
функции интерполяции.
Выходные параметры: приближенное значение функции в точке q; графическая
интерпретация результата.
Схема алгоритма приведена на рисунке 25.
Задание. Аппроксимировать табличную функцию с помощью интерполяционного
полинома Лагранжа.
xi
1
2
3
4
5
yi
2,05
1,94
1,92
1,87
1,77
xi
6
7
8
9
10
yi
1,88
1,71
1,60
1,56
1,40
Текст программы:
function Lagran(n:integer;x,y:TVector;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;
Lagran:=l
end
Вычисления по программе привели к следующим результатам:
X=1
X=1,5
X=2
X=2,5
X=3
X=3,5
X=4
X=4,5
X=5
X=5,5
X=6
X=6,5
124
Y=2,05
Y=2,38
Y=1,94
Y=1,83
Y=1,92
Y=1,94
Y=1,87
Y=1,78
Y=1,77
Y=1,83
Y=1,88
Y=1,83
X=7
X=7,5
X=8
X=8,5
X=9
X=9,5
X=10
Y=1,71
Y=1,59
Y=1,6
Y=1,67
Y=1,56
Y=1,09
Y=1,4
Function
Lagran(n:integer;x,y,TV
ector;r,q:real)
L=0
I
I>n
s=1
J
J>n
+
I<>J
s=s*(q-x[j]) /
(x[i]-x[j])
J=J+1
J
L=L+y[i]*s
I=I+1
I
Lagran=1
Возв рат
Рисунок 25 - Схема алгоритма приближения функций формулой Лагранжа
Варианты заданий для решения задачи приближения функций приведены в таблице
6.
Аппроксимация функций с помощью кубического сплайна
Входные параметры: N - число узлов интерполяции; y - массив размерности n,
содержащий значения функции в узлах интерполяции; x-массив размерности n,
содержащий значения узлов интерполяции; q-точка в которой вычисляем значения
функции интерполяции.
125
Выходные параметры: приближенное значение функции в точке q; графическая
интерпретация результата.
Схема алгоритма приведена на рисунке 26.
Задание. Аппроксимировать табличную функцию с помощью кубического сплайна.
xi
1
2
3
4
5
yi
2,05
1,94
1,92
1,87
1,77
xi
6
7
8
9
10
yi
1,88
1,71
1,60
1,56
1,40
Текст программы:
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
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 1 do
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; end;
Вычисления по программе привели к следующим результатам:
X=1
126
Y=2,21
X=1,5
X=2
X=2,5
X=3
X=3,5
X=4
X=4,5
X=5
X=5,5
X=6
X=6,5
X=7
X=7,5
X=8
X=8,5
X=9
X=9,5
X=10
Y=2,06
Y=1,94
Y=2,00
Y=1,92
Y=1,99
Y=1,87
Y=1,88
Y=1,77
Y=1,91
Y=1,88
Y=1,90
Y=1,71
Y=1,71
Y=1,6
Y=1,66
Y=1,56
Y=1,57
Y=1,4
127
Procedure
Spline3(N:integer;X,Y:mas
;S0,SN:real;Var
A,B,C,D:mas)
H2=x[2]-x[1]
h3=h[3]-h[2]
a[1]=(2*(h2+h3))/h3
f [1]=(6/h3)*(((y[3]-y[2]/h3)((y[2]-y[1])/h2))-(h2*s0)
/ h3)
A
c[1]=s0
c[n]=sn
I
I>n-1
c[i]=d[i-1]
I
I>n-1
I=I+1
I
H2=x[i-1]-x[i-2]
h3=h[i]-h[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)))
I
I>n
a[i]=0
b[i]=0
d[i]=0
I=I+1
I
I=I+1
I
H2=x[n-1]-x[n-2]
h3=h[n]-h[n-1]
p=2*(h2+h3)
b[i]=h2/p
I
I>n
H2=x[i]-x[i-1]
d[i]=(c[i]-c[i-1])/h2
f [n-2]=(6/p)*(((y[n]-y[n-1]/h
3)-((y[n-1]-y[n-2])/h2))-(h3*
sn)/p)
d[1]=1/a[1
c[1]]=f [1]
I
I>n-3
b[i]=h2*c[i]/2-(sqr(h2))*d[i]/
6+(y[i]-y[i-1])/h2
a[i]=y[i]
I=I+1
I
Возв рат
d[i]=1/(a[i]-b[i]*d[i-1])
c[i]]=f [i]-b[i]*d[i-1]*c[i-1]
I=I+1
I
d[n-2]=(f [n-2]-b[1]*d[n-3]*c
[n-3])/(1-b[1]*d[n-3])
I
I<1
d[i]=d[i]*(c[i]-d[i+1])
I=I-1
I
A
Рисунок 26 - Схема алгоритма приближения функций с помощью сплайнов
128
Варианты заданий для решения задачи приближения функций приведены в таблице
6.
Приближение формулами Ньютона
Входные параметры: N - число узлов интерполяции; y - массив размерности n,
содержащий значения функции в узлах интерполяции; x-массив размерности n,
содержащий значения узлов интерполяции; q-точка в которой вычисляем значения
функции интерполяции.
Выходные параметры: приближенное значение функции в точке q; графическая
интерпретация результата.
Схема алгоритма приведена на рисунке 27.
Задание. Аппроксимировать табличную функцию с помощью формул Ньютона.
xi
1
2
3
4
5
yi
2,05
1,94
1,92
1,87
1,77
xi
6
7
8
9
10
yi
1,88
1,71
1,60
1,56
1,40
Текст программы:
function PribNew(n:integer;a,b:TVector;x:Real):real;
function GetRazdRazn(k,l:integer;m:TMatr):real;
begin
GetRazdRazn:=m[k,l-k+1];
end;
var i,j:integer; s,p:real; M:tmatr;
begin
TabRazdRazn(n,a,b,M);
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*GetRazdRazn(1,i+1,m);
end;
PribNew:=s;
end;
Вычисления по программе привели к следующим результатам:
X=1 Y=2,05
X=1,5 Y=2,38
X=2 Y=1,94
X=2,5 Y=1,83
X=3 Y=1,92
X=3,5 Y=1,94
X=4 Y=1,87
X=4,5 Y=1,78
129
X=5 Y=1,77
X=5,5 Y=1,83
X=6 Y=1,88
X=6,5 Y=1,83
X=7 Y=1,71
X=7,5 Y=1,59
X=8 Y=1,6
X=8,5 Y=1,67
X=9 Y=1,56
X=9,5 Y=1,09
X=10 Y=1,4
PribNew (n:integer:a,
b:TVector:x:real)
GetRazdRazn
(k,l,t)
TabtRazdRazn
(k,l,t)
S=b[1]
I
I>N-1
P=1
J
J>I
P=P*(x-a[j])
J=J+1
J
s=s+P*
GETRazdRazn
(1,i+1,m)
I=I+1
I
PribNew =s
Возв рат
Рисунок 27 - Схема алгоритма приближения функций формулами Ньютона
Варианты заданий для решения задачи приближения функций приведены в таблице
6.
Аппроксимация функций методом наименьших квадратов.
Входные параметры: N - число узлов интерполяции; y - массив размерности n,
содержащий значения функции в узлах интерполяции; x-массив размерности n,
содержащий значения узлов интерполяции; q-точка в которой вычисляем значения
функции интерполяции.
130
Выходные параметры: приближенное значение функции в точке q; графическая
интерпретация результата.
Схема алгоритма приведена на рисунке 28.
Задание. Аппроксимировать табличную функцию многочленом второй степени
методом наименьших квадратов.
xi
1
2
3
4
5
yi
2,05
1,94
1,92
1,87
1,77
xi
6
7
8
9
10
yi
1,88
1,71
1,60
1,56
1,40
Текст программы:
function Apr_Kv(n:integer;x,y:TVector;q:real):real;
var i,j:integer;
a:TMatr;
b,c:TVector;
s:real;
begin
a[1,1]:=N;
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;
131
j:=N;
N:=3;
LinSys(n,a,b,c);
Apr_kv:=c[1]+c[2]*q+c[3]*q*q;
N:=j;
for i:=0 to N-1 do
begin a:=apr_kv(x,y,i/10);
end;
Вычисления по программе привели к следующим результатам:
A=-0,004 B=-0,0132
X=1 Y=2,00
X=1,5 Y=1,99
X=2 Y=1,97
X=2,5 Y=1,95
X=3 Y=1,93
X=3,5 Y=1,91
X=4 Y=1,89
X=4,5 Y=1,86
X=5 Y=1,83
X=5,5 Y=1,80
X=6 Y=1,77
X=6,5 Y=1,73
X=7 Y=1,70
X=7,5 Y=1,66
X=8 Y=1,62
X=8,5 Y=1,57
X=9 Y=1,53
X=9,5 Y=1,48
X=10 Y=1,43
132
C=2,0147
Function
Apr_kv(n:integer;x,y::
TVector;q:real):real
А
a[1,1]=N;
s=0
I
I>N
I
I>N
s=s+y[i]
s=s+x[i]
I=I+1
I
I=I+1
I
a[1,2]=s;
a[2,1]=s;
S=0
I
I>N
s=s+x[i]*x[i]
I=I+1
I
b[1]=s;
S=0
I
I>N
s=s+y[i]*y[i]
I=I+1
I
b[2]=s;
S=0
a[1,3]=s;
a[2,2]=s;
a[3,1]=s;
S=0
I
I>N
I
I>N
s=s+y[i]*y[i]*y[i]
s=s+x[i]*x[i]*x[i]
I=I+1
I
I=I+1
I
b[3]=s;
J=n;
n=3;
a[2,3]=s;
a[3,2]=s;
S=0
LinSys(n,a,b,c)
I
I>N
Возв рат
s=s+x[i]*x[i]*x[i]*x[i]
I=I+1
I
a[3,3]=s;
S=0
А
Рисунок 28 - Схема алгоритма аппроксимации функций методом наименьших
квадратов
Варианты заданий. Значения xi=i0,1; i=1,2…20 одинаковые для всех вариантов
133
Таблица 6
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вариант 1
2
2,05
1,94
1,92
1,87
1,77
1,88
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
3
2,09
2,05
2,19
2,18
2,17
2,27
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
Вариант 7
Вариант 8
1 2,18
-0,10
2 2,43
-0,21
3 2,40
0,01
4 2,43
0,05
5 2,65
-0,13
6 2,75
-0,23
7 2,67
-0,21
8 2,66
-0,43
9 2,63
-0,57
10 2,75
-0,44
11 2,41
-0,44
12 2,24
-0,83
13 2,12
-0,78
14 1,74
-0,81
Продолжение таблицы 6
1
2
3
15 1,57
-1,06
16 1,17
-1,41
17 0,96
-1,40
18 0,63
-1,70
19 0,25
-1,96
20 -0,01
-1,91
Вариант 13
134
Значения
Вариант 3
4
2,02
1,98
1,67
1,65
1,57
1,42
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
Значения
Вариант 9
-0,16
0,01
0,10
0,16
0,05
0,35
0,19
0,50
0,74
1,03
1,06
1,49
1,79
2,03
Yi=y(Xi)
Вариант 4
5
1,99
2,03
2,20
2,39
2,19
2,61
2,35
2,60
2,55
2,49
2,50
2,52
2,44
2,35
2,26
2,19
2,24
2,34
1,96
2,19
Yi=y(Xi)
Вариант 10
2,09
2,31
2,72
2,77
2,78
2,97
3,00
3,51
3,43
3,58
3,58
3,54
3,82
3,90
Вариант 5
6
2,23
2,29
2,27
2,62
2,72
2,82
3,13
3,49
3,82
3,95
4,22
4,48
5,06
5,50
5,68
6,19
6,42
7,04
7,57
8,10
Вариант 11
2,15
2,41
2,58
2,84
3,28
3,46
4,02
4,11
4,61
5,03
5,34
5,86
6,33
6,81
Вариант 6
7
2,07
2,17
2,21
2,31
2,10
2,09
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
4
5
6
7
2,22
3,77
7,21
-3,26
2,50
3,81
7,67
-3,91
2,88
4,00
8,23
-4,41
3,21
3,97
8,68
-4,91
3,63
4,08
9,35
-5,30
3,90
4,08
9,93
-6,00
Значения
Yi=y(Xi)
Вариант 14 Вариант 15 Вариант 16 Вариант 17 Вариант 18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0,17
0,07
0,17
0,05
0,12
0,00
0,01
-0,05
-0,21
-0,50
-0,50
-0,86
-1,24
-1,47
-1,79
-2,25
-2,55
-3,18
-3,60
-3,93
0,80
0,29
0,52
0,77
0,93
1,20
1,20
1,35
1,39
1,48
1,52
1,71
1,72
1,87
1,86
1,89
2,04
1,73
2,04
2,03
Вариант 19 Вариант 20
1 -1,86
- 1,65
2 -1,95
- 2,00
3 -2,12
- 1,87
4 -2,06
- 1,89
5 -2,15
- 1,75
6 -2,00
- 1,59
7 -2,12
-1,44
8 -2,31
-1 ,61
9 -2,29
- 1,00
10 -2,57
- 1,17
11 -2,56
-0,87
12 -2,86
-0,47
Продолжение таблицы 6
1
2
3
13 -2,85
-0,33
14 -3,03
-0,00
15 -3,25
0,34
16 -3,08
0,49
17 -3,29
0,81
18 -3,67
1,37
19 -3,70
1,72
20 -3,85
2,03
1
2
3
4
5
6
Вариант 25
-1,80
-1,66
-1,36
-1,41
-1,13
-0,82
Вариант26
-1,65
-1,64
-1,41
-0,91
-0,63
-0,34
0,04
0,47
0,78
1,01
1,19
1,60
1,93
2,22
2,50
3,01
3,22
3,71
4,23
4,78
5,27
5,75
6,16
6,76
7,30
8,00
Значения
Вариант 21
-1,89
-2,07
-2,30
-2,26
-2,34
-2,66
-2,88
-2,85
-3,16
-3,49
-3,88
-4,22
4
-4,45
-4,99
-5,36
-5,71
-6,51
-6,76
-7,35
-8,02
Значения
Вариант27
-1,88
-1,69
-1,52
-1,55
-1,16
-1,27
0,08
0,14
0,37
0,36
0,44
0,48
0,27
0,39
0,50
0,48
0,69
0,50
0,31
0,37
0,43
0,33
0,31
0,09
0,08
0,03
Yi=y(Xi)
Вариант 22
-1,84
-1,98
-1,72
- 1,58
- 1,69
- 1,59
-1,58
-1,64
- 1,55
- 1,35
- 1,33
- 1,47
-0,02
0,44
0,51
0,67
0,69
1,04
1,1
1,3
1,7
2,0
2,1
2,4
2,90
3,50
3,99
4,06
4,54
4,99
5,36
5,99
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
Вариант 23
-1,92
-1,60
-1,57
-1,41
-1,36
-0,97
-0,59
-0,71
-0,15
0,01
0,22
0,63
Вариант 24
-1,90
-1,80
-1,82
-1,86
-1,83
-2,00
-2,01
-2,05
-2,46
-2,68
-2,85
-2,98
5
- 1,50
- 2,65
- 1,65
- 1,87
- 1,61
- 1,86
- 1,84
- 1,91
Yi=y(Xi)
Вариант 28
- ,01
- ,06
- ,88
-3,98
-4,36
-4,18
6
7
1,07
1,42
1,68
2,49
2,57
3,09
3,40
4,00
3,30
-3,40
-3,90
-4,37
-4,65
-5,00
-5,42
-6,13
Вариант 29
-4,13
-4,11
-3,87
-3,74
-3,85
-3,71
Вариант 30
-3,97
-4,07
-4,04
-4,30
-4,27
-4,54
135
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-0,74
-076
-0,64
-0,46
-0,30
-0,27
-0,22
-0,11
-0,02
0,11
0,11
-0,02
0,03
0,01
-0,12
0,25
0,64
0,96
1,50
1,77
2,24
2,93
3,17
3,77
4,42
4,79
5,50
6,01
-1,23
-1,36
-1,26
-1,47
-1,72
-1,76
-2,00
-2,03
-2,35
-2,46
-2,88
-3,27
-3,68
-3,98
-4,16
-4,51
-4,53
-4,38
-4,76
-4,66
-4,82
-4,77
-5,12
-5,23
-5,40
-5,84
-5,86
-6,01
-3,53
-3,56
-3,19
-3.04
-2,83
-2,54
-2,41
-1,97
-1,78
-1,53
-1,04
-0,86
-0,48
0,09
-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
Тема лабораторной работы №7 для контроля знаний проиллюстрирована
контрольно – обучающей программой.
136
Лабораторная работа №8
Решение задачи Коши
Одношаговые методы
Метод Эйлера
Входные параметры: a,b – интервал приближения; n – количество точек
приближения; Kolfun – порядок системы; x – начальное значение x 0 ; y_1 – массив из
kolfun чисел, содержащий начальное значение y.
Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное
решение системы.
Схема алгоритма показана на рисунке 29.
Пример. Решить на отрезке [0,3] с шагом 0,1 задачу Коши
y1 x  y2  y1 (0)  0

 xy1  y (0)  0

y

x

е
 2
 2
Текст программы:
procedure eiler (a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach);;
var t:real;
begin
t:=(b-a)/n;
for i:=1 to n do begin
for k:=1 to kolfun do y_1[k]:=y_1[k]+t*f(x,y_1[k]);{F(y1,y2,x)} x:=x+t;
end;
end;
Вычисления по программе привели к следующим результатам:
x=0
x=0,1
x=0,2
x=0,3
x=0,4
x=0,5
x=0,6
x=0,7
x=0,8
x=0,9
x=1
x=1,1
x=1,2
x=1,3
x=1,4
x=1,5
x=1,6
x=1,7
x=1,8
x=1,9
x=2
y1=0
y1=0
y1=0,01
y1=0,02
y1=0,05
y1=0,09
y1=0,14
y1=0,20
y1=0,26
y1=0,33
y1=0,40
y1=0,48
y1=0,56
y1=0,65
y1=0,74
y1=0,84
y1=0,94
y1=1,04
y1=1,14
y1=1,24
y1=1,35
y2=0
y2=0,1
y2=0,19
y2=0,29
y2=0,38
y2=0,47
y2=0,55
y2=0,62
y2=0,68
y2=0,74
y2=0,79
y2=0,84
y2=0,88
y2=0,91
y2=0,94
y2=0,97
y2=0,99
y2=1,01
y2=1,03
y2=1,04
y2=1,06
137
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
y1=1,45
y1=1,56
y1=1,67
y1=1,78
y1=1,89
y1=2,00
y1=2,11
y1=2,22
y1=2,34
y2=1,07
y2=1,08
y2=1,09
y2=1,10
y2=1,11
y2=1,11
y2=1,12
y2=1,12
y2=1,13
procedure
eiler(a,b:real;n,kolfun:integ
er;x:real;var
y_1:TFunZnach);
t=(b-a) / n
I
I>N
K
K>kolfun
y_1[k]=y_1[k]+t*f(x,y_1[k])
x=x+t
K=K+1
K
I=I+1
I
Возв рат
Рисунок 29 - Схема алгоритма метода Эйлера
Варианты заданий для решения задачи Коши методом Эйлера приведены в таблице
7.
Метод прогноза и коррекции
Входные параметры: a,b – интервал приближения; n – количество точек
приближения; Kolfun – порядок системы; x – начальное значение x 0 ; y_1 – массив из
kolfun чисел, содержащий начальное значение y.
Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное
решение системы.
Схема алгоритма показана на рисунке 30.
138
Пример. Решить задачу Коши на отрезке [0,3] с шагом 0,1
y1 x  y2  y1 (0)  0

 xy1  y (0)  0
 2
y2 x  е
Текст программы:
procedure prognoz(a,b:real;n,kolfun:integer;x:real;y_0:TFunZnach;var y_1:TFunZnach);
var h:real;
begin
h:=(b-a)/n;
for i:=1 to n do begin
for k:=1 to kolfun do
y_0[k]:=y_0[k]+h*f(x+0.5*h,y_0[k]+0.5*h*f(y_0[k],x));
x:=x+h; end;
y_1:=y_0;
end;
Вычисления по программе привели к следующим результатам:
x=0
x=0,1
x=0,2
x=0,3
x=0,4
x=0,5
x=0,6
x=0,7
x=0,8
x=0,9
x=1
x=1,1
x=1,2
x=1,3
x=1,4
x=1,5
x=1,6
x=1,7
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
y1=0
y1=0,01
y1=0,02
y1=0,05
y1=0,09
y1=0,14
y1=0,20
y1=0,26
y1=0,33
y1=0,40
y1=0,48
y1=0,57
y1=0,66
y1=0,75
y1=0,84
y1=0,94
y1=1,04
y1=1,14
y1=1,25
y1=1,35
y1=1,46
y1=1,57
y1=1,68
y1=1,79
y1=1,90
y1=2,01
y1=2,13
y1=2,24
y1=2,35
y1=2,47
y2=0
y2=0,1
y2=0,19
y2=0,29
y2=0,38
y2=0,46
y2=0,53
y2=0,60
y2=0,67
y2=0,72
y2=0,77
y2=0,81
y2=0,85
y2=0,88
y2=0,91
y2=0,94
y2=0,96
y2=0,98
y2=1,00
y2=1,01
y2=1,02
y2=1,03
y2=1,04
y2=1,05
y2=1,06
y2=1,07
y2=1,07
y2=1,08
y2=1,08
y2=1,09
139
procedure
prognoz(a,b:real;n,kolfun:i
nteger;x:real;y_0:TFunZna
ch;var y_1:TFunZnach);
h=(b-a) / n
I
I>N
K
K>kolfun
y_0[k]=y_0[k]+h*f(x+0,5*h,
y_0[k]+0,5*h*f(y_0[k],x))
K=K+1
K
x=x+h
I=I+1
I
y_1=y_0
Возв рат
Рисунок 30 - Схема алгоритма метода прогноза и коррекции
Варианты заданий для решения задачи Коши методом прогноза и коррекции
приведены в таблице 7.
Метод Рунге-Кутта 4-го порядка
Входные параметры: a,b – интервал приближения; n – количество точек
приближения; Kolfun – порядок системы; x – начальное значение x 0 ; y_1 – массив из
kolfun чисел, содержащий начальное значение y.
Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное
решение системы.
Схема алгоритма показана на рисунке 31.
Пример. Решить задачу Коши на отрезке [0,3] с шагом 0,1
y1 x  y2  y1 (0)  0

 xy1  y (0)  0
 2
y2 x  е
Текст программы:
procedure runge_ku (a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach);
140
var Kf:array[1..NumFun,1..4] of real;
h:real;
begin
h:=(b-a)/n;
for i:=1 to n do
begin
for k:=1 to kolfun do
begin
Kf[k,1]:=h*f(x,y_1[k]);{f(t,y1,y2,x);}
kf[k,2]:=h*f(x+0.5*h,y_1[k]+0.5*kf[k,1]);{f(met,y1+0.5*t*k1[1],y2+0.5*t*k1[1],x+0.5*t);}
kf[k,3]:=h*f(x+0.5*h,y_1[k]+0.5*kf[k,2]);{f_1(met,y1+0.5*t*k1[2],y2+0.5*t*k1[2],x+0.5*t);}
kf[k,4]:=h*f(x+h,y_1[k]+kf[k,3]);{f_1(met,y1+t*k1[2],y2+t*k1[2],x+t);} end;
x:=x+h;
for k:=1 to kolfun do y_1[k]:=y_1[k]+h/6*(kf[k,1]+2*kf[k,2]+2*kf[k,3]+kf[k,4]);
еnd;
end;
procedure
runge_ku(a,b:real;n,kolfun
:integer;x:real;var
y_1:TFunZnach;)
h=(b-a)/n
I
I>N
K
K>kolfun
kf[k,1]=h*f(x,y_1[k])
kf[k,2]=h*f(x+0,5*h,y_1[k]+
0,5*kf[k,1])
kf[k,3]=h*f(x+0,5*h,y_1[k]+
0,5*kf[k,2])
kf[k,4]=h*f(x+h,y_1[k]+
kf[k,3])
K=K+1
K
x=x+h
K
K>kolfun
y_1[k]=y_1[k]+h/6*(kf[k,1]
+2*kf[k,2]+2*kf[k,3]+
kf[k,4])
K=K+1
K
I=I+1
I
Возв рат
Рисунок 31 - Схема алгоритма метода Рунге-Кутта
Вычисления по программе привели к следующим результатам:
141
x=0 y1=0
y2=0
x=0,1 y1=0
y2=0,09
x=0,2 y1=0,01 y2=0,19
x=0,3 y1=0,03 y2=0,29
x=0,4 y1=0,06 y2=0,38
x=0,5 y1=0,10 y2=0,46
x=0,6 y1=0,15 y2=0,53
x=0,7 y1=0,20 y2=0,60
x=0,8 y1=0,27 y2=0,66
x=0,9 y1=0,34 y2=0,72
x=1 y1=0,41 y2=0,77
x=1,1 y1=0,49 y2=0,81
x=1,2 y1=0,58 y2=0,85
x=1,3 y1=0,67 y2=0,88
x=1,4 y1=0,76 y2=0,91
x=1,5 y1=0,86 y2=0,94
x=1,6 y1=0,96 y2=0,96
x=1,7 y1=1,06 y2=0,98
x=1,8 y1=1,17 y2=1,00
x=1,9 y1=1,27 y2=1,02
x=2 y1=1,38 y2=1,03
x=2,1 y1=1,49 y2=1,04
x=2,2 y1=1,60 y2=1,05
x=2,3 y1=1,71 y2=1,06
x=2,4 y1=1,82 y2=1,07
x=2,5 y1=1,93 y2=1,08
x=2,6 y1=2,05 y2=1,08
x=2,7 y1=2,16 y2=1,09
x=2,8 y1=2,28 y2=1,09
x=2,9 y1=2,39 y2=1,10
Варианты заданий для решения задачи Коши методом Эйлера приведены в таблице
7.
142
Лабораторная работа №9
Решение задачи Коши
Многошаговые методы
Метод Адамса (явный)
Входные параметры: a,b – интервал приближения; n – количество точек
приближения; Kolfun – порядок системы; x – начальное значение x 0 ; y_1 – массив из
kolfun чисел, содержащий начальное значение y.
Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное
решение системы.
Схема алгоритма показана на рисунке 32.
Пример. Решить задачу Коши на отрезке [0,3] с шагом 0,1
y1 x  y2  y1 (0)  0

 xy1  y (0)  0

y

x

е
 2
 2
Текст программы:
procedure adams (a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach);
var Fun:array[1..NumFun,1..4] of real;
h:real;
begin
h:=(b-a)/n;
for i:=1 to 4 do
begin for k:=1 to kolfun do fun[k,i]:=f(y_1[k],x);
runge_ku(a,b,1,1,x,y_1); x:=x+h; end;
for i:=5 to n do
begin
for k:=1 to kolfun do
begin
y_1[k]:=y_1[k]+h/24*(55*fun[k,4]-59*fun[k,3]+37*fun[k,2]-9*fun[k,1]);
fun[k,1]:=fun[k,2];
fun[k,2]:=fun[k,3];
fun[k,3]:=fun[k,4];
fun[k,4]:=f(y_1[k],x);
end; x:=x+h;
end;{ y_1:=y_0;}
end
Вычисления по программе привели к следующим результатам:
x=0 y1=0
y2=0
x=0,1 y1=0
y2=0,09
x=0,2 y1=0,01 y2=0,19
x=0,3 y1=0,03 y2=0,29
x=0,4 y1=0,06 y2=0,38
x=0,5 y1=0,10 y2=0,46
x=0,6 y1=0,15 y2=0,53
x=0,7 y1=0,20 y2=0,60
x=0,8 y1=0,27 y2=0,66
143
x=0,9 y1=0,34 y2=0,72
x=1 y1=0,41 y2=0,77
x=1,1 y1=0,49 y2=0,81
x=1,2 y1=0,58 y2=0,85
x=1,3 y1=0,67 y2=0,88
x=1,4 y1=0,76 y2=0,91
x=1,5 y1=0,86 y2=0,94
x=1,6 y1=0,96 y2=0,96
x=1,7 y1=1,06 y2=0,98
x=1,8 y1=1,17 y2=1,00
x=1,9 y1=1,27 y2=1,02
x=2 y1=1,38 y2=1,03
x=2,1 y1=1,49 y2=1,04
x=2,2 y1=1,60 y2=1,05
x=2,3 y1=1,71 y2=1,06
x=2,4 y1=1,82 y2=1,07
x=2,5 y1=1,93 y2=1,08
x=2,6 y1=2,05 y2=1,08
x=2,7 y1=2,16 y2=1,09
x=2,8 y1=2,28 y2=1,09
x=2,9 y1=2,39 y2=1,10
144
procedure
adams(a,b:real;n,kolfun:int
eger;x:real;var
y_1:TFunZnach)
h=(b-a) / n
I
I>4
K
K>kolfun
fun[k,i]=f(y_1[k],x)
K=K+1
K
runge_ku(a,b,1,1,x,y_1)
x=x+h
I=I+1
I
I
I>5
K
K>kolfun
y_1[k]=y_1[k]+h/24*(55*fu
n[k,4]-59*fun[k,3]+37*fun[
k,2]-9*fun[k,1])
fun[k,1]=fun(k,2)
fun[k,2]=fun(k,3)
fun[k,3]=fun(k,4)
fun[k,4]=f(y_1[k],x)
K=K+1
K
x=x+h
I=I+1
I
Возв рат
Рисунок 32 - Схема алгоритма явного метода Адамса
Варианты заданий
145
Таблица 7
№
варианта
1
1
2
3
F1(x,y1,y2)
F2(x,y1,y2)
y1(a)
y2(a)
a
b
2
1
arctg(
)
1  y12  y 22
3
4
5
6
7
sin( y1 y2 )
1
0
-1
1
arctg( x 2  y 22 )
sin( x  y1 )
0,5
1,5
0
2
cos( y1  xy2 )
-1
1
0
4
xy1y2
1
0
0
5
0,2
0
-1
1
0
0
0
4
0,5
-0,6
-0,5
2
1
2
3
5
0
0,5
0
1,2
-1
0
3
2
sin(y1y2)
1
1
1
4
y2 cos x  sin 2 x
0,8
3,5
2
3
cos( y1  xy2 )
1
-1
2
4
cos( xy1 y2 )
sin( y1  y2 )
sin( x  y2 )
0
0
-2
-3
0
-1
2
0
1
5
2
4
0
1
-1
1
y1  x
e y1 y2
4
5
y12  y 22
x
1  x 2  y 22
7
8
sin( x 2  y 22 )
sin y 2
x cos( y1  y2 )
9
10
sin y1 cos 3 y 2
sin(y1y2)
11
2
arctg( 1
2  y2 )
1  y1
6
12
13
y2
1  x 2  y12
y1  x
y12  y 22
1  x 2  y12
cos( xy1 )
cos y1
sin( y1  y2 )
cos y1 cos y2 )
cos(xy1y2)
14
15
16
sin( xy2 )
cos( y1 y2 )
y2ln x
17
cos y1 cos y2 )
18
arctg( 1
)
1  y12  y 22
sin y1
0
0
-2
1
y1+y2
x cos( y1  y2 )
cos( y1 y2 )
y2
1  x 2  y12
cos( xy1 )
Y1y2
y2 cos x  sin 2 x
0
-1
-1
0
1
5
0
0
2
4
4
4
sin( y1  y2 )
1
1
0
3
23
cos( x  y2 )
sin( x  y2 )
0,7
-0,5
0
4
24
x cos( y1  y2 )
y2
1  x 2  y12
0
0
0
2
x
y2
1  x 2  y12
0,2
0
0
3
4
5
6
7
19
20
21
22
25
1 x  y
Продолжение таблицы 7
1
2
146
y2
2
2
2
y2
1  x 2  y12
3
sin y 2
26
27
28
29
30
y2
1  x 2  y12
sin( xy2 )
y2ln x
sin( y1 y2 )
cos( y1 y2 )
1
-1
0
1
sin( y1 y2 )
-2
3
-1
1
x  cos( xy1 )
y1y2
cos( xy1 y2 )
0
0
-1
0
0
2
0
-5
0
2
0
2
147
Лабораторная работа №10
Численное интегрирование и дифференцирование
Метод Симпсона
Входные параметры: a,b – интервал интегрирования; h – шаг интегрирования; fun –
вид функции.
Выходные параметры: d – погрешность интегрирования; res – значение интеграла
функции.
Схема алгоритма показана на рисунке 33.
Пример. Вычислить приближенное значение определенного интеграла с точностью
0,01
1

0
cos x  1
x2
dx
Текст программы:
procedure Simpson(fun:string;a,b,h:real;var res,d:real);
var f0,f1,s,s1,s2,h,x1,x2:real;
n:integer;
begin
form3.Memo1.Lines.Add('');
f0:=Execute(fun,a);
f1:=Execute(fun,b);
s:=f0-f1;
s1:=(b-a)*(f0+f1+4*Execute(fun,(a+b)/2))/6;
n:=2;
repeat
h:=(b-a)/n; x1:=a+h/2; x2:=a+h; s2:=s;
for i:=1 to n do
begin
s2:=s2+4*Execute(fun,x1)+2*Execute(fun,x2);
x1:=x1+h; x2:=x2+h;
end;
s2:=s2*h/6; d:=abs(s1-s2)/15; s1:=s2; n:=n*2;
until d<h;
res:=s1;
end;
Вычисления по программе привели к следующим результатам:
Результат: - 0.4864297
Погрешность вычисления:0,005
148
procedure
simpson(fun:string;a,b,eps
:real;var s,d::real;)
f0=execute(fun,a)
f1=execute(fun,b)
s=f0-f1
s1=(b-a)*(f0+f1+4*execute
(fun,(a+b)/2))/6
n=2
N
N=N*2
h=(b-a)/ n
x1=a+h/2
x2=a+h
s2=s
I
I>N
s2=s2+4*execute(fun,x1)+
2*execute(fun,x2)
x1=x1+h
x2=x2+h
I=I+1
I
s2=s2*h/ 6
d=abs(s1-s2)/ 15
s1=s2
n=n*2
d<eps
N
res=s1
Возв рат
Рисунок 33 - Схема алгоритма метода Симпсона
Варианты заданий для решения
дифференцирования приведены в таблице 7.
задач
численного
интегрирования
и
Квадратурная формула Гаусса
Входные параметры: a,b – интервал интегрирования; fun – вид функции.
Выходные параметры: d – погрешность интегрирования; res – значение интеграла
функции.
Схема алгоритма показана на рисунке 34.
149
Пример.
точностью 0,01
1

0
cos x  1
x2
Вычислить приближенное значение определенного интеграла с
dx
Текст программы:
Procedure Kvadratur(fun:string;a,b:real;var res,d:real);
var c,h,h1,c1,x1,x2,x3,f1,f3,s1,s2:real;
n:integer;
begin
c:=sqrt(3/5);
h1:=(b-a)/2;
c1:=c*h1;
x2:=(b+a)/2;
f1:=Execute(fun,x2-c1);
f3:=Execute(fun,x2+c1);
s1:=h1*(5*f1+8*Execute(fun,x2)+5*f3)/9;
n:=2;
repeat
h:=(b-a)/n; h1:=h/2; c1:=c*h1;
x2:=a+h1; x1:=x2-c1; x3:=x2+c1; s2:=0;
for i:=1 to n do
begin
s2:=s2+5*Execute(fun,x1)+8*Execute(fun,x2)+5*Execute(fun,x3);
x1:=x1+h; x2:=x2+h; x3:=x3+h;
end;
s2:=s2*h1/9; d:=abs(s1-s2)/63; s1:=s2; n:=2*n;
until d<h;
res:=s2;
end;
Вычисления по программе привели к следующим результатам:
Результат: - 0.4863854
Погрешность вычисления:0,007
150
procedure
kvadratur(fun:string;a,b,ep
s:real;var res,d::real;)
c=sqrt(3 / 5)
h1=(b-a) / 2
c1=c*h1
x2=(b+a) / 2
f1=execute(fun,x2-c1)
f3=execute(fun,x2+c1)
s1=h1*(5*f1+8*execute(fu
n,x2)+5*f3) / 9
n=2
N
N=N*2
h=(b-a)/ n
h1=a/2
c1=c*h1
x2=a+h1
x1=x2- c1
x3=x2+c1
s2=0
I
I>N
s2=s2+5*execute(fun,x1)+
8*execute(fun,x2)+5*exec
ute(fun,x3)
x1=x1+h
x2=x2+h
x3=x3+h
I=I+1
I
s2=s2*h1/ 9
d=abs(s1-s2)/ 63
s1=s2
n=n*2
d<eps
N
res=s2
Возв рат
Рисунок 34 - Схема алгоритма квадратурной формулы Гаусса
Варианты заданий для решения
дифференцирования приведены в таблице 7.
задач
численного
интегрирования
и
151
Дифференцирование с помощью сплайнов
Входные параметры: a,b – интервал дифференцирования; x – точка
дифференцирования; n – число точек дифференцирования; fun – вид функции.
Выходные параметры: y_1,y_2 – значения первой и второй производной в точке x
соответственно.
Схема алгоритма показана на рисунке 35.
Пример. Продифференцировать функцию e
значение точки х=1.
x2
, количество точек разбиения 5,
Текст программы:
procedure Spl_Integr(fun:string;a,b,x:real;n:integer;var y_1,y_2:real);
var h,h1,h2,aa:real;
y:array of real;
begin
h:=(b-a)/n;
SetLength(y,n-1);
aa:=a;
for i:=0 to length(y)-1 do
begin
y[i]:=execute(fun,aa); form3.Memo1.Lines.Add(floattostr(y[i]));
aa:=aa+h;
end;
i:=trunc((x-a)/h+h/2);
h1:=2*h; h2:=h*h; if i=0 then
begin
y_1:=(-3*y[0]+4*y[1]-y[2])/h1; y_2:=(2*y[0]-5*y[1]+4*y[2]-y[3])/h2;
end;
if (i>0)and(i<n) then begin
y_1:=(-y[i-1]+y[i+1])/h1; y_2:=(y[i-1]-2*y[i]+y[i+1])/h2; end;
if i=n then
begin
y_1:=(y[n-2]-4*y[n-1]+3*y[n])/h1; y_2:=(-y[n-3]+4*y[n-2]-5*y[n-1]+2*y[n])/h2;
end;
end;
Вычисления по программе привели к следующим результатам:
Первая производная:3,808
Вторая производная:10,00
152
procedure
spl_integr(fun:string;a,b,x:
real;n:integer;var
y_1,y_2::real;)
h=(b-a)/ n
Setlength(y,n-1)
aa=a
I
I>length(y)-1
y[i]=execute(fun,aa)
aa=aa+h
I=I+1
I
i=trunc((x-a) / h+h/ 2)
h1=2*h
h2=h*h
+
i=0
y_1=(- 3*y[0]+4*y[1]y[2])/ h1
y_2=(2*y[0]-5*y[1]+4*y[2]y[3])/ h2
+
i>0 andi<n
y_1=(- y[i-1]+y[i+1])/ h1
y_2=(y[i-1]-2*y[i]+y[i+1])/
h2
i=n
+
y_1=(y[n-2]-4*y[n-1]+
3y[n])/ h1
y_2=(-y[n-3]+4*y[n-2]5*y[n-1]+2*y[n])/ h2
Y_1
Y_2
Возв рат
Рисунок 35 - Схема алгоритма дифференцирования с помощью сплайнов
Варианты заданий приведены в таблице 7.
153
Лабораторная работа №11
Жесткие задачи для систем ОДУ
Метод Гира
Входные параметры: n – порядок системы; y0 – массив из n чисел, содержащий
решение в начальной точке; eps – интегрирования; masq – массив размерности nn,
содержащий матрицу системы.
Выходные параметры: res – массив из n чисел, содержащий решение системы.
Схема алгоритма показана на рисунке 36.
Пример. Решить задачу Коши для системы
 y1  11 y1  9 y 2

 y 2  9 y1  11 y 2
при начальных условиях у1(0)=1, у2(0)=0.
Текст программы:
procedure gira(a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach);
var fun:array[1..NumFun,1..4] of real;
h:real;
begin
h:=(b-a)/n;
for i:=1 to 4 do
begin
runge_ku(a,b,1,1,x,y_1);
x:=x+h;
for k:=1 to kolfun do fun[k,i]:=y_1[k];
end;
for i:=5 to n do
begin
for k:=1 to kolfun do begin
y_1[k]:=fun[k,4]; runge_ku(a,b,1,1,x,y_1);
y_1[k]:=1/25*(48*fun[k,4]-36*fun[k,3]+16*fun[k,2]-3*fun[k,1]+12*h*f(y_1[k],x));
fun[k,1]:=fun[k,2]; fun[k,2]:=fun[k,3];
fun[k,3]:=fun[k,4];
fun[k,4]:=y_1[k];
end;
x:=x+h;
end;
end;
Вычисления по программе привели к следующим результатам:
154
Х
.10000Е
+00
.20000Е
+00
.30000Е
+00
.40000Е
+00
.50000Е
+00
.60000Е
+00
.70000Е
+00
.80000Е
+00
.90000Е
+00
.10000Е
+01
.11000Е
+01
.12000Е
+01
.13000Е
+01
.14000Е
+01
.15000Е
+01
.16000Е
+01
.17000Е
+01
.18000Е
+01
.19000Е
+01
.20000Е
+01
У(1)
.48703Е
+00
.35432Е
+00
.28565Е
+00
.23483Е
+00
.19396Е
+00
.16060Е
+00
.13330Е
+00
.11095Е
+00
.83650Е
-01
.68668Е
-01
.56402Е
-01
.46359Е
-01
.38137Е
-01
.31405Е
-01
.25894Е
-01
.21381Е
-01
.17687Е
-01
.14662Е
-01
.12185Е
-01
.92579Е
-02
у(2)
.34270Е
+00
.32700Е
+00
.27417Е
+00
.22550Е
+00
.18492Е
+00
.15159Е
+00
.12430Е
+00
.10195Е
+00
.82750Е
-01
.67768Е
-01
.55502Е
-01
.45459Е
-01
.37237Е
-01
.30505Е
-01
.24994Е
-01
.20481Е
-01
.16787Е
-01
.13762Е
-01
.11285Е
-01
.91678Е
-02
155
procedure
gira(a,b:real;n,kolfun:integ
er;x:real;var
y_1:TFunZnach)
h=(b-a)/ n
I
I>4
runge_ku(a,b,1,1,x,
y_1)
x=x+h
K
K>kolfun
fun[k,i]=y_1[k]
K=K+1
K
I=I+1
I
I
I>5
K
K>kolfun
y_1[k]=fun[k,4]
runge_ku(a,b,1,1,x,
y_1)
y_1[k]=1/25*(48*fun[k,4]-3
6*fun[k,3]+16*fun[k,2]-3*fu
n[k,1]+12*h*f(y_1[k],x))
fun[k,1]=fun[k,2]
fun[k,2]=fun[k,3]
fun[k,3]=fun[k,4]
fun[k,4]=y_1[k]
K=K+1
K
x=x+h
I=I+1
I
Возв рат
.
Рисунок 36 - Схема алгоритма метода Гира
156
Варианты заданий для решения Жестких задач для систем ОДУ приведены в
таблице 8.
Метод Ракитского (матричной экспоненты).
Входные параметры: n – порядок системы; x – начальное значение x;
h – шаг интегрирования h; Q – массив из n чисел, содержащий решение в начальной точке;
F – массив размерности nn, содержащий матрицу системы.
Выходные параметры: X – массив из n чисел, содержащий решение системы.
Схема алгоритма показана на рисунке 37.
Пример. Решить задачу Коши для системы
 y1  11 y1  9 y 2

 y 2  9 y1  11 y 2
при начальных условиях у1(0)=1, у2(0)=0.
Текст программы:
Procedure MetRak(N:Word;Var H:Real;A:MasReal;Var F,Q:MasReal;Nts,Ind:Integer);
Var
RabMas1: MasReal;
RabMas2: MasReal;
S,Fak : Real;
i,j,k : Byte;
BEGIN
IF Ind=0 Then
Begin
S:=0;
For i := 1 To N Do
For j := 1 To N Do S:=S+A[i,j]*A[i,j];
S:=Sqrt(S); H:=0.1/S; Nts := 0; RabMas1 := A;
For I := 1 To N Do
Begin
For J := 1 To N Do Begin
Q[i][j] := A[i][j]*H/2; F[i][j] := A[i][j]*H
End;
Q[i][i] := Q[i][i] + 1; F[i][i] := F[i][i] + 1
End;
Fak := 1;
For K := 2 To 4 Do
Begin Fak := Fak*k; MulMat(N, RabMas1, A, RabMas2);
For I := 1 To N Do
For J := 1 To N Do
Begin
F[i][j] := F[i][j] + RabMas2[i][j]*Step(H, k)/Fak;
IF k < 4 Then Q[i][j] := Q[i][j] + RabMas2[i][j]*Step(H, k)/(Fak*(k+1));
End;
RabMas1 := RabMas2
End;
MulConst(N, h, Q)
157
End;
IF Nts > 0 Then
Begin
H := H*Step(2,Nts); MulMat(N, F, F, RabMas1);
RabMas2 := F; F := RabMas1;
For I := 1 To N Do RabMas2[i][i] := RabMas2[i][i] + 1;
MulMat(N, Q, RabMas2, RabMas1);
Q := RabMas1
End;
End;
Вычисления по программе привели к следующим результатам:
158
х
.10000Е
+00
.20000Е
+00
.30000Е
+00
.40000Е
+00
.50000Е
+00
.60000Е
+00
.70000Е
+00
.80000Е
+00
.90000Е
+00
.10000Е
+01
.11000Е
+01
.12000Е
+01
.13000Е
+01
.14000Е
+01
.15000Е
+01
.16000Е
+01
.17000Е
+01
.18000Е
+01
.19000Е
+01
.20000Е
+01
у(1)
.47703Е
+00
.34432Е
+00
.27565Е
+00
.22483Е
+00
.18396Е
+00
.15060Е
+00
.12330Е
+00
.10095Е
+00
.82650Е
-01
.67668Е
-01
.55402Е
-01
.45359Е
-01
.37137Е
-01
.30405Е
-01
.24894Е
-01
.20381Е
-01
.16687Е
-01
.13662Е
-01
.11185Е
-01
.91579Е
-02
у(2)
.34170Е
+00
.32600Е
+00
.27317Е
+00
.22450Е
+00
.18392Е
+00
.15059Е
+00
.12330Е
+00
.10095Е
+00
.82650Е
-01
.67668Е
-01
.55402Е
-01
.45359Е
-01
.37137Е
-01
.30405Е
-01
.24894Е
-01
.20381Е
-01
.16687Е
-01
.13662Е
-01
.11185Е
-01
.91578Е
-02
159
procedure
met_rak(n:w ord;;var
h:real;a:masreal;var
f,q:masreal;nts,ind:integer
B
A
+
I
I>N
ind=0
s=0
J
J>N
I
I>N
F[i][j]=F[i][j]+rabmas2[i][j]
*step(h,k) / fak
J
J>N
K<4
Q[i][j]=q[i][j]+rabmas2[i][j]*
step(h,k) / (Fak*(K+1))
s=s+a[i,j]*a[i,j]
J=J+1
J
J=J+1
J
I=I+1
I
rabmas1=rabmas2
s=sqrt(s)
h=0,1/ s
Nts=0
rabmas1=a
I=I+1
I
I
I>N
J
J>N
multconst(N,H,Q)
+
NTS>0
Q[i][j]=a[i][j]*h / 2
F[i][j]=a[i][j]*h
h=h*step(2,nts)
J=J+1
J
multmat(n,F,F,rabma
s1)
Q[i][j]=Q[i][j]+1
F[i][j]=F[i][j]+1
rabmas2=F
I=I+1
I
I
I>N
Fak=1
rabmas2[i][i]=rabmas2[i][i]
+1
K
K>4
I=I+1
I
Fak=Fak*K
mulmat(N,Q,rabmas
2,rabmas1)
multmat(n,rabmas1,a
,rabmas2)
Q=rabmas1
A
B
Возв рат
Рисунок 37 - Схема алгоритма метода Ракитского
Варианты заданий
160
+
Таблица 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
5
.59800Е + 02
.13150Е + 02
-.24925Е + 02
-.50150Е + 02
6
.70200Е + 02
-.11933Е + 02
-.30033Е + 02
-.62267Е + 02
7
.80314Е + 02
.11193Е + 02
-.34904Е + 02
-.73621Е + 02
8
.90250Е + 02 .10750Е + 02
-.39625Е + 02
-.84500Е + 02
9
.10007Е + 03
-.10506Е + 02
-.44247Е + 02
-.95061Е + 02
.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Е+02
-.10214Е+02
-.57893Е+02
-.12103Е+03
.14150Е+03
-.1000Е+02
-.65000Е+02
-.13650Е+03
.15618Е+03
-.99444Е+01
-.72028Е+02
-.15173Е+03
2
.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
3
.17080Е+03
-.1000Е+02
-.79000Е+02
-.16680Е+03
.18538Е+03
-.10136Е+02
4
.11680Е + 03
-.40000Е + 01
-.58000Е + 02
-.11280Е + 03
.12688Е + 03
-.36364Е + 01
5
.11140Е + 03
-.84000Е + 01
-.49800Е + 02
-.10900Е + 03
.12103Е + 03
-.85773Е + 01
6
-.5440Е+00
-.8391Е+00
.4081Е+00
.9129Е+00
-.1000Е+01
.4426Е-02
Матрица системы
Продолжение таблицы 8
1
10
11
2
.10980Е + 03
-.10400Е + 02
-.48800Е + 02
-.10540Е + 03
.11947Е + 03
-.10395Е + 02
161
-.53302Е + 02
-.11558Е + 03
12
.12910Е + 03
-.10467Е + 02
-.57767Е + 02
-.12563Е + 03
13
.13869Е + 03
-.10596Е + 02
-.62202Е + 02
-.13560Е + 03
14
.14826Е + 03
.10983Е + 02
-.66614Е + 02
-.14549Е + 03
15
.15780Е + 03
-.10983Е + 02
-.71008Е + 02
-.15532Е + 03
16
.16732Е + 03
-.11225Е + 02
-.75387Е + 02
-.16510Е + 03
17
.17684Е + 03
-.11491Е + 02
-.79754Е + 02
-.17484Е + 03
18
.18633Е + 03
-.11778Е + 02
-.84111Е + 02
-.18456Е + 03
19
.19582Е + 03
-.12082Е + 02
-.88459Е + 02 .19424Е + 03
20
.20530Е + 03
-.12400Е + 02
Продолжение таблицы 8
1
21
22
23
162
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
-.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
-.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
-.8875Е + 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
-.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
-.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
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
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
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
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
24
25
26
27
28
29
30
-.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
-.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
-.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Е - 0l
-.15933Е + 03
-.31480Е + 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
-Л2342Е+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
.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.992
9Е+00
-.9880Е+00
.1543Е+00
-.9524Е+00
-.3048Е+00
163
Download