Вы находитесь на странице: 1из 139

Министерство образования Республики Беларусь

Учреждение образования
«Полоцкий государственный университет»

О.В.Голубева
Н.А.Гурьева
С.Г.Ехилевский
Ю.Ф.Пастухов
Д.Ф.Пастухов

ЛАБОРАТОРНЫЙ ПРАКТИКУМ ПО ЧИСЛЕННЫМ МЕТОДАМ


НЕКОТОРЫЕ ТЕОРЕМЫ ЧИСЛЕННОГО АНАЛИЗА

Учебно-методическое пособие к лекционным и практическим занятиям


для студентов специальности
1-40 01 01 Программное обеспечение информационных технологий
1-98 01 01 Компьютерная безопасность

Новополоцк
ПГУ
2016
УДК 519.6

Одобрено и рекомендовано к изданию


методической комиссией факультета информационных технологий
В качестве учебно-методического пособия

Кафедра технологий программирования

Рецензенты:
А.Ф. Оськин, кандидат технических наук, доцент, доцент кафедры технологий
программирования;
Р.П. Богуш, кандидат технических наук, доцент, заведующий кафедрой
вычислительных систем и сетей

© Оформление УО «Полоцкий государственный университет», 2016

2
Содержание
№ стр.

1) Введение 4
2) Лабораторная работа №1 Численное решение нелинейных уравнений
и систем нелинейных уравнений. 5
3)Лабораторная работа№2 Эффективный поиск точек экстремума и точек перевала
гладких функционалов 14
4) Постановка интерполяционной задачи. Лабораторная работа №3
Интерполяционный многочлен Лагранжа 24
5) Лабораторная работа №4 Интерполяционный многочлен Ньютона 30
6) Лабораторная работа №5 Интерполяция функций кубическими сплайнами 32
7) Лабораторная работа №6 Сравнение порядков погрешности
интегральных квадратурных формул 41
8) Лабораторная работа №7 Сравнение порядков погрешности в методах
Эйлера и Рунге – Кутты 2 и 4 порядков в ОДУ 1- го порядка. 47
9) Интегральные уравнения Фредгольма второго рода. Лабораторная
работа №8 Численное решение интегральных уравнений. 54
10)Лабораторная работа №9 Решение неявного уравнения теплопроводности
методом прогонки 61
11) Лабораторная работа №10 Решение волнового уравнения с помощью явной
разностной схемой 70
12) Лабораторная работа №11 Интегрирование уравнение Пуассона
на прямоугольнике 80
13)Лабораторная работа по уравнениям математической физики №12
Согласование порядков аппроксимации дифференциального и граничного 91
операторов.
14) Лабораторная работа №13 Аппроксимация двойных интегралов 98
15) Лабораторная работа №14Аппроксимация тройных интегралов 105
16) Лабораторная работа №15 Аппроксимация интегралов в
полярной системе координат 109
17) Лабораторная работа №16 Аппроксимация интегралов в
сферической системе координат 113
18) Приложение 119
19) Список литературы 138

3
Введение

Предмет “Численные методы в инженерных расчётах” является связующим звеном


основных разделов математики таких как: “Математический анализ”,
”Дифференциальные и интегральные уравнения”, “Дискретная математика”, ” Методы
оптимизации”, ” Теория функций комплексной переменной”, ”Исследование операций”,
“Теория функций и функциональный анализ”, ” Уравнения математической физики”,
“Теория вероятностей”, “Линейная алгебра и аналитическая геометрия”. Эти курсы
преподавались и преподаются лекторами факультета ФИТ ПГУ в течение нескольких лет.
Накопленный опыт преподавания явился началом для предмета численные методы для
специальностей 1-40 01 01 (Программное обеспечение информационных технологий),
1-98 01 01(Компьютерная безопасность). По основным разделам математики
написано несколько работ. Математический практикум в численных методах выполняет
те же задачи в математике, как физический практикум выполняет аналогичные функции
для всех разделов физики (механика, молекулярная физика, электричество, магнетизм,
оптика). Все задачи курса “Численные методы в инженерных расчётах” можно условно
разделить на 2 части - получение методов наибольшей точности с устойчивостью ошибки
округления и алгоритмическую оптимизацию. Как показывает опыт достижению
максимальной вычислительной точности(16 верных значащих цифр для чисел с
плавающей запятой), как правило, сопутствует и удачный алгоритм, т.е. параллельно
решается и задача алгоритмической оптимизации.
С другой стороны, предмет “Численные методы в инженерных расчётах”
формулируется на языке функционального анализа, языке уравнений, неравенств, метрик
и норм функциональных пространств. Поэтому в нём более удачно решаются задачи
математического анализа, уравнений в частных производных, теории функций
комплексного переменного. Численный анализ как бы “слеп” к распознаванию
геометрических образов, за исключением методов линейной алгебры, что породило целый
раздел в численных методах по решению систем линейных уравнений и задач на
собственные значения различных линейных операторов. В то время как простейшая
f x  f '' x 
оценка сходимости итерационной формулы Ньютона g x  
'
 q  1 содержит
 f ' x 2
первую и вторые производные, которые являются объектами дифференциальной
геометрии. Известно, что все объекты геометрии можно описать через частные
производные не выше третьего порядков, например, тензор кручения пространственной
кривой. Введение в численные методы алгоритмов, с учётом геометрических инвариантов
позволит эффективно решать современные инженерные и научные прикладные задачи по
дифференциальной геометрии.
Все программы написаны на языках C,C++, т.е. являются общепринятыми
языками по программированию для университетов. Практическая работа
“Интерполяционный многочлен Ньютона ” имеет больший алгоритмический интерес, но и
большую вычислительную сложность, чем в работе “Интерполяционный многочлен
Лагранжа ”. Поэтому авторы благодарят студента второго курса Алексея Карловича как
автора задачи за настойчивость в получении алгоритма при её решении.
Март 2016
Изменения
Последнее издание Пастуховым Д.Ф. дополнено подробным рассмотрением трёх
практических работ с уравнениями в частных производных №9,№10,№11. Практическая
работа Решение уравнения Пуассона является новой, проведён анализ схем с шаблоном
крест и 9 точечным шаблонами, а также написан новый пример для тестирующей задачи.
Приложение содержит полную работу с квадратурными формулами в кратных интегралах.
Май 2017

4
Лабораторная работа №1 Численное решение нелинейных уравнений и систем
нелинейных уравнений.
Рассмотрим нелинейное уравнение с нулевой правой частью
f ( x)  0 (1)
на интервале ( a.b) , содержащем единственный корень уравнения. В случае нескольких
корней необходимо разбить ( a.b) на интервалы единственного изменения знака функции,
то есть изолировать корни уравнения по одному на интервал f (a) f (b)  0 .
Будем считать, что начальная точка xi0 итерации находится на изолированном
интервале с единственным корнем xi0  (ai .bi ), f ai  f bi   0, i  1, n . В случае сходимости
итерации к корню начальную точку можно располагать слева или справа от корня (можно
 
выбирать во всех смежных точках интервалов x0  ai , i  1, n, bn ). Итерационная формула
касательных Ньютона имеет вид:
f xk
x k 1  x k  ' k
 
f x   (2)

Рис.1 График функции f x 


Y f xk  

X
*
0 x x k 1 xk
   
Корнем уравнения (1) называется точка x  (a, b) : f  x   0 f '  x   0  . Из рис.1
* * *

     
*
видно, что точка x k 1 расположена ближе к корню x , чем предыдущая итерация x k . Можно
*
предположить, что lim x k  x .
k 

f x k 
Из прямоугольного треугольника рис.1 получим f ' x k  
x k 1  x k  , откуда
x k 1  x k 
 
f xk
, k  0,1,2,... , т.е. получена формула касательных Ньютона (2) .
 
f ' xk
* *
Введём обозначение x k  x k  x,x k 1  x k 1  x . Вычтем из обеих частей формулы (2)
*
f xk  
решение x , получим x k 1  x k  ' k , k  0,1,2,... .
f x   (3)

5
Определение 1. Говорят, что числовая последовательность x k сходится к предельному
*
значению x с порядком p  0 , если существуют такие положительные числа
''  
*

x f kx 
С  0, h  0, n  N такие, что x k  h, k  N :  lim  C , С   .
k 
x k 1
p
*
2 f ' x
 
Формулы (2) и (3) связаны тождественным преобразованием и, следовательно,
эквивалентны. Справедливо следующее утверждение
 
Теорема 1. Итерационная формула касательных Ньютона (2) при условии, что  f '  x   0 
*

   
сходится со вторым порядком скорости. Имеет место оценка погрешности
2 ( k 1)
x k 1  С k 1 x 0
Доказательство. Преобразуем формулу(3)
 
''  
*
 x
k 2

  
f x
     
f  x   f '  x x k   
* * *
f  x  x k   O x k
3

 
f x k
x k 1  x k  ' k  x k   *   x k      2

f x  
f '  x  x k 
 

''  
f  x x
*
k 

  '  
*
f  x 1
 

' 

*
  
 O x k 2 

 f  x 
   
 ''  
*

   k

 
f x x
f  x x 
''   '     O x 
*
k k 2 
*
k 2
f  x x 1 
' 
*
f  x x  k   
 O x  k 3
   
 2 f  x ' 

 
*


 x k     
2
 x k

  *
    *

 f ' '  x x k   f ' '  x x k 
'
*

 

f  x 1  
' 
*

 O x  k 2



'
*

f  x 1
 



' 

*
 
 O x k 2 

 f  x   f  x 
       

 ''   k
*
 *   ''   k
*
* 
 f  x x  f ''  x x k   f  x x f ''  x x k 
  
  2

  
 
 x k  x k 1   *  O x k  1   *  O x k    x k  x k 1   *   *  O x k 
2

     
2
  

 2 f ' x  f ' x   2 f ' x f ' x 
            
 ''  *  ''  
*
 *
 f  x f  x  f ''  x 
 
 x k   *   *   O x k   x k
2

 '  ' 
   

2    O x k 3
' 
*
   (4)
 2 f  x f  x  2 f  x
       
Из формулы (4) находим порядок скорости сходимости
''  
*

x k f  x 
lim     С, p  2 (5)
' 
2
x k 1
k  *
2 f  x
 
Что и требовалось доказать.

6
 
Замечание 1. Формула (5) согласуется с рис.1  f ''  x   0, f '  x   0,x k 1  0  , т.е.
* *

     
*
итерация x k 1 находится правее решения x .
Замечание 2. Из формулы (5) следует оценка погрешности
*
f ''  x 
2 4 2k
x k 1  С x k  С 2 x k 1  ...  С k x1  С k 1 x0
2( k 1)
0 , С   (6)
' 
k  *
2 f  x
 
начальное удаление от решения, x - удаление от решения после k  1 итерации.
k 1


Замечание 3. При выводе формулы (4) использовалось условие f  x   0 , следовательно,
*

 
*
итерация (4) сходится не к произвольной точке, а к решению x (удаление
*
x k 1 отсчитывается от решения x ).
m
*
 '
* *
 *

Замечание 4. Если f  x   0 для кратного корня x , f ( x )   x  x   x ,  x   0, m  2 .
     
Сходимость итерации x к нулю не квадратичная, а линейная (с первым порядком).
k 1

Доказательство.
f x k  x k   x k  x k x k 
m

x  x  ' k  x k 
 
k 1 k
 
f x  mx k   x k   x k   ' x k  m x   x  x 
m 1 m k k ' k

x k
x k
 
 x   x 0 m
(7)
 ' k k

 m  x k 
  x 
k 

Из формулы (7) и определения 1 получим значение предела
x k 1
lim 1
  С , p  1 , т.е. сходимость линейная с первым порядком.
k 
x k 1 m
Несмотря на потерю скорости сходимости в случае кратного корня можно предложить
модифицированную формулу Ньютона, которая всегда сходится со вторым порядком.
m
 
Имеем f ( x )   x  x   x ,  x   0, m  2 .
* *

   
f ( x)
Рассмотрим вспомогательную функцию F ( x )  (8)
f ' ( x)
Для неё составим итерацию аналогичную формуле Ньютона
k 1 F xk  
x  x  ' k , k  0,1,2,...
k

F x   (9)

Теорема 2. Итерационные формулы (2) и (9) сходятся к одному и тому же решению, но(9)
Имеет второй порядок сходимости для любого m .
Доказательство.

7
m
   
 x  x   x 
* *
 x  x
f ( x)
Поскольку F ( x )  '    *   , то функция F (x )
* m 1 * m
f ( x)     m
m x  x   x    x  x   ' x 
x x

   
*
имеет тот же самый корень в точке x , что и итерация (2) несмотря на различие
функций F (x ) и f (x ) корень кратности 1 и, следовательно, по теореме 1 имеет второй
порядок сходимости. Для однократного корня можно применить итерацию (2), имеем:
 
F xk
x k 1  x k  ' k  x k  ' k
 
f xk 1
 k

f xk f ' xk    
F x          
f x  f ' xk 2  f xk f ' xk 

x
f '
x k 2
 f x      
k
f '
x k
(10)


 f '
x  
k 2 

Таким образом, мы показали, что итерационная формула (10) сходится к тому же
корню, что и итерация (2), но в отличие от (2) всегда со вторым порядком при любой
кратности корня. Теорема 2 доказана. Формулу (10) называют также модифицированной
формулой Ньютона.
Для функции нескольких переменных формула (2) , решающей одновременно
систему несколько уравнений, другими словами, вектор – уравнение
 F1 ( x1 , x2 ,...xn )  0
 F ( x , x ,...x )  0

F ( x)  0   2 1 2 n
(11)
 ...
 F2 ( x1 , x2 ,...xn )  0
А итерация, решающая (11), принимает матричный вид
x k 1  x k  F ' x k  F x k , k  0,1,2,...
1
(12)
  F k
  
Где квадратная матрица F ' xi  i xi , i, j  1, n, x k  x1 , x2 ,...xn , называемая
k

x j
k k k

 F k 
якобианом, очевидно, должна быть невырожденной: det  i xi   0 . Иначе, не  
 x j 
существует матрицы обратной к матрице Якоби в уравнении (12). Действительно, возьмём
*
дифференциал от (11) в окрестности решения – точки x
 * * * * * *
dF ( x 1 , x 2 ,... x n )  F1 ( x1 , x 2 ,... x n )dx
 1

 * * * * * *
*
dF2 ( x1 , x 2 ,...x n )  F2 ( x1 , x 2 ,...x n )dx
dF( x )   (13)
 ...
 * * * * * *
dFn ( x1 , x 2 ,...x n )  Fn ( x1 , x 2 ,...x n )dx
 
dx  dx1, dx2 ,...,dxn    x1  x1, x2  x2 ,...,xn  xn 
* * *

 
Формула (13) эквивалентна
1
* * n
F  *  *   * 
dFi ( x )  Fi ( x )  Fi ( x )  Fi ( x )   i  x dx j  F ( x )  F '  x dx  dx   F '  x   F ( x ) (14)
j 1 x j       
* *
Учитывая, что итерация x k 1 ближе к решению x (заменим x на x k 1 ), чем x k из (14),
  
получим x k  x k 1  dx  F ' x k
1
  
F ( x k )  x k 1  x k  F ' x k
1
F ( xk ) (15)

8
Матричная формула касательных Ньютона (15) кроме невырожденности матрицы
Якоби для получения максимальной скорости сходимости ( p  2 ) требует
дополнительных условий[1] с оценкой погрешности аналогичной формуле (6)
Теорема 3.Пусть a  x : x  X H  a. Пусть при некоторых a, a1, a2 ,0  a,0  a1, a2  
Выполняются условия
F ( x)
' 1

H
 a1 y Y при x  a , y (16)

F (u1 )  F (u2 )  F ' (u2 )u1  u2   a2 u2  u1 при u1, u2  a .


2
H (17)
Y

 
Обозначим с  a1  a2 , b  min a, c1 . Тогда справедливо утверждение
(О сходимости метода Ньютона). При условиях (16),(17) x0 a итерационный процесс
Ньютона (15) сходится с оценкой погрешности
xn  X
X

 c 1 c x0  X
H
 2n
(18)
Отметим, что (18) является многомерным аналогом доказанной нами формулы(6), (16)
обеспечивает невырожденность матрицы Якоби, (17) эквивалентно условию Липшица для
функции F (u ) , кроме того, требуется гладкость функции F (u ) .
Однако на практике удобно пользоваться не матричной формулой (15), а формулой
Ньютона – Зейделя(19), требующей знание не n 2 элементов матрицы Якоби, а всего n
элементов (в случае если все её диагональные элементы не вырождены). Это уменьшает
вычислительные затраты (машинное время) и полную ошибку округления.
 m 1 F1 ( x1m , x2m ,...,xnm )
 1
x  x1
m
 ' m m m
,
 F1 x1
( x 1 , x 2 ,..., x n )
 F ( x m 1 , x m ,...,xnm )
 x2m 1  x2m  '2 1 m 1 2 m ,
 F2 x 2 ( x1 , x2 ,...,xnm )

 ....
 m 1 m 1 m 1 m m
(19)
 x m 1  x m  Fi ( x1 , x2 ,...,xi 1 , xi ,...,xn ) ,
 i i
Fi x i ( x1m 1 , x2m 1 ,...,xim11 , xim ,...,xnm )
'


 ....
 m 1 m 1 m 1 m 1 m 1 m
 x m 1  x m  Fn ( x1 , x2 ,...,xi 1 , xi ,...,xn 1 , xn )
 n n
Fn x n ( x1m 1 , x2m 1 ,...,xim11 , xim 1 ,...,xnm11 , xnm )
'

Для использования формулы Ньютона – Зейделя(19) требуется выполнение условий:
Теорема 4.(достаточные условия применимости формулы Ньютона - Зейделя)
Пусть открытая область A  Rn содержит начальную итерацию x10 , x20 ,...,xn0  A и решение  
* * *

 x1 , x2 , ,...,x n   A (решение системы уравнений (11)). Функция F ( x), x  A конечного числа
 
n переменных:
1) Дважды непрерывно дифференцируема F ( x)  C 2 ( A)

Fi ( x )
2) Матрица Якоби i, j  1, n обладает диагональным преобладанием:
x j
Fi ( x ) n
Fi ( x )
xi
 M 1,i  
j 1, j i x j
, i  1, n, x  A

3) Диагональные элементы матрицы Якоби равномерно не вырождены:

9
Fi ( x )
 M 2,i  0, i  1, n, x  A где M1,i , M 2,i , i  1, n - некоторые константы.
xi
M1,i
 qi  1, i  1, n .Обозначим q  max qi
M 2, i i 1, n

Тогда система уравнений (6) сходится к единственной стационарной точке(5), по


крайней мере, с первым порядком скорости и имеет место оценка погрешности после m
итераций:
(1  q) x 0 q m (1  q)q m
4) x  x  x 
m m
 l , где l0  x1  x 0 - расстояние между
1 q 1  q 2 0

начальными итерациями x 0 , x1 , x0  x10  x1, x20  x2 ,...,xn0  xn . 
Доказательство теоремы 4 дословно повторяет доказанную нами теорему 1 во второй
лабораторной работе (для матрицы Гесса) куда мы делаем ссылку и оправляем читателя.
Кроме достаточных условий сходимости итерационных формул (2),(19)необходимо
получить условие задания открытой области A  Rn , в которую мы будем помещать
начальную точку итерации. Для этого воспользуемся формулой простой итерации,
которую сведём к формуле Ньютона – Зейделя. Метод простой итерации пишут в виде
формулы:
 
x k 1  g x k , k  0,1,2,... (20)
Из формулы (20) получим, полагая непрерывную дифференцируемость функции g (x )
x k 1  x k  g x k   g x k 1   g ' x k 1 x k  x k 1  .
Обозначим y k  x k 1  x k , y k 1  x k  x k 1, тогда y k  g ' x k y k 1  O y k     .2

Возьмём норму от последнего уравнения y k  g ' x k   y k 1 (21)


Из (21) получаем достаточное условие, наложенное на функцию g (x ) , при котором
отображение (20) будет сжимающим g ' x k 1   q  1, k  1,2,... (22)
Используем формулу (20), условие (22) для указания области сходимости в итерации (2)
f x k   f ' x k   f x k  f '' x k   f x k  f '' x k  , тогда
2

x k 1  g x k   x k   '
 k
  
f ' x k 
g x 1
 f ' x k 2  f ' x k 2
f x k  f ' ' x k 
g ' x k    q  1, k  1,2,...
 f x 
' k 2 (23)

Рекомендации к программе
1) Используем формулу (2) для нахождения корней функции 1 переменной и формулу
(19) для поиска корней системы нелинейных уравнений.
2) Приведём пример из задачника по численным методам[2]в качестве теста
x  g ( x)  e 2 x  1, f ( x)  x  e 2 x  1 . Возьмём 2 начальные точки
итерации. Воспользуемся формулой (23)
g ' x   2e 2 x , g '  10   2e 20  1 - в точке x 01  10 достаточные условия выполнены,
f x k  f ' ' x k  x  e 2 x  1  4e 2 x
g x
' k
  , g ' 10  0.99999998 1 в точке x 01  10
 f x 
' k 2
1  2e  2x 2

достаточные условия также выполнены.


3) Запишем программу для корней уравнения функции 1 переменной, число итераций
n  20 , учтём, что каждое выражение, использующее в цикле знак равно,
рассматривается компилятором с новым значением циклической переменной слева от

10
знака равно и со старым значением циклической переменной справа от знака равно.
Это упрощение позволяет не использовать массивы данных и записывать уравнения
f xk  
максимально коротко, например запись формулы x k 1  x k  ' k в программе
f x  
f x 
эквивалентна формуле x  x  ' .
f x 
4) Поскольку найденные корни нелинейных функций зачастую не являются
рациональными числами, или представимыми в виде композиции элементарных
функций, то единственной возможной проверкой их истинности является проверка

при подстановке в уравнение f ( x ) : f  x   0 .
*

 
#include<stdio.h>
#include<math.h>
const int n=30;
int main()
{
int i;
double x,y;
x=10.0;
for(i=0;i<=n;i++)
{
x=x-(-x+exp(2.0*x)-1.0)/(-1.0+2.0*exp(2.0*x));

}
printf("x=%.16lf\n",x);
printf("proverka :f(%lf)=%.16lf\n",x,-1.0-x+exp(2.0*x));
}
Для начальной точки x 01  10 программа возвращает
x=-0.7968121300200202
proverka :f(-0.796812)=0.0000000000000001
Press any key to continue
x  g ' (-0.7968121300200202)  2e2 x  2e1.5936  0.203, т.е. достаточные условия (23)
выполнены от начальной точки x 01  10 до первого корня x=-.7968121300200202.
Для начальной точки x 02  10 программа (n=30)возвращает второй корень
x=0.0000000000000000
proverka :f(0.000000)=-0.0000000000000001
Press any key to continue
Однако, сходимость для второй начальной точки хуже, чем для первой начальной точки,
так как q2  0.99999998очень близка к 1, поэтому и число итераций больше( n2  30 ), чем
в первом случае( n1  20 ).
5) Рассмотрим пример с системой нелинейных уравнений[2]:

 x3  y 2  1 
 F1 ( x, y )  x  y  1  0
3 2

 3   (24)
 xy  y  4 
 F2 ( x, y )  xy  y  4  0
3

Составим для приведенной вектор – функции матрицу Якоби

11
F1 ( x, y ) F1 ( x, y )
Fi ( x, y ) x y 3x 2  2y
(i, j  1,2)   3
x j  F 2 ( x , y ) F2 ( x , y ) y 3xy 2  1
x y
По теореме 4 матрица Якоби имеет диагональное преобладание в
точках  1,1, (1,1),(1,1),(1,1) (выполняется первое условие теоремы 4). Которые мы
используем в качестве начальной точки итерации.
Для итерации
 k 1 F1 ( x, y )  k 1 x3  y 2  1
 k

 x  x 
 x x '
k

 F1x ( x, y ) 3x 2
 
 y k 1  y k  xy  y  4
3
 y k 1  y k  F2' ( x, y )
 F2 y ( x, y )  3xy 2  1
запишем программу
#include<stdio.h>
#include<math.h>
int main()
{
int i,n;
double x,y;
n=20;
x=-0.5;
y=1.0;
for(i=1;i<=n;i++)
{
x=x-(x*x*x-y*y-1.0)/(3.0*x*x);
y=y-(x*y*y*y-y-4.0)/(3.0*x*y*y-1.0);
}
printf("x=%.16lf y=%.16lf\n",x,y);
printf("proverka :f1(%lf,%lf)=%.16lf,f2(%lf,%lf)=%.16lf\n",x,y,x*x*x-y*y-
1.0,x,y,x*y*y*y-y-4.0);
}
   
Для начальной точки x01, y 01  (1,1) после 1 итерации получим x11, y11  (0,4) и,
следовательно, нарушено второе условие теоремы 4 равномерной невырожденности (на
ноль делить нельзя). Поэтому, сохраняя знаки координат, изменим их значения
 
x01, y 01  (0.5,1) . Программа возвращает значения
x=1.5020390491806941 y=1.5455686009344596
proverka :f1(1.502039,1.545569)=0.0000000000000071,f2(1.502039,1.545569)=-0.000
0000000000018
Press any key to continue
   
Для начальной точки x02 , y 02  (1,1) после 1 итерации получим x12 , y12  (0,4) и,
следовательно, нарушено второе условие теоремы 4 равномерной невырожденности.
 
Поэтому, сохраняя знаки координат, изменим их значения x02 , y 02  (1.5,1) . Программа
возвращает значения
x=1.5020390491807305 y=1.5455686009344458
proverka :f1(1.502039,1.545569)=0.0000000000002953,f2(1.502039,1.545569)=0.0000
000000000000
Press any key to continue
 
Для начальной точки x03 , y 03  (1,1) программа возвращает значения

12
x=1.5020390491806925 y=1.5455686009344602
proverka :f1(1.502039,1.545569)=-0.0000000000000053,f2(1.502039,1.545569)=-0.00
00000000000004
Press any key to continue.
 
Для начальной точки x , y 04  (1,1) программа возвращает значения для n  70
04

x=1.5020390491807114 y=1.5455686009344531
proverka :f1(1.502039,1.545569)=0.0000000000001439,f2(1.502039,1.545569)=0.0000
000000000000.
Press any key to continue.
Откуда мы заключаем, что система уравнений (24) имеет единственное решение
x=1.5020390491807305 y=1.5455686009344458

Литература
1)Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – 6-е изд. –
М.:БИНОМ. Лаборатория знаний.
2)Бахвалов Н.С., Лапин А.В., Чижонков Е.В. Численные методы в задачах и упражнениях:
учебное пособие. – М.:БИНОМ. Лаборатория знаний,2010. – 240 с.

13
Лабораторная работа№2 Эффективный поиск точек экстремума и точек перевала
гладких функционалов

Введение
Градиентные методы являются не достаточно эффективными с точки зрения
точности. Действительно, пусть необходимо найти решение с абсолютной
точностью 103 , а значение функционала в экстремальной точке с точностью порядка
10 
3 2
 106 - 6 значащими цифрами. Зададим шаг итерации h  0.001 с начальным
расстоянием между первым приближением и стационарной точкой на 100 единиц.
Понадобится число 102 / 103  105 итераций (если градиент по модулю 1, иначе точность
оценки ещё хуже или число итераций ещё больше), в то время как можно получить
решение и экстремальное значение гладкого функционала с абсолютной точностью
1015 всего за 30 шагов итерации с тем же начальным удалении от стационарной точки.
Число арифметических операций и ошибка округления пропорциональны размерности
цикла. Одним из эффективных методов численного решения системы уравнений является
метод Зейделя[2]. Даже более эффективным по сравнению с формулой касательных
Ньютона (в случае если метод Зейделя и метод Ньютона применимы одновременно). В
матричном методе Ньютона нужно вычислить n 2 элементов матрицы Якоби, погрешность
дополнительно увеличивается при отыскании обратной матрицы к матрице Якоби:
   1
     1
x m 1  x m  F ' x m * F x m , где F ' x m - матрица обратная к матрице Якоби. Метод
Зейделя использует только диагональные элементы матрицы Якоби, т.е. n элементов.
Поэтому при одинаковом числе итераций в методе Зейделя меньше элементарных
операций и, следовательно, ошибка округления.
Определение 1. Среди двух методов, решающих одну и ту же задачу с одинаковой
точностью при одинаковых начальных условиях, более эффективным назовём тот,
который использует минимальное число элементарных операций(+,-,/,*).

Постановка задачи

Рассмотрим n - мерную x  x1, x2 ,...,xn  A  Rn задачу на безусловный экстремум
достаточно гладкого функционала f ( x)  C 3 A , т.е. множество функционалов трижды
непрерывно дифференцируемых в открытой области A , имеющих непрерывные частные
производные до 3 – го порядка включительно[1].
 f ( x1, x2 ,...,xn )  extr
 (1)

 1 2
x , x ,..., x n   A  R n
, f ( x )  C 3
 A 
Для поиска экстремальных точек задачи (1) можно использовать 2 подхода. Первый
заключается в исследовании основного функционала, например, градиентными методами.
Другой подход заключается в использовании необходимых условий экстремума функции
нескольких переменных[1]:
 f ' x1 ( x1 , x2 ,...,xn )  F1 ( x1 , x2 ,...,xn )  0
 '
 f x 2 ( x1, x2 ,...,xn )  F2 ( x1 , x2 ,...,xn )  0
 (2)
 ...
 f ' x ( x , x ,...,x )  F ( x , x ,...,x )  0
 n 1 2 n n 1 2 n

где ( x1, x2 ,...,xn ) - стационарная точка, т.е. решение системы уравнений (2).
Будем решать систему уравнений (2) численно методом простой итерации.
Метод Зейделя для системы уравнений заданных в неявном виде:[2]:

14
 
 F1 x1m 1 , x2m ,...,xnm  0,

 m 1 m 1
 F2 x1 , x2 ,...,xn  0,
m

 (3)
 ...
 n 1 2 n 1 n 
 F x m 1 , x m 1 ,...,x m 1 , x m 1  0
То есть исходная система (2) сводится к последовательному решению n уравнений
 
системы (3), каждое из которых Fi x1m1, x2m1,...,xim1,...,xnm  0 , i  1, n представляет
уравнение с одной неизвестной xim1 переменной, а все остальные переменные при
фиксированной итерации остаются “замороженными”, т.е. постоянными. В этом случае
можно для нахождения i - ой переменной использовать i - ое уравнение с
явным видом итерации – формулу касательных Ньютона для уравнения с одной
неизвестной переменной:

 m 1 F1 ( x1m , x2m ,...,xnm )


 x1  x1m  '
,
 F1x1 ( x1m , x2m ,...,xnm )
 F2 ( x1m 1 , x2m ,...,xnm )
 x2m 1  x2m  ,
F2 x 2 ( x1m 1 , x2m ,...,xnm )
'


 ....
 (4)
 x m 1  F ( x m 1 , x m 1 ,...,xim11 , xim ,...,xnm )
x  'i 1 m 1 2 m 1
m
,
 i Fi x i ( x1 , x2 ,...,xim11 , xim ,...,xnm )
i


 ....

 x m 1  Fn ( x1m 1 , x2m 1 ,...,xim11 , xim 1 ,...,xnm11 , xnm )
x  '
m
 n Fn x n ( x1m 1 , x2m 1 ,...,xim11 , xim 1 ,...,xnm11 , xnm )
n

  
Обозначим вектор x m  x1m ,x2 m ,...,xn m  x1m  x1, x2m  x2 ,...,xnm  xn , аналогично: 
 
x m1  x1m1,x2m1,...,xn m1  x1m1  x1, x2m1  x2 ,...,xnm1  xn  ,где вектор ( x1, x2 ,...,xn ) -
представляет стационарную искомую точку решения системы (2)  (5), т.е.:
 lim x1m1  lim x1m  x1 , f x'1 ( x1 , x2 ,...,xn )  0,...,lim xnm1  lim xnm  xn , f x'n ( x1 , x2 ,...,xn )  0
m m m m
 '' (5)
 f xi xi ( x1 , x2 ,...,xn )  0, i  1, n
Перейдём к старой переменной – функции f ( x1, x2 ,...,xn ) , учитывая обозначения (5)
f x'i x1m1, x2m1,...,xim1,...,xnm   Fi x1m1, x2m1,...,xim1,...,xnm , i  1, n .
Вычтем из правой и из левой части (4) каждого i - го уравнения xi ,
xim1  xim1  xi , xim  xim  xi , кроме того, в частных прозводных f x' , f x'' x переменные с
i i i

порядком m и m  1 выразим через переменные xkm , xkm1 :


xkm1  xk  xkm1, xkm  xk  xkm , k  1, n

15
 m 1 f x'1 ( x1  x1m , x2  x2m ,...,xn  xnm )
x1  x1 
m
,
 f x'1' x1 ( x1  x1m , x2  x2m ,...,xn  xnm )

x m 1  x m  f x' 2 ( x1  x1m 1 , x2  x2m ,...,xn  xnm )
,
 2 2
f x' '2 x 2 ( x1  x1m 1 , x2  x2m ,...,xn  xnm )

 ....
 (6)
 m 1 f x'i ( x1  x1m 1 , x2  x2m 1 ,...,xi 1  xim11 , xi  xim ,...,xn  xnm )
xi  xi 
m
,
f x'i' xi ( x1  x1m 1 , x2  x2m 1 ,...,xi 1  xim11 , xi  xim ,...,xn  xnm )

 ....

 m 1 f x' n ( x1  x1m 1 , x2  x2m 1 ,...,xn 1  xnm11 , xn  xnm )
xn  xn 
m

 f x' 'n x n ( x1  x1m 1 , x2  x2m 1 ,...,xn 1  xnm11 , xn  xnm )

Сходимость метода

Теорема 1. (условия сходимости итерации (6)).


Пусть открытая область A  Rn содержит начальную итерацию x10 , x20 ,...,xn0  A и  
 
стационарную точку x1, x2 , ,...,xn  A (решение системы уравнений (2)).
Функция f ( x), x  A конечного числа n переменных:
1) Трижды непрерывно дифференцируема f ( x)  C 3 ( A)
2) Матрица вторых частных производных (матрица Гесса) обладает диагональным
n
преобладанием f x'i' x j ( x )i, j  1, n : f x'i' xi ( x )  M1,i  
j 1, j i
f x'i' x j ( x) , i  1, n, x  A

3) Диагональные элементы матрицы Гесса равномерно не вырождены:

f x'i' x i ( x )  M 2,i  0, i  1, n, x  A где M1,i , M 2,i , i  1, n - некоторые константы.


M1,i
 qi  1, i  1, n .Обозначим q  max qi
M 2, i i 1, n

Тогда система уравнений (6) сходится к единственной стационарной точке(5), по


крайней мере, с первым порядком скорости и имеет место оценка погрешности после m
итераций:
(1  q) x 0 q m (1  q)q m
4) x m  x m  x   l0 , где l0  x1  x 0 - расстояние между
1 q 1  q 2


начальными итерациями x 0 , x1 , x0  x10  x1, x20  x2 ,...,xn0  xn . 
.
Доказательство проведём по индукции (достаточность).
Разложим последовательно
f x'i ( x1  x1m1, x2  x2m1,...,xi 1  xim11, xi  xim ,...,xn  xnm ),i  1, n , входящую в каждое
уравнение системы (6) в ряд Тейлора с центром в стационарной точке, для первого
уравнения имеем:

16
1) i  1 :
n n
f x'1 ( x1m , x2m ,...,xnm )  f x'1 ( x1, x2 ,...,xn )   f x'1' x j ( x)x mj  O1 x m    f x'1' x j ( x)x mj  O1 x m  в
2 2

j 1
  j1  
силу справедливости (5). Где x m  maxx mj , x mj  x m , j  1, n , m  0,1,2,... . (7)
j 1, n

lim i (x m )  Сi  0, i  1, n .
 x m 0

В силу условий (5),(6),(7) и условия 1) теоремы:



n
f x'1 x   f x'1' x j ( x )x mj  O 1 x m 
2

f ( x1  x , x2  x ,...,xn  x )
' m m m
j 1
 
x1m 1  x1m  x1 1 2 n
 x1m  
f ''
x1 x1 ( x1  x , x2  x ,...,xn  x )
1
m
2
m
n
m
f x'1' x1 ( x1  x1m , x2  x2m ,...,xn  xnm )
n

f ( x )x mj  O  1 x m 
'' 2

j 1
x1 x j
  x1m
x m
 x 
m

f x'1' x1 ( x1  x1m , x2  x2m ,...,xn  xnm ) ( x1  x1m , x2  x2m ,...,xn  xnm )
1 1
f x'1' x1
f x'1' x1 ( x1 , x2 ,...,xn )

(В силу условия 1) теоремы) f ( x)  C 3 ( A) :


n

f ''
x1x j ( x )x mj
x1m
 O x m   x1m   O x m  
j 2 2 2

f x1x1 ( x1  x , x2  x2 ,...,xn  xn )


'' m m m
  n
 
1
f
j 1
( 3)
x1x1x j ( x1 , x2 ,...,xn )x mj
1
f x'1' x1 ( x1 , x2 ,...,xn )
n n

f ''
x1 x j ( x )x mj f ''
x1 x j ( x )x mj
 O  x m 
j 2 j 2 2
  x1m  x1m 
f ''
x1 x1 ( x1  x , x2  x ,...,xn  x )
1
m m
2
m
n f ''
x1 x1 ( x1  x , x2  x ,...,xn  x )
1
m m
2
  m
n
n

f ''
x1 x j ( x )x mj
 O  x m  .
j 2 2
x1m 1  
f ( x1  x , x2  x ,...,xn  x )
''
x1 x1
1
m
 m
2
m
n

Оценим последнее выражение по модулю (в следующей оценке использовано неравенство


треугольника для модуля суммы величин и неравенство (7)):
n n

 f x'1' x j ( x ) x mj x m  f x'' x ( x )
 O x m   ''  O x m 
1 j
j2 2 j2 2
x1m 1 
f x1 x1 ( x1  x1 , x2  x2 ,...,xn  xn )
'' m m m   f x x ( x1  x1 , x2  x2 ,...,xn  xn )
m m m  
1 1

Используя условие равномерной невырожденности 3) и условие диагонального


преобладания 2) Т.1:
n n
f x'1' x1 ( x1  x1m , x2  x2m ,...,xn  xnm )  M 2,1 , x  A ; M1,1  
j 1, j 1
f x'1' x j ( x)   f x'1' x j ( x ) :
j 2

M1,1
x1m1  x m
 x m q1  x m q  x m (8.1)
M 2,1
3) Для произвольного i  го уравнение системы (6) продолжим.
По индукции предположим выполнение неравенств xkm 1  x m , k  1, i  1 , тогда повторяя
преобразование с i  м уравнением системы:

17
i 1 n
f x'i ( x1m1, x2m1,...,xim ,...,xnm )  f x'i ( x1, x2 ,...,xn )   f x'i' x j ( x)x mj1   f x'i' x j ( x )x mj  Oi x m  
2

j 1 j i
 
i 1 n
  f x'i' x j ( x)x mj1   f x'i' x j ( x)x mj  Oi x m 
2

j 1 j i
 
f x'i ( x1  x1m1 ,...,xi1  xim11 , xi  xim ,...,xn  xnm )
xim1  xim   
f x''i xi ( x1  x1m1 ,...,xi 1  xim11 , xi  xim ,...,xn  xnm )
i 1 n

 f x'i' x j ( x )x mj 1   f x'i' x j ( x )x mj  Oi x m 


2

j 1 j i
  xim
  
f x'i' xi ( x1  x1m 1,..., xi 1  xim11, xi  xim ,..., xn  xnm ) f x'i' xi ( x1  x1m 1 ,..., xn  xnm )
f x'i' xi ( x1, x2 ,..., xn )
i 1 n

 f x''i x j ( x)x mj1  f ''


xi x j ( x )x mj
xim
 O x m     O x m  
j 1 j i 1 2 2

f ( x1  x
'' m1
,..., xn  x ) m
  i 1 n
 
xi xi 1 n
f j 1
( 3)
xi xi x j ( x )x mj1  f
j i 1
( 3)
xi xi x j ( x )x mj
1 ''
f ( x1 , x2 ,..., xn )
xi xi
i 1 n i 1 n

f ''
xi x j ( x )x m1
j  f ''
xi x j ( x )x m
j f ''
xi x j ( x )x m1
j  f ''
xi x j ( x )x mj
 O  x m 
j 1 j i 1 j 1 j i 1 2
  xim 
f ( x1  x ,..., xn  x )
''
xi xi f m1
1
m
n
''
xi xi ( x1  x m1
1 ,..., xn  x ) m
n
 
Сокращая промежуточные записи, получим:
i 1 n

 f x'i' x j ( x)x mj1  f ''


xi x j ( x )x mj
 O  x m  ,или:
j 1 j  i 1 2
xim 1  xim  xim 
f ''
xi xi ( x1  x m 1
1 ,...,xn  x ) m
n
 
i 1 n

f ''
xi x j ( x )x mj 1  f ''
xi x j ( x )x mj
 O  x m 
j 1 j  i 1 2
xim 1   (*)
f ( x1  x ,...,xn  x ) ''
xi xi
m 1
1
m
n
 
Обозначение последней формулы отличается от общей нумерации в виду её важности.
Учитывая индуктивное предположение xkm 1  x m , k  1, i  1 , получим:
i 1 n n

 f x'i' x j ( x ) x mj1   f x'i' x j ( x ) x mj  f x'i' x j ( x ) x mj


 O x m   ''  O x m 
j 1 j i 1 2 j 1, j i 2
xim1 
f ( x1  x ,..., xn  x )
''
xi xi
m1
1
m
n
  f x x ( x1  x1 ,..., xn  xn ) 
m1 m

i i

M1,i
xim1  x m  x m qi  x m q  x m (8.i)
M 2, i
Индуктивно доказано справедливость xim 1  x m q  x m , i  1, n , поэтому
x m 1  maxxim 1  x m q  x m .
i 1, n

Таким образом, сходимость при выполнении условий теоремы доказана.


4) Оценим погрешность метода.
Пусть x m1  x m q  x m1 q 2  ...  x1 q m  x 0 q m1  0 , (9)
m

18
где x 0  maxxi0  max xi0  xi начальное приближение стационарной точки,
i 1, n i 1, n

начальная точка x  x10 , x20 ,...,xn0  A .


0
 
x

x m 1 xm
Рис.1
На практике известны не величины x m 1
и x m , а расстояния между последовательными
итерациями x m , x m1 (рис.1). Из неравенства треугольника получим:
x m  x m1  x m  x m 1  x  x m  x   x m 1  x m  x m  x m1  (1  q) x m ,
учитывая неравенство x m 1  q x m и используя неравенство треугольника, получим
после m итераций:

x m  x  x m  x m 1  x m 1  x m  2  x m  2  x m  3  ...  x m  n  x m  n 1  x m  n 1  x  ... 

  x i 1  x i  (1  q) x m  (1  q) x m1  (1  q) x m  2  ...  (1  q)( x m  x m 1  x m  2  ...) 
im

 (1  q) x 0 qm
 (1  q) x q 0 m
q 1 q
i 0
i
. 

Поскольку x1  q x 0 , запишем неравенство треугольника с избытком и с недостатком,


получим:
(1  q) x 0  x 0  x1  l0  x1  x 0  x 0  x1  (1  q) x 0 .
Окончательно оценка погрешности имеет вид:
(1  q) x 0 q m (1  q)q m
x m  x m  x   l . (10)
1 q 1  q 2 0
Замечание 1 (необходимость). Условие 2) диагонального преобладания матрицы Гесса
является также и необходимым условием сходимости. Достаточно привести 1 пример с
условием q  1 , в котором итерация (6) расходится:
f x1, x2   x1  x2  3x1x2 , f x1 x1, x2   2x1  3x2 , f x2 x1, x2   2x2  3x1 . Стационарная точка
2 2

         
x1, x2  (0,0) . f x1 x1 x1 , x2  f x 2 x 2 x1 , x2  2, f x1 x 2 x1 , x2  f x 2 x1 x1 , x2  3, q   1 .
3
2
Согласно(*):
 m 1 
f x1 x 2 x1 , x2 x2m    x m 2    3 x m  m 1 9 m  1
x1    x1  x1  O   x m 
 
2
O
 f x  x m
, x  x m
  2
2

  
x1 x1 1 1 2 2
 4

 m 1
  

f x 2 x1 x1 , x2 x1 m
    x m 2    3 x m x2m 1  9 x2m 1  O   x m 
2



x 2

f x 2 x 2 x1  x1m 1 , x2  x2m
O
   2
1  4  

 m 1 9 m  1  m 2  m 9 m2  m 1 2 
 x1  4 x1  O  x   x1  4 x1  O  x 
 , m  2,4,6,... , m  2,4,6,...
 x2m 1  9 x2m 1  O  x m 2   x2m  9 x2m  2  O  x m 1 2 
 4    4  

19
Откуда видно, что во всех чётных и нечётных итерациях каждый раз удаляются от
стационарной точки, т.е. итерация расходится.
Замечание 2. Формула ( * ) выполняется локально, т.е. условия Т.1 должны выполняться
обязательно в окрестности стационарной точки. Так как условия Т.1 выполняются
абсолютно во всей области A  Rn , то они выполнены и локально в точке
 
x1, x2 , ,...,xn  A .
Замечание 3. Определение равномерной невырожденности матрицы приведено в[3]. Оно
обеспечивает взаимно-однозначное отображение окрестности стационарной точки и поля
градиента (стационарная точка – особая точка поля градиента) в каждой итерации (6) –
теорема об обратной функции[1]. Если итерация задаётся формулой x m1  Ax m -
аналогом формулы (*), где A линейный оператор, и A - сжимающее отображение,
т.е. x m 1  q x m  x m (что обеспечивается условиями 2) и 3) Т.1) , то по теореме о
неподвижной точке в метрических пространствах[4] сжимающее отображение имеет
единственное решение. Таким образом, единственность решения итерации(6) доказана.
M
Замечание 4. Сходимость (6)выполнена даже при разных значениях 1,i  qi  1, i  1, n .
M 2, i
Если по всем переменным i  1, n в итерации (6) недиагональные элементы матрицы Гесса
 2 f x 
 0, j, i  1, n, j  i . В этом случае скорость сходимости (6) не линейная, а
xi x j
квадратичная.
В качестве экстремальной задачи, решённой численно, рассмотрим[1]:

f ( x1, x2 , x3 )  x12  x22  x32  x1x2  x1  2x3  extr .


Запишем градиент и матрицу Гесса для функции f ( x1, x2 , x3 ) :
f ( x1, x2 , x3 )  2x1  x2  1, 2x2  x1,2x3  2 .
2 1 0

H i , j ( x1 , x2 , x3 ) 
2 f x
  1 2 0 . Условия теоремы 1 выполнены:
xi x j
0 0 2
M 11 1
H 1,1  2  H 1, 2  H 1,3  1  0  1 , M 11  1, M 21  2, q1   1
M 21 2
M 1
H 2, 2  2  H 2,1  H 2,3  1  0  1, M12  1, M 22  2, q2  12   1 ,
M 22 2
M13 1 1  1
H 3,3  2  H 3,1  H 3, 2  0  0  0 . M13  0, M 23  2, q2   0  1, q  max , ,0  .
M 23 2 2  2
Запишем итерацию по формуле (6):
 m 1
 m


2 x1m  x2m  1 
 1
x x1
2
,

 m 1 
2 x2m  x1m 1 
 x2  x2 
m

 2
 m 1 2 x3  2
m

 x3  x3  1
m

 2

20
 x m  1  q    x 0  1  q  
ln 0   ln m  
 x
  1  q    x  1  q  
Из (10) необходимое число итераций N   
ln q ln 1 / q
(11)
 x m  1  q 2    l  1  q  
ln 
 1  q 
 ln 0m  
2 
 l0    x  1  q   
N   
ln q ln 1 / q
(12)


17
Выберем x m  10 15 , x 0  10 2 N  ln 10 * 3   58 итераций.
ln 2
Составим на языке си программу:
#include<stdio.h>
#include<math.h>
double fx1(double x1,double x2, double x3);
double fx2(double x1,double x2, double x3);
double fx3(double x1, double x2, double x3);
double fxx1(double x1, double x2, double x3);
double fxx2(double x1,double x2, double x3);
double fxx3(double x1, double x2, double x3);
int main()
{
int n,i;
double x1,x2,x3;
printf("Galeev - Tihomirov (primer p.169)\n");
n=60;
x1=-100.0;
x2=100.0;
x3=100.0;
for(i=1;i<=n ;i++)
{
x1=x1-fx1(x1,x2,x3)/fxx1(x1,x2,x3);
x2=x2-fx2(x1,x2,x3)/fxx2(x1,x2,x3);
x3=x3-fx3(x1,x2,x3)/fxx3(x1,x2,x3);
}
printf(" x1*x1+x2*x2 +x3*x3-x1*x2+x1-2*x3\n");
printf("x1=%.16lf,x2=%.16lf,x3=%.16lf,extr=%.16lf\n",x1,x2,x3,x1*x1+x2*x2+x3*x3-
x1*x2+x1-2.0*x3);
}
double fx1(double x1,double x2,double x3)
{
return 2.0*x1-x2+1.0;
}
double fx2(double x1,double x2, double x3)
{
return 2.0*x2-x1;
}
double fx3(double x1,double x2,double x3)
{
return 2.0*x3-2.0;

21
}
double fxx1(double x1, double x2, double x3)
{
return 2.0;
}
double fxx2(double x1,double x2,double x3)
{
return 2.0;
}
double fxx3(double x1,double x2,double x3)
{
return 2.0;
}
Программа возвращает решение задачи и значение функционала:
x1  0.6666666666 666666, x2  0.3333333333
333333, x3  1.0000000000
000000
extr  1.3333333333 333330 . Матрица Гессе положительно определена и , следовательно,
 2 1 
точке x    , ,1 локальный минимум функции. Точное решение
 3 3 
 2 1 
 4
есть x    , ,1, f x   .
 3 3  3

Литература
1) Галеев Э.М., Тихомиров В.М. Краткий курс теории экстремальных задач. – Изд. – во
Моск. Ун-та, 1989. – 204с.: ил.
2)Н.С.Бахвалов, Н.П.Жидков, Г.М.Кобельков. Численные методы. – 7 – е изд.: БИНОМ.
Лаборатория знаний,2011. – 636 с. – (Классический университетский учебник).
3)Федоренко Р.П. Введение в вычислительную физику: Учебное пособие для вузов. –
Долгопрудный: Издательский дом “Интеллект”, 2008. – 504с.
4) Колмогоров А.Н., Фомин С.В.Элементы теории функции и функционального анализа.
– М.:1989 – 450 c.
5) Бахвалов Н.С., Лапин А.В., Чижонков Е.В. Численные методы в задачах и
упражнениях: учебное пособие. – М.:БИНОМ. Лаборатория знаний,2010. – 240 с.

22
Постановка интерполяционной задачи
Рассмотрим задачу интерполяции функции y (x ) на произвольной
сетке   a  x0  x1  x2    xn  b многочленами наименьшей степени n Pn (x) ,
принимающей заданные узловые значения y(a)  y0 , y( x1 )  y1, yx2   y2 , yxn   yn .
Рассмотрим условия, при которых данная задача имеет единственное решение.
Запишем задачу в виде системы уравнений:

а0  a1 x0  a2 x02    an 1 x0n 1  an x0n  y0


 n 1
а0  a1 x1  a2 x1    an 1 x1  an x1  y1
2 n

 а  a x  a x 2    a x n 1  a x n  y
 0 n 1 2

1 2 2 2 n 2 2
(1)
 
 а  a x  a x 2    a x n 1  a x n  y
 0 1 n 1 2 n 1 n 1 n 1 n n 1 n 1

а0  a1 xn  a2 xn    an 1 xn  an xn  yn
2 n 1 n

1 x0 x02 x0n 1 x0n  a0   y0 


2 n 1 n    
1 x1 x 1 x 1 x 1  a1   y1 
Или в матричном виде: 1 x2 x 2
x n 1
x n a    y  (2)
 2   2 
2 2 2
2 n 1 n
1 x n 1 x n 1 x n 1 x n 1  a n 1   y n 1 
n 1  a   y 
 n   n 
2 n
1 xn x x x n n n

Система n линейных неоднородных уравнений с n


неизвестными разрешима тогда и только тогда, когда det(A)  0 . В этом случае
rang( A)  rang( A)  n (ранги матрицы и расширенной матрицы системы совпадают).
Обозначим det(A)  ( x0 , x1, x2 ,, xn 1, xn ) - Вандермонда определитель:
1 x0 x02 x0n 1 x0n
1 x1 x12 x1n 1 x1n
( x0 , x1 , x2 ,, xn 1 , xn )  1 x2 x22 x2n 1 x2n 
1 xn 1 xn21 xnn11 xnn1
1 xn xn2 xnn 1 xnn
1 x0  x0 x02  x02 x0n 1  x0n 1 x0n  x0n
1 x1  x0 x12  x1 x0 x1n 1  x1n  2 x0 x1n  x1n 1 x0
1 x 2  x0 x22  x2 x0 x2n 1  x2n  2 x0 x2n  x2n 1 x0 
1 x n  1  x0 xn21  xn 1 x0 xnn11  x0n  2 x0 xnn1  xnn11 x0
1 xn  x0 xn2  xn x0 xnn 1  xnn  2 x0 xnn  xnn 1 x0
1 0 0 0 0
n 1 n2
1 x1  x0 x  x1 x0
2
1 x
1 x 1 x0 x  x1n 1 x0
1
n

n 1 n2
1 x2  x0 x  x2 x0
2
2 x
2 x 2 x0 x  x2n 1 x0 
2
n

n 1 n2
1 xn 1  x0 xn21  xn 1 x0 x
n 1 x 0 x0 x n
n 1  xnn11 x0
n 1 n2
1 xn  x0 xn2  xn x0 x
n x n x0 x  xnn 1 x0
n
n

23
1 x1 x12 x1n 1
1 x2 x22 x2n 1
x1  x0 x2  x0 xn  x0   x1  x0 x2  x0 xn  x0 ( x1 , x2 ,, xn 1 , xn )
1 xn 1 xn21 xnn11
1 xn xn2 xnn 1
( x0 , x1, x2 ,, xn 1, xn )    x1  x0 x2  x0 xn  x0 x2  x1 x3  x1 xn  x1 xn  xn 1  

 x  xj 
n
 i (3)
i  j 0

Таким образом, если все узлы интерполяции xi и x j попарно различны, то


определитель Вандермонда не равен нулю, т.е. интерполяционная задача (1) имеет
единственное решение.
Замечание: Благодаря единственности решения интерполяционной задачи после
приведения подобных слагаемых интерполяционный многочлен будет задан
единственным образом, независимо от метода его построения (методом Лагранжа или
методом Ньютона или ещё каким – то другим методом).

Лабораторная работа № 3 Интерполяционный многочлен Лагранжа.

Рассмотрим задачу интерполяции многочленами наименьшей степени Ln (x)


функции y (x ) на произвольной сетке   a  x1  x2    xn  b, принимавшей заданные
узловые значения y(a)  y1, yx2   y2 , yxn   yn  . Данная задача имеет единственное
решение.
Решение поставленной задачи для многочлена наименьшей степени n  1 ,
называемым интерполяционным многочленом Лагранжа, можно указать в явном виде:
n
Ln ( x )   yiФi ( x ); гдекоординат ныефункции Фi ( x )  
n x  x j   1, x  xi

j 1, j  i xi  x j 
(1)
i 1 0, x  xk   xk  xi 
x
n
 xj 
Действительно, если x  xi в произведении  x
j 1, j  i
i

 xj 
n  1 попарно одинаковых
i

множителей в числителе и знаменателе дроби, т.е. Фi ( xi )  1 . С другой стороны,

Фi ( xk )   k
n x  x j   0 ,так как j  i, но k  j  1, n, j  i и x  x  0 единственный
 
j 1, j  i xi  x j 
k k

множитель в числителе дроби  k


n x  x j  её обнуляющий.
j 1, j i xi  x j 

При построении многочлена Лагранжа с помощью формул удобна (экономична) не


исходное определение в виде формулы (1), а рекуррентная интерполяционная формула
Лагранжа:
n 1( x)
L1 ( x)  y1, Ln ( x)  Ln 1 ( x)   yn  Ln 1 ( xn ) (2)
n 1( xn )
n
Где: n ( x )   x  xi 
i 1
Доказательство формулы (2) проведём по индукции:
1) Пусть формула (2) справедлива для всех многочленов степени не выше чем k
 ( x)
n  2, k , т.е. Ln ( x )  Ln 1 ( x )   yn  Ln 1 ( xn ) n 1 , L ( x )  yi , i  1, n
n 1 ( xn ) n i

24
k ( x )
2) n  k  1, Lk 1 ( x )  Lk ( x )   yk 1  Lk ( xk )
k ( xk )
k ( xi )
Lk 1 ( xi )  Lk ( xi )   yk 1  Lk ( xk )  Lk ( xi )   yk 1  Lk ( xk )
0
 L ( x )  yi , i  1, k , по1)
k ( xk 1 )  k ( xk ) k i
k ( xk 1 )
Lk 1 ( xk 1 )  Lk ( xk 1 )   yk 1  Lk ( xk 1 )  L ( x )   yk 1  Lk ( xk 1 )  yk 1
k ( xk 1 ) k k 1
То есть справедливо Lk 1( xi )  yi , i  1, k  1. Что и требовалось (по теореме
единственности интерполяционной задачи).
Пример:
Построить интерполяционный многочлен Лагранжа при n  3
x1  1, x2  0, x3  1
Воспользуемся формулой (2):
y1  3, y2  2, y3  5
 ( x) ( x  (1))
L1 ( x )  y1  3; L2 ( x )   y2  L1 ( x2 ) 1  3  2  3  3  ( x  1)  2  x
1 ( x2 ) 0  (1)
 ( x) ( x  (1))(x  0) 4( x  1) x
L3 ( x )  L2 ( x )   y3  L2 ( x3 ) 2  2  x  5  (2  1)  2 x 
2 ( x3 ) (1  (1))(1  0) 2
2x2  x  2 .
Ответ: L3 ( x)  2 x 2  x  2
В силу единственности решения интерполяционной задачи будем рассматривать
интерполяционный многочлен Лагранжа Ln (x) степени n  1 для интерполяции
неизвестной функции y (x ) .

Теорема 1.(формула невязки интерполяционного многочлена). Пусть функция


y( x)  С n a, b интерполируется сеткой   a  x1 x2  ...  xn  bс узловыми
значениями yxi   yi , i  1, n . Тогда   ( a, b) , что для невязки интерполяции справедлива
формула:
y ( n )   n
Rn ( x )  Ln ( x )  y ( x )  n ( x ) , где: n ( x )   x  xi  , x  (a, b)
n! i 1
Доказательство.
Рассмотрим вспомогательную функцию n ( z)  Ln ( z)  y( z)  An ( z) (*)
, где A  пока произвольная константа.
В силу постановки задачи интерполяции Ln ( xi )  y( xi ) и n ( xi )  0, i  1, n Тогда
n ( xi )  yi  yi  A * 0  0, i  1, n .
Потребуем подбором константы A , чтобы число x  ( a, b) было корнем вспомогательной
функции
n ( x)  Ln ( x)  y( x)  An ( x)  0 (**)
Таким образом, функция n (z) имеет n  1 корень, обозначим её
корни xi0  a  x1, x2 ,...,xn  b, x, i  1, n  1. По построению n (z) и по условию теоремы

n ( z)  С ( n ) a, b. По теореме Ролля между каждой парой xi , xi 1 , i  1, n соседних
0 0

корней n (z) существует корень первой производной ' n ( xi1 )  0, xi1  xi0 , xi01 , i  1, n .  
Следовательно, xi1  (a, b),i  1, n . Повторяя рассуждения для второй производной найдутся

25
( 2)n ( xi2 )  0, xi2  xi1, xi11 , xi2  (a, b),i  1, n  1 ( n  1 корень).Тогда, для производной
порядка n найдётся ровно 1 корень ( n ) ( xin )  0, x1n  (a, b) .Обозначим   x1n  (a, b) .
Дифференцируя формулу (*) непосредственно n раз получим:
y ( n ) ( )
( n ) ( )  L( n ) ( )  y ( n ) ( )  An!  0  y ( n ) ( )  An!, A  ,   ( a, b )
n!
Из формулы (**) получим
y ( n ) ( ) y ( n ) ( )
 n ( x )  Ln ( x )  y( x )  n ( x )  0  Ln ( x )  y( x )  n ( x ),  , x  (a, b) (***)
n! n!
Что и требовалось доказать. Отметим, что формула (***) абсолютно точна.
Для составления алгоритма для программы на с++ удобно пользоваться не
реккурентной формулой (2), а определением (1) для чего достаточно 2 вложенных цикла.
Рекомендации к программе:
1) Необходимо и достаточно использование библиотек
#include<stdio.h>
#include<math.h>
2) Для исключения переполнения регистров массива добавляем свободную позицию
к размерности массива n  1 используются элементы массива по i  1, n
mx[n+1],my[n+1] . Узлы интерполяции хранятся в массиве mx[i], i  1, n . Узловые
значения функции содержатся в массиве my[i], i  1, n . В начале программы
заполняются узлы и узловые значения интерполяционного полинома Лагранжа.
3) В качестве теста для программы лабораторной работы №1 рассмотрим задачу
x1  1, x2  0, x3  1
интерполирующей функцию y( x ) | x | по трём узлам
y1  1, y2  0, y3  1
Программа на узлах функции x1  1, x2  0, x3  1 возвращает узловые значения
соответственно:
L(1.000000)  1.000000
L(0.000000)  0.000000
L(1.000000)  1.000000
Для не узловой интерполяции получим
L(0.500000)  0.250000
Кроме того, интерполяционная формула (1) правильно не только интерполирует
y( x ) | x | , но и экстраполирует данную функцию
L(3.000000)  9.000000.

Код программы на языке с++, написанный для Android в среде Cctools , может выглядеть
следующим образом. Для исполняемого exe файла требуются, возможно, небольшие
изменения (адаптация):

#include<stdio.h>
#include<math.h>
int constn=3;
m ain()
{
int i,j;
double m x[n+1],m y[n+1],p,x,sum;

26
x=1.0;
m x[1]=-1.0;
m x[2]=0.0;
m x[3]=1.0;
m y[1]=3.0;
m y[2]=2.0;
m y[3]=5.0;
sum =0.0;
if(!(j==i))
{
p=p*(x-m x[j])/(m x[i]-m x[j]);
}
else

for(i=1;i<=n;i++)
{
p=1.0;
for(j=1;j<=n;j++)
{

{
p=p;
}
}
sum =sum +m [i]*p;
y
}
printf("L(% lf)=% lf\n",x,sum );
}

Литература
1)Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – 6-е изд. –
М.:БИНОМ. Лаборатория знаний.
2)Бахвалов Н.С., Лапин А.В., Чижонков Е.В. Численные методы в задачах и
упражнениях: учебное пособие. – М.:БИНОМ. Лаборатория знаний,2010. – 240 с.

27
Лабораторная работа №4 Интерполяционный многочлен Ньютона
Рассмотрим произвольную неравномерную сетку   x1, x2 ,...xn , yxi   yi , i  1, n -
называются узловыми значениями функции y (x ) .

Определение 1. Разделённой разностью нулевого порядка функции y (x ) в узле xk


называется узловое значение yk (строится по единственному узлу xk ).

Определение 2. Разделённой разностью k нулевого порядка функции y (x ) по узлам


x1,x2 ,...xk 1 называется отношение:
y x2 ,...xk 1   x1, x2 ,...xk 
y x1, x2 ,...xk 1  
xk 1  x1
Аппроксимация функции одним узлом будет: y( x )  y x1  (1)

Рассмотрим разделённую разность первого порядка с одним фиксированным x1 и


y( x )  y x1 
одним произвольным узлом x y x1, x   ,откуда y( x)  yx1   x  x1 yx1, x  (2)
x  x1

Разделённая разность второго порядка с двумя фиксированными и произвольным


 y( x2 , x1 )  y x1, x 
узлом x1 , x1 , x : y x1, x2 , x   y x2 , x1, x   здесь использовано свойство
x  x2
неизменности разделённой разности относительно перестановки любой пары аргументов

y ( x )  y x1 
y x1, x    y ( x2 , x1 )  x  x2  y x1, x2 , x  , откуда
x  x1
y( x)  yx1   x  x1 yx1, x2   x  x1 x  x2 yx1, x2 , x  (3)
Сравнение формул (1),(2), (3) показывает, что приближённую формулу аппроксимации
функции можно получить, отбросив последнее слагаемое с разделённой разностью (в (3)
y x1, x2 , x  ) , содержащей свободную переменную x , что эквивалентно в предыдущем
разложении переменную x заменить на следующий узел (в (2) x на x2 ). Поэтому для
исходной сетки   x1, x2 ,...xn  получим:
y( x)  yx1   x  x1 yx1, x2   x  x1 x  x2 yx1, x2 , x3   ...  x  x1 x  x2 x  xn 1 yx1, x2 ,...,xn  (4)
Последняя формула носит имя Исаака Ньютона.
В дальнейшем при составлении программы нам понадобится
Основное свойство разделённой разности:

n 1
y x1 , x2 ,...,xn , xn 1   
yi
n 1
(5)
i 1
 x
j 1, j  i
i  xj 

Доказательство проведём по индукции.


y  y1
1) n  1, y x1, x2  
y1 y2
  2 справедливо и следует из определения
x2  x1 x1  x2 x2  x1
разделённой разности

28
2) Предположим справедливость формулы (5) для n произвольных узлов для разделённой
разности порядка n  1 , тогда для разделённой разности порядка n для n  1 узла
x1, x2 ,...,xn , xn1 по определению имеем:

 
 n 1 
y x2 ,...,xn , xn 1   y x1 , x2 ,...,xn  
n

y x1, x2 ,...,xn , xn 1  
1 yi yi
xn 1  x1 
   n
xn 1  x1  i  2 x  x  i 1 x  x 
 n 1

  i j  i j
 j  2, j  i j 1, j  i 

  
 n1   n
1  yi n
yi  1  yi xi  x1  xi  xn1  y n1
xn1  x1   i2 n x  x  i1 n x  x   xn1  x1   
 
  n 1
 
 xi  x j   x  xj 
n

  i j 1  i j i 2
 n 1
 j 1, j i j 1, j  i   j 1, j  i j  2, j i

  
  n  n 1
y1  yi y n 1 y1  yi
   
 n n 1
 n 1  n 1 n 1

  x1  x 
j  
i2
  xi  x j    x n 1  x j    x1  x 
j 
i 1
 x i  xj 
j 1, j  i   j 1, j  i j 1, j  i j 1, j  i  j 1, j  i

Что и требовалось доказать.


Из формулы (5) следует инвариантность разделённой разности относительно замена
любой пары аргументов, которая использовалась при выводе формулы (3).

В силу единственности решения интерполяционной задачи будем рассматривать


интерполяционный многочлен Лагранжа Ln (x) степени n  1 для интерполяции
неизвестной функции y (x )

Рекомендации для программы:


1) При составлении интерполяционного многочлена Ньютона необходимо
воспользоваться формулами (4), (5).
2) Использовать библиотеки
# include  stdio.h 
# include  m ath.h 
3) Использовать 3 вложенных цикла
4) При задании массива выбираем размерность массива на единицу больше
Примерный текст программы приведен ниже:

29
# include  stdio.h 
# include  math.h
int const n  3,
main()
{
int i, j, k,i1,
double mx[n  1],my[n 1],p, x,sum, pi,sum1,pr,raz[n  1],
x  -3.0,
mx[1] -1.0,
mx[2] 0.0,
mx[3] 1.0,
my[1] 1.0,
my[2] 0.0,
my[3] 1.0,
sum  0.0,
sum1  0.0,
pr  1.0,
for (k  1, k  n, k   )
{
sum  0.0,
for(i  1,i  k,i   )
{
p  1.0,
for(j 1, j  k, j   )
{
if(!(j  i))
{
p  p/(mx[i]- mx[j]),
}
else
{
p  p,
}
}
sum  sum  my[i]* p,
}

30
pi  1.0,
for(i1 1, i1  k - 1, i1   )
{
pi  pi * (x - mx[i1]),
}
sum1  sum1  sum * pi,
}
print f("P (%lf) %lf \ n", x, sum1),
}
Программа возвращает значения P(3.000000)  9.000000.

31
Лабораторная работа №5 Интерполяция функций кубическими сплайнами

Сплайн в переводе с английского означает гибкое лекало. На практике использовали


металлическую линейку – сплайн при вычерчивании линий сложной кривизны, концы
которой оставляли свободными. В МСС доказано, что свободное состояние сплайна
является однородным ОДУ 4 порядка y( 4) ( x)  0, x [a, b], y( 2) (a)  y ( 2) (b)  , последнее
условие соответствует свободным (ненапряжённым) концам линейки. Решение ОДУ
очевидно y ( x )  a  bx  cx 2  dx3 . Рассмотрим произвольную (неравномерную)
сетку из n  1 узлов   x0  a  x1  ...  xn  bс узловыми значениями интерполируемой
функции yxi   yi , i  0, n . На каждом интервале x [ xi , xi 1 ],i  1, n строим
кубический сплайн yi ( x)  ai  bi x  xi 1   ci x  xi 1   di x  xi 1  , x [ xi , xi 1 ],i  1, n .
2 3

Обозначим hi  xi  xi 1, i  1, n . Выполнены условия:


1) yi ( xi 1 )  ai , i  1, n, an 1  yn 1( xn  b)  yn ( xn )  an  bnhn  cnhn2  dnhn3  yn , n  1 усл. (1)
2) непрерывность функции в смежных узлах
yi ( xi )  ai  bi hi  ci hi  di hi  yi 1( xi )  ai 1, i  1, n  1 , n  1 условий
2 3
(2)
3) непрерывность первой производной в смежных узлах
y'i ( xi )  bi  2ci hi  3di hi  y'i 1( xi )  bi 1, i  1, n  1, n  1 условий
2
(3)
4) непрерывность второй производной в смежных узлах
y''i ( xi )  2ci  6di hi  y''i 1( xi )  2ci 1, i  1, n  1 , n  1 условий (4)
5) условия свободных концов линейки
y''1( x0  a)  2c1  y'' n ( xn  b)  2cn  6dnhn  0  c1  0, cn  3dnhn - 2 условия
Всего 4n неизвестных коэффициентов и 4n  n  1  3(n  1)  2 условий, т.е. система
4 n линейных неоднородных уравнений.
c c c
Из формулы (4) выразим di  i1 i , i  1, n  1, d n   n (5)
3hi 3hn

Подставим (5) в (3) hi ci  ci 1   y'i 1( xi )  bi 1  bi , i  1, n  1 (6)


c c
В (2) подставим d i  i 1 i и выразим
3hi
a a a  a 2c  c h y  y 2c  c h
bi  i1 i  ci hi  di hi  i1 i  i i1 i  i i1  i i1 i , i  1, n  1
2
(7)
hi hi 3 hi 3
a  a 2c  c h y  yn1 2cn hn
bn  n1 n  n n1 n  n 
hn 3 hn 3

В (7) формально заменим индекс i  i  1 , получим


a a 2c  c h
bi 1  i 2 i 1  i 1 i 2 i 1 (8)
hi 1 3
(7) и (8) подставим в (6)
a  ai 1 ai 1  ai 2ci  ci 1 hi 2ci 1  ci  2 hi 1
hi ci  ci 1   i  2    
hi 1 hi 3 3
hi ci  hi 1ci 2  2сi 1 hi  hi 1  ai 2  ai 1 ai 1  ai a a a a 
   3 i 2 i 1  i 1 i   hi ci  hi 1ci 2  2сi 1 hi  hi 1 
3 hi 1 hi  hi 1 hi 

32
Понизим индекс на 1 в последнем уравнении, получим относительно неизвестных
коэффициентов ci , i  2, n трёх диагональную матрицу системы.
 a  a a  ai 1 
3 i 1 i  i   hi 1ci 1  hi ci 1  2сi hi  hi 1  и имеет смысл лишь при i  2, n (9)
 hi hi 1 
 y  yi 1 yi 1  yi  2 
3 i    hi 1ci 1  hi ci 1  2сi hi  hi 1 , i  2, n
 hi hi 1 
c1  cn 1  0
yi ( xi1 )  ai , i  1, n  1, (10)
Уравнения(5), (9),(7),(10) решают поставленную задачу. Уравнение (9) решается
методом прогонки.
Метод прогонки
Решается уравнение вида
Ak xk 1  Ck xk  Bk xk 1  Fk , k  1, n  1 (11)
Предположим, что на границах справедливы формулы
x0  0 x1  0 , xn  n xn 1  n (12)
И справедлива итерационная формула решающая (11)

xk  k xk 1  k , k  0, n  1 (13)

Из (13) получим xk 1  k 1xk  k 1 , которое подставим в (11), имеем

 Bk xk 1 F  Ak k 1
Ak k 1xk  k 1   Ck xk  Bk xk 1  Fk , откуда xk   k , k  1, n  1
Ak k 1  Ck Ak k 1  Ck

Bk F  Ak k 1 Ak k 1  Fk
Т.е. k  , k  k  , k  1, n  1 - формулы вперёд (14)
Ck  Ak k 1 Ak k 1  Ck Ck  Ak k 1

Где 0 , 0 определяются формулой(12)(из начальных условий).

По формуле(13)и (12) xn1  n1xn  n1, xn  n xn1  n  xn  n n1xn  n1   n

n n 1   n
Откуда xn  , n , n определяют из начальных условий (12)
1  n 1n

xk  k xk 1  k , k  0, n  1 (15)
Формулы (15) называются прогонкой назад
Запишем условие (по Самарскому А.А.)устойчивости численной схемы (11)
Ck  Ak  Bk  Ak  0, 0  1, n  1 (16)

Из (9) и (12) получим 0  n  0, 0   n  0


Рассмотрим пример интерполяции функции с равномерной сеткой
yk  cos( ih ), i  0, n, h 
b  a  , b  2 , a  0, n  100, h  h  h  0.01 .
i i 1
n
Из (9) получим

33
h2
yi  yi  2  2 yi 1  ci 1  ci 1  4сi   ci 1  ci 1  4сi  32  yi  yi  2  2 yi 1 , i  2, n
3 h
(17) c1  cn 1  0

Прогонка вперёд Ai  Bi  1, Ci  4, Fi 


3
cos( ih)  cos(( i  2)h)  2 cos(( i  1)h), i  2, n
h2
Отметим, что(16) условие монотонности численной схемы (её устойчивости)
выполнено 4  1  1  2, 0  1.
Используем формулы вперёд
Bi A  F
i  , i  i i 1 i , i  2, n, 1   1  0, n1   n1  0
Ci  Ai i 1 Ci  Ai i 1
    n 1
xn 1  n 1 n  cn 1  0, x1  c1  0 , x(i )  c(i ),i  1, n  1
1  n n 1
Прогонка назад xi  i xi 1  i , i  n,1.
for(i 1,i  n - 1,i   )
{
a3[i]  y[i- 1];
d3[i]  (x[i  1] - x[i])/(3.0* h);
c3[i]  x[i];
b3[i]  (y[i]- y[i - 1])/h- h * (x[i 1]  2.0* x[i])/3.0;
}
a3[1] y[0];
a3[n] y[n - 1];
c3[n] x[n];
d3[n] (x[n  1] - x[n])/(3.0* h);
b3[n] (y[n]- y[n - 1])/h- (1.0/3.0)* (2.0* x[n] x[n  1])* h;

34
Рис.1 Сплайн 3-го порядка для функции y( x )  cos(x ) по 10 исходным точкам, каждый
сплайн дополнительно рисуется по 10 точкам.

Рис.2 График функции y( x )  cos(x ) по 100 точкам


Примерный текст программы на языке с:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<math.h>
const int n =10;
main()
{
int i,j;
double pi,h,aa,bb,y[n+2],x[n+1];
double a[n+1],b[n+1],c[n+1],f[n+1],la[n+1],nu[n+1];
double a3[n+1],b3[n+1],c3[n+1],d3[n+1];
pi=2.0*asin(1.0);
aa=0.0;
bb=2.0*pi;
h=(bb-aa)/double(n);
la[1]=0.0;
la[n+1]=0.0;
nu[1]=0.0;
nu[n+1]=0.0;
for(i=0;i<=n;i++)
{
y[i]=cos(h*double(i));
}
for(i=2;i<=n;i++)
{
a[i]=1.0;
b[i]=1.0;

35
c[i]=-4.0;
}
for(i=2;i<=n;i++)
{
f[i]=3.0*(y[i]+y[i-2]-2.0*y[i-1])/(h*h);
printf("i=%d a=%lf b=%lf f=%lf\n",i,a[i],b[i],f[i]);
}
for(i=2;i<=n;i++)
{
la[i]=b[i]/(c[i]-a[i]*la[i-1]);
nu[i]=(a[i]*nu[i-1]-f[i])/(c[i]-a[i]*la[i-1]);
}
for(i=1;i<=n+1;i++)
{
printf("i=%d la=%lf nu=%lf\n",i,la[i],nu[i]);
}
x[n+1]=0.0;
x[1]=0.0;
for(i=n;i>=1;i--)
{
x[i]=la[i]*x[i+1]+nu[i];
printf("i=%d x=%lf\n",i,x[i]);
}
printf("y(0)=%lf\n",y[0]);
for(i=1;i<=n-1;i++)
{
a3[i]=y[i-1];
d3[i]=(x[i+1]-x[i])/(3.0*h);
c3[i]=x[i];
b3[i]=(y[i]-y[i-1])/h-h*(x[i+1]+2.0*x[i])/3.0;
}
a3[1]=y[0];
a3[n]=y[n-1];
c3[n]=x[n];
d3[n]=(x[n+1]-x[n])/(3.0*h);
b3[n]=(y[n]-y[n-1])/h-(1.0/3.0)*(2.0*x[n]+x[n+1])*h;
for(i=1;i<=n;i++)
{
printf("i=%d a[%d]=%lf b[%d]=%lf c[%d]=%lf d[%d]=%lf\n",i,i,a3[i],i,b3[i],i,c3[i],i,d3[i]);
}
printf("h=%.16lf\n",h);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Та же программа, написанная на FORTRANе с графическим приложением
Compaq Array Viewer(Version 1.6.0)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program progonka
use dfimsl
integer(4),parameter::n=10,m=10,mm=n*m
integer(8)::i,j
real(8)::a(n+1),b(n+1),c(n+1),f(n+1),y(0:n),x(n+1),aa,bb,h,la(n+1),nu(n+1)
real(8)::a3(n),b3(n),c3(n),d3(n),xx,yy

36
real(4),allocatable::vrz(:,:)
!dec$attributes array_visualizer::vrz
aa=0d0
bb=4d0*dasin(1d0)
h=(bb-aa)/dfloat(n)
x(1)=0d0
x(n+1)=0d0
print*,aa,bb
do i=2,n
a(i)=1d0
b(i)=1d0
c(i)=-4d0
enddo
do i=0,n
y(i)=dcos(h*dfloat(i))
print*,"i=",i,"y=",y(i)
enddo
do i=2,n
f(i)=(3d0/(h*h))*(y(i)+y(i-2)-2d0*y(i-1))
print*,"i=",i,"f=",f(i)
enddo
la(1)=0d0
nu(1)=0d0
la(n+1)=0d0
nu(n+1)=0d0
do i=2,n
la(i)=b(i)/(c(i)-a(i)*la(i-1))
nu(i)=(a(i)*nu(i-1)-f(i))/(c(i)-a(i)*la(i-1))
enddo
do i=n,1,-1
x(i)=la(i)*x(i+1)+nu(i)
enddo
do i=1,n+1
print*,"i=",i,"x=",x(i)
enddo
do i=1,n-1
c3(i)=x(i)
d3(i)=(x(i+1)-x(i))/(3d0*h)
b3(i)=(y(i)-y(i-1))/h-(x(i+1)+2d0*x(i))*h/3d0
a3(i)=y(i-1)
enddo
c3(n)=x(n)
d3(n)=(x(n+1)-x(n))/(3d0*h)
b3(n)=(y(n)-y(n-1))/h-(x(n+1)+2d0*x(n))*h/3d0
a3(n)=y(n-1)
do i=1,n
print*,i,"a=",a3(i),"b=",b3(i),"c=",c3(i),"d=",d3(i)
enddo
allocate(vrz(2,mm))
do i=1,n
x0=h*dfloat(i-1)
do j=1,m

37
xx=x0+h*dfloat(j-1)/dfloat(m)
yy=a3(i)+(xx-x0)*b3(i)+(xx-x0)*(xx-x0)*c3(i)+(xx-x0)*(xx-x0)*(xx-x0)*d3(i)
vrz(1,(i-1)*m+j)=xx
vrz(2,(i-1)*m+j)=yy
enddo
enddo
call vGraph(vrz,mm)
deallocate(vrz)
allocate(vrz(2,mm))
do i=1,n
x0=h*dfloat(i-1)
do j=1,m
xx=x0+h*dfloat(j-1)/dfloat(m)
vrz(1,(i-1)*m+j)=xx
vrz(2,(i-1)*m+j)=dcos(xx)
enddo
enddo
call vGraph(vrz,mm)
deallocate(vrz)
end program progonka
subroutine vGraph(fun,nvalues)
use avdef
use avviewer
use dflib
integer(4)::nvalues
real(4)::fun(2,nvalues)
integer(4)::hv,status,nError
character(2)::key
character(av_max_label_len)::ylabel='y'
character(av_max_label_len)::xlabel='x'
call faglStartWatch(fun,status)
print*,"Starting Array Viewer"
call favStartViewer(hv,status)
if (status/=0)then
call favGetErrorNo(hv,nError,status)
if(nError/=0)then
print*,"Array Viewer reports error",nError
stop
end if
end if
call favSetArray(hv,fun,status)
call favSetArrayName(hv,"Wind stream",status)
call favSetGraphType(hv,VectorGraph,status)
call favSetUseAxisLabel(hv,x_axis,1,status)
call favSetUseAxisLabel(hv,y_axis,2,status)

call favSetAxisLabel(hv,x_axis,xLabel,status)
call favSetAxisLabel(hv,y_axis,yLabel,status)
call favShowWindow(hv,av_true,status)
print*,"Press any key to close down the viewer"
key=getcharqq()
call favEndViewer(hv,status)

38
call faglEndWatch(fun,status)
end subroutine vGraph
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Таблицы решений для обоих компиляторов совпадают, откуда следует, что графики,
построенные по таблицам коэффициентов, также совпадают.
Тестовая таблица
i a b c d
1 1.00000 -0.1874215215 0.0000000000 -0.2951926129
2 0.80902 -0.5370336388 -0.5564249664 0.2301790351
3 0.30902 -0.9636447514 -0.1225477070 0.1444133453
4 -0.30902 -0.9466064313 0.1496650357 0.1438618969
5 -0.80902 -0.5881485992 0.4208383229 0.0500759398
6 -1.00000 0.0000000000 0.5152292455 -0.0500759398
7 -0.80902 0.5881485992 0.4208383229 -0.1438618969
8 -0.30902 0.9466064313 0.1496650357 -0.1444133453
9 0.30902 0.9636447514 -0.1225477070 -0.2301790351
10 0.80902 0.5370336388 -0.5564249664 0.2951926129

При больших значениях n  20, n  40 погрешность по норме Чебышева для разности


кубического сплайна функции и самой функцией с помощью программы получим:

deltan  20  4,9 10 3 , deltan  40  1.21285 10 3 , их частное


4,9 103
даёт 3
 4.04  22  p  2 - интегральный (для составных сплайнов из большого
1.2128510
числа кубических сплайнов) порядок аппроксимации равен 2. Этого и следовало ожидать
– многочлен 3 степени имеет точность в окрестности начала координат как O(h3 ) , всего
(b  a )
сплайнов n  , тогда интегральная погрешность nO(h3 )  Oh2  .
h
Для кубического сплайна справедливо
Утверждение (экстремальные свойства кубического сплайна). Рассмотрим функционал
среди дважды дифференцируемых функций и дважды гладких составных сплайнов
2 2
b
 du 
b
 d 2u d 2 S 3  d 2 S3 d 2 S3
I (u )     dx, I u  S3     2   dx  0, a   b  0 .
a
dx  a
dx dx2  dx2 dx2
S3 ( x)  A  Bx  Cx 2  Dx3
Составим разность
2 2 2 2
b
 d 2u   d 2 S  d 2u d 2 S 3  d 2u   d 2 S 3 
I (u  S 3 )  I (u )  I ( S3 )    2    23   2 2 2
  2    2  dx 
a  dx   dx  dx dx  dx   dx 
b
 d 2 S3  d 2u d 2 S3 
2

b
d 2 S3  d 2 S3 d 2u  d 2 S3  d 2 S3 d 2u 
b

2  2   2 dx  2K , K   2  2  2 dx     


a  dx  dx dx2  dx  dx dx  dx2  dx2 dx2  a
  a

b b
d 3 S  dS du 
b
d 3S d 4S
  33  3  dx   33 S3  u    43 S3  u dx  12D * 0  0  0 так как
a
dx  dx dx  dx a a
dx
S3 a  u(a), S3 b  u(b)  любая интерполяционная функция проходит через заданные
узловые значения, а четвёртая производная от кубического сплайна равна нулю. В итоге
получим I (u  S3 )  I (u)  I ( S3 )  0  I (u)  I ( S3 )  I (u  S3 )  0  I (u)  I ( S3 ) , т.е. среди

39
всех возможных интерполяционных функций именно кубический сплайн доставляет
b 2
 du 
минимум функционалу I (u )     dx . Для составного сплайна после суммирования
a
dx 
I (u  S3 )  I (u)  I ( S3 ) 
xi x1
n n
d 2 S3i  d 2 S3i d 2ui  d 2 S3i  d 2 S3i d 2ui 
 I ( u  S )  I ( u )  I ( S )    2 
      2  
dx2  x dx2  dx2
i 3i i 3i 2
i 1 i 1 dx  dx i 1
dx  a
x2 x n1 b
d 2 S32  d 2 S32 d 2u2  d 2 S3, n 1  d 2 S3, n 1 d 2un 1  d 2 S3, n  d 2 S3, n d 2un 
    ...        2  
dx2  dx2 dx2  x dx2  dx2 dx2  dx2  dx2 dx 
1 x n2 x n1

d S3n  d S3n d un 
2 2 2
d S31  d S31 d u1 
2 2 2

2 
 2 b    2 a   0  0  0 в силу непрерывности второй
dx  dx 2
dx  dx2  dx2 dx 
производной функции и сплайна в n  1 смежных точках. Т.е. экстремальное свойство
выполняется и для составного сплайна.
Литература:
1) Калиткин Н.Н. Численные методы.

40
Лабораторная работа №6 Сравнение порядков погрешности интегральных
квадратурных формул

Интегральной квадратурной формулой называется формула замены определённого


интеграла линейным оператором относительно интегрируемой функции:
b n

 f ( x )dx   Ci f ( xi )  R f  (1)
a i 1

Где: x [a, b],Ci , i  1, n  веса квадратурной формулы xi , i  1, n  узлы квадратурной


формулы, R f  - остаток (погрешность) квадратурной формулы. В силу линейности
операций интеграла и суммы относительно функции f (x ) их разность, остаток R f  ,
также является линейным оператором
b n
R f    f ( x )dx   Ci f ( xi )
a i 1

Задача построения квадратурной формулы заключается в таком подборе весовых


коэффициентов Ci (а в случае квадратурных формул Гаусса и узлов x i ), чтобы
максимально уменьшить норму невязки в каком – либо функциональном пространстве.
В методе неопределённых коэффициентов требуют равенства нулю нормы невязки для
всех полиномов, начиная со степени n  0,1,2... (в силу линейности остатка достаточно
потребовать отсутствие невязки для мономов вида 1, x, x 2 ,....,x n 1 ). Наиболее
употребляемые нормы в численных методах:

R C  max R f ( x )  - норма Чебышева в пространстве равномерно – непрерывных на


xa , b 

отрезке [a, b] функций

1
b 2
R L    R 2  f ( x) dx  - норма в пространстве функций L2 [a, b] интегрируемых с
a 
2

квадратом
В методе неопределённых коэффициентов требуют равенства нулю невязки для всех
полиномов, начиная со степени n  0,1,2... (в силу линейности остатка достаточно
потребовать отсутствие невязки для мономов вида 1, x, x 2 ,....,x n 1 ). Получаем систему n
   
линейных уравнений относительно Ci , i  1, n , R1  0, Rx   0, R x 2  0,...,R x n 1  0 (2)

Для простоты квадратурные формулы строим на отрезке [1,1] , затем переходим к


произвольному отрезку [a, b] с помощью замены переменных:
a  b b  a  b  a  , f ( x)dx  b  a  f xz dz .
b 1
x
2

2
z, z  [1.1]  x  [a, b], dx  dz
2 a 2 1
Наиболее употребительные квадратурные формулы:
1) Формула центральных прямоугольников (по одному узлу n  1 )
1

 f ( z )dz  Cf (0) , в силу условий (2) получаем 1 уравнение:


1

41
f ( z )  1,
 ab
1 1 1 b


1
f ( z )dz   dz  2  C *1 
1
1 f ( z)dz  2 f (0)  a f ( x)dx  b  a  f  2  (3)
Построим составную формулу по системе равноотстоящих узлов xi , i  1, n  с шагом
ba
 h  x 1  x 1 , i  1, n  1 :
n i i
2 2
b
b  a  n
   b  a   n   1   
 f ( x )dx   f  x  
 i 1  i   
1

  f 

a  h i  
 2 
(4)
a
n   2  n  i  1

Для оценки погрешности центральной формулы прямоугольников разложим f (x )


ab b  a  / 2
в ряд Тейлора с центром в середине отрезка c  , y  x  c, dy  dx , x a  y  b  a  / 2 :
b

f ( x )  f c   ( x  c ) f '
(c ) 
 x  c
2
f ''
(c ) 
 x  c
3
f ( 3)
(c ) 
 x  c
4

f ( 4 ) (c )  O x  c 
5

2 6 24

b a
b
2
f ( x )dx    f c   yf (c ) 
 y  ''
2
 y  ( 3)
3
 y  ( 4)
4
f (c )  O  y   dy 
 f (c )  f (c ) 
' 5

 ba   
a
2 6 24
 
 2 
b a
y 2
f (c ) y  f ' (c ) 
 y  f '' (c)   y  f (3) (c)   y  f ( 4) (c)  O  y 6
3 4 5
 
2
 (b  a ) f (c ) 
b  a  ''
3
f (c ) 
2 6 24 120 
b a 24
2


b  a 5 f ( 4)
 b  a  6 
(c )  O   (5)

1920  64 

Сравнивая формулы(3) и (5), видно, что


R( f ) 
b  a 3 f '' (c)  O(b  a)5   h3 f '' (c)  Oh5  (*)
24 24
Для составной формулы (4) получим оценку погрешности
 h3 ''
R( f )  n 5 
f (c)  O h  
b  a
3
 
M  O h 4  O h 2 , где    
2
 24  24 n
M  max f ' ' (c) , т.е. составная формула (4) имеет второй порядок аппроксимации O h2 .
x[ a , b ]
 
2) Формула трапеций (по 2 узлам n  2 ):
1

 f ( z)dz  C f (1)  C
1
1 2 f (1) в силу условий (2) получаем 2 уравнения:

1 1
f ( z )  1,  f ( z )dz   dz  2  C
1 1
1 C 2

f ( z )  z,
f (1)  f (1)
1 1 1
1

1
f ( z)dz   zdz  0  1 C1  1C2  C2  C1 
1
2
  f ( z )dz 
1
2

42
ba
b

 f (a )  f (b)   f (a )  f (b)
h
 f ( x)dx 
a
2  2
(6)

соответствует формуле площади для трапеции.

Схема для составной формулы трапеций


1, 2, 2,,2,1   1 ,1,...,1, 1 
 
2 2 2

 f (a )  f (b) n 1 
b
Составная формула a f ( x ) dx h    f (a  h  i )  (7)
 2 i 1 
Оценим погрешность формулы (6), разлагая функцию f (x ) в ряд Тейлора с центром
x  c в точках x  a и x  b :
x  a, y  x  a 0  x  a 0
ba h

 h 
 b    
 
2 3
y y
f     f (c )  yf ' (c )  f ' ' (c )  f ( 3) (c )  2   O h 4 , откуда
a  2 6   h 
 2
h 3 
   
2
h3 ''
h
 f (a)  f (b)   2 f (c)  f (c)  O h   hf c   f (c)  O h4
h ''

2 2 4  8
Из формулы (5)имеем
b
hf (c)   f ( x )dx 
b  a  ''
3
 
b
f (c)  O h , R( f )   f ( x )dx   f (a )  f (b)  hf (c) 
5 h h  ''
3
f (c ) 
a
24 a
2 24
 
f (c)  O h 4    f ' ' (c)  O h 4   R( f )  f (c)  O h 4 
h3 '' h3 h3 ''
  hf c   (**)
 8  12 12
Для погрешности составной формулы
 h3  b  a h 2
имеем R( f )  n max f ' ' ( x )  O h 4   max f ' ' ( x )  O h3 
 12 x[ a , b ]
 12 x[ a , b ]

откуда формула трапеций имеет второй порядок аппроксимации O h2 .  


3) Формула Симпсона (по 3 узлам n  3 ).
1

 f ( z )dz  C
1
1 f ( 1)  C 2 f (0)  C 3 f (1)
1 1
f ( z )  1, 
1
f ( z )dz   dz  2  C
1
1 C 2  C3
1 1
f ( z )  z,  f ( z )dz   zdz  0  1 C
1 1
1  0 C2  1 C3  C3  C1
1 1
2 1 4
f ( z)  z 2 ,  f ( z )dz  z dz   1 C1  0 C2  1 C3  C3  C1  , C2 
2

1 1
3 3 3
  a  b 
 f (a)  4 f    f (b) 
ba
1 b
 2  
 f ( z)dz  3  f (1)  4 f (0)  f (1)  
1
f ( x )dx  
1 a  2  3

43
(b  a )   a  b  h  a  b 
  f (a)  4 f    f (b)    f (a)  4 f    f (b)  (8)
6   2   3  2  
Схема для составной формулы Симпсона:
1,4,2,4,2,, 2,4,1 (используется чётное
3
число интервалов n  2k ).
Получаем составную формулу Симпсона из (8):
h k 1

b k

a f ( x ) dx  
3
f ( a )  4 f ( a  h ( 2i  1))  2  f (a  h(2i ))  f (b)  
i 1 i 1 

b  a   f (a)  4 k k 1


3n 
 f ( a  h( 2i  1))  2 f (a  h(2i ))  f (b)  (9)
i 1 i 1 
Оценим погрешность формулы(8), учтём b  a  2h :
ch
h3 '' b  a 5 f ( 4) (c)  2hf (c)  h3 f '' (c)  O h5  

ch
f ( x )dx  2 hf ( c ) 
3
f ( c ) 
1920 3
f (c  h )  f (c  h )  2 f (c )
h2
 f ''
( c ) 
h2 ( 4)
12
 
f (c )  O h 4 ,из последних двух формул получим:
ch
h 3  f (c  h )  f (c  h )  2 f (c ) h 2 ( 4 ) 4 
c  h f ( x)dx  2hf (c)  3  2
 f (c)  O h  
h5 ( 4 )
 
f (c )  O h5   
h 12  60
ch

c  h f ( x)dx  3  f (c  h)  f (c  h)  4 f (c)  90 f (c)  oh 


h h5 ( 4 ) 5

 f (c  h)  f (c  h)  4 f (c)   h f ( 4) (c)  oh5 


b 5
h
R( f )   f ( x )dx 
a
3 90
n ba
Погрешность составной формулы( k   ):
2 2h
 h5  b  a  h5  ba
 
R( f )  k  max f ( 4 ) ( x )  o h5    
 max f ( 4 ) ( x )  o h5   h 4   xmax f ( 4 ) ( x )  o(h 4 )
 90 x[ a , b ]
 2h  90 x [ a , b ]
  180  [ a , b ]

Т.е. порядок погрешности составной формулы равен 4


Рекомендации для программы:
1)В качестве теста рассмотрим простой пример
1
n
f ( x )  10x 9 , a  0, b  1,  10x 9dx  x10  1, n  100, h  0.01, k   50
1

0
0 2
2)Выводим на экран не значение интеграла, а величину
h k k 1

погрешности   1   f (a)  4 f (a  h(2i  1))  2 f (a  h(2i ))  f (b) 
3 i 1 i 1 

3)Чем больше нулей после запятой при одном и том же n , тем точнее метод.
Определение 1. Говорят, что разностное уравнение f h  0 аппроксимирует некоторое
уравнение (в том числе и дифференциальное) f ( x )  0 с порядком p , если найдутся
f ( x )h  f h
положительные числа С  0, h0  0, h  h0 : f ( x )h  f h  Ch p   lim C
h 0 hp

44
Другими словами, при уменьшении шага сетки в 2 раза погрешность
f ( x)h  f h уменьшается в 2 p раз (норма разности понимается в некотором
функциональном пространстве). Запишем программу:
1) #include<stdio.h>
#include<math.h>
int main()
{
int i ,n;
double sum,a,b,h,x,delta;
a=0.0;
b=1.0;
n=100;
h=(b-a)/double(n);
sum=0.0;
//printf("h=%.16lf\n")
for(i=1;i<=n;i++)
{
x=a+h*(double(i)-0.5);
sum=sum+10.0*pow(x,9.0);

}
sum=sum*h;
delta=1.0-sum;
printf("h=%.16lf, delta=%.16lf\n",h,delta);
}
При n  100 программа возвращает h  0.01; delta  0.000375 ;
При n  200 возвращаются значения h  0.005; delta  0.000093746 , откуда
 0.01
 4.00017 22  p  2 - второй порядок аппроксимации
 0.005
2) #include<stdio.h>
#include<math.h>
int main()
{
int i ,n;
double sum,a,b,h,x,delta;
a=0.0;
b=1.0;
n=100;
h=(b-a)/double(n);
sum=0.0;
//printf("h=%.16lf\n")
for(i=1;i<=n-1;i++)
{
x=a+h*(double(i));
sum=sum+10.0*pow(x,9.0);

}
sum=sum+(10.0*pow(a,9.0)+10.0*pow(b,9.0))/2.0;
sum=sum*h;

delta=1.0-sum;

45
printf("h=%.16lf, delta=%.16lf\n",h,delta);
}
При n  100 программа возвращает h  0.01; delta  0.0007499 ;
При n  200 возвращаются значения h  0.005; delta  0.0001875 , откуда
 0.01
 3.9995 22  p  2 - второй порядок аппроксимации
 0.005

3) #include<stdio.h>
#include<math.h>
int main()
{
int i ,n;
double sum,a,b,h,x,delta,sum1,sum2;
a=0.0;
b=1.0;
n=200;
h=(b-a)/double(n);
sum=0.0;
//printf("h=%.16lf\n")
for(i=1;i<=n/2;i++)
{
x=a+h*(double(2*i-1));
sum=sum+10.0*pow(x,9.0);
}
sum1=sum*4.0;
sum=0.0;
for(i=1;i<=n/2-1;i++)
{
x=a+h*(double(2*i));
sum=sum+10.0*pow(x,9.0);
}
sum2=sum*2.0;
sum=sum1+sum2+10.0*(pow(a,9.0)+pow(b,9.0));
sum=sum*h/3.0;
delta=1.0-sum;
printf("h=%.16lf, delta=%.16lf\n",h,delta);
}
При n  100 программа возвращает h  0.01; delta  0.0000002799 ;
При n  200 возвращаются значения h  0.005; delta  0.0000000174 98 , откуда
 0.01
 15.996  24  p  4 - четвёртый порядок аппроксимации
 0.005
Сравнивая первое и второе задание, а также формулы (*) и (**) видно, что погрешность
центральных прямоугольников примерно в 2 раза меньше погрешности формулы
0.0007499
трапеций при прочих равных условиях(  1.9997 ).
0.000375
Литература
1)Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – 6-е изд. –
М.:БИНОМ. Лаборатория знаний.
2)Бахвалов Н.С., Лапин А.В., Чижонков Е.В. Численные методы в задачах и упражнениях:
учебное пособие. – М.:БИНОМ. Лаборатория знаний,2010. – 240 с.

46
Лабораторная работа №7 Сравнение порядков погрешности в методах Эйлера и
Рунге – Кутты 2 и 4 порядков в ОДУ первого порядка.
Рассмотрим ОДУ первого порядка с непрерывной правой частью по переменным x, y -
 ' dy( x )
y   f ( x, y )
задачу Коши:  dx (1)
 y a   ya , x  [a, b]

,откуда dy  dx  f ( x, y ) dy  y( x  dx)  y( x)  dx  f ( x, y )  y( x  dx)  y( x)  dx  f ( x, y )
Являются распространёнными следующие методы численного решения ОДУ c
равномерным шагом:
1)Метод Эйлера y( x  dx)  y( x)  hf ( x, y), (dx  h  шаг итерации) . (2)
Разложим в ряд Тейлора функцию y( x  h) с центром в точке x :

y ( x )  O h3 
h 2 ''
y( x  h)  y( x )  hy' ( x ) 
2
Учитывая постановку задачи (1) y'  f ( x, y), y ''  f ' ( x, y),...,y ( n )  f ( n 1) ( x, y) получим

f ( x, y )  O h3 
h2 '
y ( x  h)  y( x )  hf ( x, y )  (3)
2

Формулы (2) и (3)отличаются друг от друга на величину


h2 '
2
 
f ( x, y )  O h 3
После n шагов интегрирования получим разность между точным решением и
приближением методом ломаных Эйлера
 h2 
h 
( b  a )  
 max f ' ( x, y )  O h 3 
 
2
y 2 (b)  y1 (b)  n max f ' ( x, y )  O h 3    2 x[ a , b] 
 2 x [ a , b ]
 h

( b  a )h
  O h 2  , т.е. формула Эйлера имеет первый порядок аппроксимации.
2
2)Формула Рунге – Кутты 2 – го порядка
 h  h  y ( x  h)  y( x )  h  h 
y( x  h)  y( x)  hf  x  , y x      f  x  , y x    (4)
 2  2  h  2  2 
h
Разложим все функции в ряд Тейлора с центром точке x 
2
 y ( x  h )  h h  h h 2
 h  h ( 3) 
3
h
  y x    y '  x    y ''  x    y x   (5)
 y( x )  2 2  2 8  2  48  2
Левая часть формулы (4), используя(5) и в силу формулы (1):
y ( x  h )  y ( x ) '  h  h 2 ( 3)  h   h  h  h2
   h
 
 y  x    y  x    O h 4  f  x  , y  x     y ( 3)  x    O h 4 (6)
h  2  24  2   2  2   24  2 
Формула Рунге – Кутты 2 – го порядка (4) отличается от более точной формулы (6)
 h   h 3 ( 3) 
h 
y( x  h)  y( x )  hf  x  , y x    
2 
 
h
y  x    O h5 на величину
 2   24  2
h ''  h 
h ( 3)  h
  h 
 
3 3
y  x    O h5  f  x  , y x     O h5 . После n шагов интегрирования
24  2 24  2  2 
получим разность между точным решением и приближением Ренге – Кутты 2 – го порядка

47
 h3 
(b  a )   
max f '' ( x, y )  O h 5 
h 
   24 x[ a ,b ] 
3
y 2 (b)  y 1 (b)  n max f '' ( x, y )  O h 5  

 24 x [ a , b ]
 h
( b  a )h 2
  
max f '' ( x, y )  O h 4 , т.е. имеет второй порядок аппроксимации.
24 x[ a , b]
3)Метод Рунге – Кутты 4 – го порядка:
 k  2k 2  2k3  k 4  h h
y( x  h)  y( x )  h 1 , k1  f ( x, y ), k 2  f ( x  , y  k1 )
 6  2 2
h h
k3  f ( x  , y  k 2 ), k 4  f ( x  h, y  hk 3 ) - система данных формул даёт четвёртый
2 2
порядок погрешности (Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. –
6-е изд. – М.:БИНОМ. Лаборатория знаний).
Рекомендации к выполнению работы
4)Рассмотрим тест xy'  y  y 2 ; y(1)  0.5 (Филиппов А.Ф. Сборник задач по
дифференциальным уравнениям: учебное пособие для вузов.- 7-е изд., стер.- Наука.
Главная редакция физико-математической литературы).
y ( y  1) dy dx d  y  1 dy dx
y'  ,     
x y ( y  1) x ( y  1) y x
  y  1   y  1 y 1 0.5  1
d  ln    d ln x  d  ln    0  С   1  С  y  1   xy
  y    xy   xy 0.5
1
Откуда y 
1 x
1
Нужно проинтегрировать данное уравнение на отрезке [1,2] y ( 2 )  ;
3
1)Использовать действительные переменные с двойной точностью;
2)Можно не использовать массивы, так как компилятор автоматически присваивает левой
части формулы новое значение аргумента, а правой старое значение аргумента.
Описание программы (метод ломаных Эйлера):
#include <stdio.h>
#include <math.h>
double f(double x, double y);
int main()
{
int i,n;
double a,b,h,x,y;

n=100;
a=1.0;
b=2.0;
h=(b-a)/double(n);
x=1.0;
y=0.5;
for(i=1;i<=n;i++)
{

y=y+ h * f(x,y);
x=x+h;
}

48
printf("x=%.16lf delta=%.16lf\n", x+h,y-1.0/3.0);
}
double f(double x, double y)
{
return y*(y-1.0)/x;
}
Программа возвращает n  100 delta  0.000641024
n  100 delta  0.000320079 , откуда порядок аппроксимации
0.000641024
 2.0026  21  p  1
0.000320079
2)Рунге – Кутты 2 – го порядка
#include <stdio.h>
#include <math.h>
double f(double x, double y);
int main()
{
int i,n;
double a,b,h,x,y;
n=100;
a=1.0;
b=2.0;
h=(b-a)/double(n);
x=1.0;
y=0.5;
for(i=1;i<=n;i++)
{
k=f(x,y);
y=y+ h * f(x+h/2.0,y+k*h/2.0);
x=x+h;
}
printf("x=%.16lf delta=%.16lf\n", x+h,y-1.0/3.0);
}
double f(double x, double y)
{
return y*(y-1.0)/x;
Программа возвращает n  100 delta  0.0000008384 75
n  200 delta  0.0000002094 8 , откуда порядок аппроксимации
0.000641024
 4.0026  22  p  2 -равен 2.
0.000320079
#include<stdio.h>
#include<math.h>
int main()
{
int i ,n;
double sum,a,b,h,x,delta,sum1,sum2;
a=0.0;
b=1.0;
n=200;
h=(b-a)/double(n);
sum=0.0;
//printf("h=%.16lf\n")
for(i=1;i<=n/2;i++)
49
{
x=a+h*(double(2*i-1));
sum=sum+10.0*pow(x,9.0);
}
sum1=sum*4.0;
sum=0.0;
for(i=1;i<=n/2-1;i++)
{
x=a+h*(double(2*i));
sum=sum+10.0*pow(x,9.0);
}
sum2=sum*2.0;
sum=sum1+sum2+10.0*(pow(a,9.0)+pow(b,9.0));
sum=sum*h/3.0;
delta=1.0-sum;
printf("h=%.16lf, delta=%.16lf\n",h,delta);
}
Программа возвращает n  100 delta  0.0000002799
n  200 delta  0.0000000175 , откуда порядок аппроксимации
0.0000002799
 15.994  2 4  p  4 -равен 4
0.0000000175
Литература
1)Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – 6-е изд. –
М.:БИНОМ. Лаборатория знаний.
2)Бахвалов Н.С., Лапин А.В., Чижонков Е.В. Численные методы в задачах и упражнениях:
учебное пособие. – М.:БИНОМ. Лаборатория знаний,2010. – 240 с.

50
Интегральные уравнения Фредгольма второго рода
Пусть R метрическое пространство. Отображение A пространства R в себя называется
сжимающим (или короче сжатием), если существует число   1 , что для любых
элементов x, y  R выполняется условие[2]:
 ( Ax, Ay)   ( x, y )
Тогда n - кратное отображение A , примененное к элементам x, y - образы An x, An y  R
находятся на расстоянии
 ( An x, An y)  ( An 1x, An 1 y)   2  ( An  2 x, An  2 y)     n  ( A0 x, A0 y)   n  ( x, y) (1)
При значениях   1 отображение A будет непрерывным. Другими словами, для
последовательности элементов xn  x; x, xn  R : Axn  Ax. . Действительно, из условия
 ( xn , x)  0 следует условие  ( Axn , Ax)  ( xn , x)  0, при n  
Сжимающие отображения используют для исследования устойчивости разностных схем
[1,2]
Теорема 1. (принцип сжимающих отображений) А.Н.Колмогоров.
Всякое сжимающее отображение, определенное в полном метрическом пространстве R
имеет одну и только одну неподвижную точку  Ax  x  .
Доказательство. Пусть x0 произвольная точка из R . Обозначим
x1  Ax0 , x2  Ax1, xn  Axn 1  An x0 .
Покажем, что последовательность {xn } - фундаментальна. Считаем для определенности
m n:
 ( xm , xn )   ( xm , xm1 )   ( xm1, xm 2 )     ( xn 1, xn )  ( m1   m1     n ) ( x1, x0 ) 
 n  ( x1, x0 )
 n (1       m  n 1 )  ( x1, x0 )   n (1       m  n 1  )  ( x1, x0 ) 
1 

 ( x1 , x0 )
Поскольку число определяется сжимающим отображением A и начальной
1 
 n  ( x1 , x0 )
точкой x0 , то оно фиксировано, но  0, n   .
1
Т.е.
 N  ( x1 , x0 )    (1   ) 
   0 N ( )  1  log  , n, m  N ( ) :  ( xm , xn )   (0    1)
1     ( x1 , x0 ) 
Что и означает по определению фундаментальность последовательности {xn } .
Обозначим lim xn  x . В силу непрерывности оператора A оператор предельного
n

перехода можно перенести от аргумента функции к самой функции


Ax  A( lim xn )  lim Ax n  lim xn 1  x
n n n

Т.е. точка x  Ax является неподвижной. Докажем ее единственность от противного.


Пусть x  Ax и y  Ay :
 ( x, y )   ( Ax, Ay)  ( x, y )   ( x, y )(  1)

Но положительное число  ( x, y ) не может быть меньше себя. Противоречие можно


устранить   ( x, y )  0 Действительно 0    0  0 . Теорема доказана.
Используем теорему А.Н.Колмогорова для получения условий сходимости
интегрального уравнения Фредгольма 2 рода.

51
b
y ( x )    K ( x, s ) y ( s )ds  f ( x ) (2)
a

В численных методах используют два основных вида нормированных функциональных


пространств:
1) Пространство функций C[a, b] непрерывных на отрезке [a, b] с нормой
f g C
 max f ( x )  g ( x )
x[ a , b ]

2) Пространство функций L2 интегрируемых с квадратом на отрезке [a, b] и нормой


1
 b  2 2
  f ( x )  g ( x )  dx 
f g
L2

a 
 
Справедлива следующая

Лемма 1. (А.Н.Колмогоров). Пусть y1( x), y2 ( x), f ( x)  C[a, b], K ( x, s)  C[a, b]  [a, b].
И выполнено условие
1
   (b  a ) max K ( x, s ) 
 ( x , s )([ a , b ][ a , b ]) 
Тогда оператор Gb y(x) (формула (1)) сжимающий и последовательность сжимающих
отображений
b
yk 1 ( x )    K ( x, s ) yk ( s )ds  f ( x ) (3)
a

сходится к некоторой функции y ( x)  C[a, b] решению уравнения (2). Это решение


единственно.
Доказательство. Рассмотрим начальную непрерывную функцию y0 ( x)  C[a, b] , тогда
последовательность функций, используя условие леммы,
b
yk 1 ( x )    K ( x, s ) yk ( s )ds  f ( x ) , k  0,1,
a

также непрерывны yk 1( x)  C[a, b], k  0,1,. Для двух разных


последовательностей y 1k 1 ( x) , y k21 ( x)
b
y 2
k 1 y 1
k 1 C  max y ( x )  y ( x ) |  | max  | K ( x, s ) | | yk2 ( x )  y1k ( x ) | ds 
2
k 1
1
k 1
x[ a ,b ] x[ a ,b ]
a

|  | (b  a ) max K ( x, s) max yk2 ( x )  y1k ( x ) |  | (b  a) K C


yk2  y1k
( x , s )([ a , b ][ a , b ]) x[ a , b ] C
b
Отображение Gb y( x )   K ( x, s ) y( s )ds будет сжимающим, если
a

y 2
k 1 y 1
k 1 C   y  y1k , |  | (b  a ) K
2
k C
1
C

1
Т.е. при   . Обозначим lim yk 1 ( x )  y  ( x )  C[a, b] (в силу полноты
(b  a ) K C
k 

пространства C[a, b] - последовательность непрерывных функций yk 1( x)  C[a, b]


сходится к элементу y ( x)  C[a, b] данного пространства). По теореме 1 Колмогорова

52
y (x) неподвижная точка отображения(3) существует, единственна и удовлетворяет
уравнению:
b
y  ( x )    K ( x, s ) y( s )ds  f ( x )
a
откуда и следует утверждение леммы.
1

b 2
 2
Лемма 2. Пусть y ( x )  L2 [a, b],   K L   K ( x, s ) dxds . K ( x, s)  L2 ([a, b]  [a, b])

1

2
2 a 
 
Начальная функция y0 ( x) и неоднородная часть интегрального уравнения
(2) f ( x), y0 ( x)  L2 [a, b] . Тогда последовательность функций
b
yk 1 ( x )    K ( x, s ) yk ( s )ds  f ( x ) , k  0,1,
a

Сходятся по норме L2
к функции y ( x)  L2 [a, b] решению уравнения (2).
Доказательство. Рассмотрим метод простой итерации
b
yk 1 ( x )    K ( x, s ) yk ( s )ds  f ( x ) , k  0,1,
a
Используем общие свойства нормы:
1) g  q L  g L  q L g , q  L2 [a, b]
2 2 2

(неравенство треугольника для функционала нормы)


b 1 1
2) ( g , q)   g ( s )q( s )ds  ( g , g ) 2 (q, q) 2
a
неравенство Коши - Буняковского с нормой функции q(x )
1
b 1
2
qL  (q, q)    q( s)2 ds
2

a 
2

то функция yk 1( x) имеет норму в L2 [a, b] т.е. yk 1( x)  L2 [a, b] :


y k 1 L2
 K L2
yk L2
 f L2
( k  0,1,)

(По условию леммы 2 числа K L2


, y0 L2
, f L2
существуют)
Рассмотрим две функциональных последовательности y1k 1( x), y1k 1( x)  L2[a, b] :
b
y1k 1 ( x )    K ( x, s ) y1k ( s )ds  f ( x ), k  0,1,
a
b
yk21 ( x )    K ( x, s ) yk2 ( s )ds  f ( x ), k  0,1,
a

( x )    K ( x, s )y ( s )  y ( s )ds    K ( x, s )  y ( s )  y1k ( s )ds


b b
y 2
k 1 ( x)  y 1
k 1
2
k
1
k
2
k
a a

2
b 
2

  y ( x ) dx     K ( x, s )yk2 ( s )  y1k ( s )ds 


b
2
y ( x)  y
2 1 2 1 2
y k 1 k 1 L k 1 k 1
2
a a 

53
(Используя неравенство Коши – Буняковского, продолжим преобразование)

1 1
b  b 2 
  yk ( x )  yk ( x ) ds    K ( x, s ) dsdx yk2 ( s )  y1k ( s ) ds 
b b b
  dx  K ( x, s )2 ds
2 1 2 2 2 2
 
a a  a  a a
2
 K yk2  y1k
2 2
L2 L2

Короче, yk21  y1k 1  K L2


yk2  y1k
L2 L2

Отображение Gb y ( x )   K ( x, s ) y ( s )ds будет сжимающим в L2 [a, b] 


a

yk21  y1k 1  K L2
yk2  y1k   yk2  y1k  yk2  y1k (при    K  1)
L2 L2 L2 L2 L2

1

b b 2
 2

   K ( x, s ) dsdx

1
Что возможно при  
K L a a 
2  
Что и требовалось доказать.
Замечание (соотношение для  – области сходимости интегральных уравнений в
пространствах C[a, b], L2 [a, b] ). Поскольку
b b 2

   K ( x, s ) dsdx  (b  a )2 K ( x, s )  (b  a ) 2 K
2 2
K L2
max C
( x , s )[ a , b ][ a , b ]
a a

1 1
K  (b  a ) K  L2    C
L2 C
KL (b  a ) K C
2

Другими словами,  L область сходимости в пространстве L2 [a, b] не уже C области


2

сходимости в пространстве функций C[a, b] для интегрального уравнения Фредгольма


второго рода.

Лабораторная работа№8 Численное решение интегральных уравнений


Используем для численного решения интегрального уравнения Фредгольма второго
рода
b
y ( x )    K ( x, s ) y ( s )ds  f ( x ) (1)
a

Применим метод простой итерации для функциональной последовательности


b
yk 1 ( x )    K ( x, s ) yk ( s )ds  f ( x ), k  0,1,... (2)
a

В качестве y0 ( s ) можно взять, например, f (s ) . Как выяснилось в параграфе


“Интегральные уравнения”, область сходимости по параметру  шире в пространстве
L2 [a, b] , чем в пространстве C[a, b] . Заменим в (2) интеграл составной квадратурной
формулой Симпсона (необходимо взять четное число интервалов разбиения n  2 m
отрезка [a, b] - получим N  n  1  2m  1 узлов разбиения):
ba ba
xi , i  0,2m, x0  a, x N  b, h  
2k n

54
 k

b
 y k ( a ) K ( x j , a )  y k ( b ) K ( x j , b )  4  yk ( s2i 1 ) K ( x j , s2i 1 )  
I ( yk )   K ( x, s ) yk ( s )ds  S N 1   k 1
h i 1 
3 
a
  2 yk ( s2i ) K ( x j , s2i ) 
 i 1 
sl  a  h * l, l  0,2k; x j  a  h * j, j  0,2k
Окончательно, получим итерационную последовательность
 k

 yk ( a ) K ( x j , a )  yk (b) K ( x j , b)  4 yk ( s2i 1 ) K ( x j , s2i 1 )  
yk 1 ( x j )    k 1
h i 1   f ( x) (3)
3 
  2 yk ( s2i ) K ( x j , s2i ) 
 i 1 
sl  a  h * l, l  0,2k; x j  a  h * j, j  0,2k
Именно формула (3) реализована в следующей программе. В качестве начальной
функции можно взять y0 x j  . Программа написана на языке С++ с двойной точностью.
Целочисленные параметры: n1 число интервалов разбиения ( 2 m ) отрезка [a, b] , n 2 -
число итераций( k ) ,n- частота распечатки данных на экране (всего распечатанных строк
 n1
n3     1 , удобно выбрать n1  10 n ).
n
В программе сравниваются две нормы невязки yk 1 ( x)  y( x) (в
пространствах C[a, b] и L2 [a, b] ), если точное решение y (x ) интегрального уравнения(1)
известно.
yk 1  y C  max yk 1 ( x )  y( x )
x[ a , b ]
1
b 2
yk 1  y L    ( yk 1 ( x )  y( x ))2 dx
a 
2

Кроме того, для вычисления нормы yk 1  y L2


, т.е. при вычислении интеграла
используется формула Симпсона.
В качестве теста для программы рассмотрим пример 2
1
1
y ( x )  e x   x e s y ( s )ds
20
1
с точным решением y ( x )  x  e  x ,   , K ( x, s )  xe  x , f ( x )  e  x
2
Для данного примера
1 1 1
K ( x, s) C  maxx , s[0,1] xes  e, C    .
(b  a ) K C e 2
1 1 1 1
b b 2  1 1
2  1 1 2  1 2
K ( x, s) L    dx K ( x, s)2 ds    x 2dx e2 s ds   [e2 s ]10    (e2  1) 
a a  0  3 2  6 
2
0

 

1 
1
 2 1
L2  K ( x, s ) L   ( e 2  1)   0,96907
2
2
6  2
Т.е. этого достаточно для сходимости итерации и единственности решения в пространстве
функций L2 [0,1] Из того что выполнены достаточные условия сходимости итерации к

55
точному решению в пространстве C[a, b] ещё не следует отсутствие этой сходимости.
После основного тела программы, в конце, вынесены функции, написанные с двойной
точностью, k ( x, s ) - ядро интегрального уравнения, f (x ) - неоднородная часть
уравнения, ff (x) - точное решение.
# include stdio.h 
# include math.h 
doublek (double x, doubles);
double f (doublex );
double ff (doublex);
constint n1  1000;
constint n2  50;
constint n  100;
const int n3  int(ouble(n1) / double(n))  1;
int m ain()
{
int i, j, ii, j1, j 2, j3, j 4;
doubleyy[n1  1], y1[n1  1], y 2[n1  1], delta[n1  1], delta1[n1  1];
doublea, b, h, norma, xx, xj, yadro, x, s, c, lambda, cc, bac;
printf ("n1  %d , n2  %d , n3  %d \ n" , n1, n2.n3);
a  0.0;
b  1.0;
h  (b  a) / double(n1);
xx  0.0, xj  0.0;
yadro 0.0;
c  0.0;
lambda  0.5;
norma  0.0;
printf ("n3  %d \ n" , n3);
for( j  0; j  n1; j  )
{
y1[ j ]  f (a  h * double( j ));
yy[ j ]  ff (a  h * double( j ));
}
// итерации по переменной ii соответствует переменной k
for(ii  0; ii  n2; ii  )
{
for(i  0; i  n1; i  )
// внешняя переменная i соответствует переменной x
{
xx  a  double(i ) * h;
c  0.0;
for( j  0; j  0; j  n1; j  )
// внутренняя переменная j соответствует переменной s
{
xj  a  double( j ) * h;
// yadrok ( x, s)

56
yadro k ( xx, xj);
// формула Симпсона
//   
if ( j  2 * int(double( j ) / 2.0)  1& & j  1 & & j  n1  1)
c  c  4.0 * yadro* y1[ j ];
else if ( j  2 * int(double( j ) / 2.0)  0 & & j  1 & & j  n1  1
c  c  2.0 * yadro* y1[ j ];
else
c  c  y1[ j ] * yadro;
}
y 2[i ]  (h * lambda* c) / 3.0  f ( xx);
}
//  
for( j1  0; j1  n1; j1  )
{
// пере присвоение вектора
y1[ j1]  y 2[ j1];
}
}
for( j 2  0; j 2  n1; j 2  )
{
x  a  double( j 2) * h;
// разность между точным и численным решениями
delta[ j 2]  y 2[ j 2]  yy[ j 2];
}
for(i  0; i  n1; i  )
{
x  a  double(i ) * h;

if (i  n * int(double(i ) / double(n))  0)
printf ("i  %d , x  %lf , axact  %.16lf , res  %.16lf , delta  %.16lf \ n" , i, x, yy[i ], y 2[i ], delta[i ]);
}
//  
//норма в С[a,b]
for( j3  0; j3  n1; j3  )
{
if ((delta[ j3]  0.0 & &(delta[ j3]  norma|| delta[ j3]  norma)) || (delta[ j3]  0.0
& &(delta[ j3]  norma|| delta[ j3]  norma)))
norma delta[l 3];
}
if (norm a 0.0)
norma norma;
else
norma norma;
printf ("norma(C[a, b])  %.16lf \ n", (norma));
printf ("h  %lf , h * h * h * h * h  %lf \ n" , h, h * h * h * h);
//=====================

57
// норма в L2 [a, b]
cc  0.0;
for( j 4  0; j 4  n1; j 4  )
{
x  a  double( j 4) * h;
bac  ( y 2[ j 4]  yy[ j 4]) * ( y 2[ j 4]  yy[ j 4]);
if ( j 4  2 * int(double( j 4) / 2.0)  1& & j 4  1& & j 4  n1  1)
{
cc  cc  4.0 * bac ;
}
else if ( j 4  2 * int(double( j 4) / 2.0)  0 & & j 4  1& & j 4  n1  1)
{
cc  cc  2.0 * bac ;
}
else
{
cc  cc  bac ;
}
cc  (cc * h) / 3.0;
}
cc  sqrt(cc);
printf ("norma( L2[a, b]  %.16lf \ n" , cc);
//  
}
doublek (doublex, doubles)
{
return x * exp(s);
}
doubleff (doublex)
{
return x  exp( x);
}
double f (doublex )
{
return exp( x );
}
// программа завершена
Кроме всего нас будет интересовать скорость сходимости итерационной формулы (3)
и порядок ее сходимости. Результаты норм невязки сведем в таблицу
Таблица 1 ( n1  100, n2  10, n  10 ):
n2(k ) y k 1  x  e  x yk 1  x  e  x
C L2

10 0,00049 0,000028
11 0,0024 0,000014
12 0,00012 0,0000070
13 0,000061 0,0000035
14 0,00003 0,0000018

58
15 0,000015 0,00000088
16 0,0000076 0,00000044
17 0,0000038 0,00000022
18 0,0000019 0,00000011
19 0,00000095 0,000000055
20 0,00000048 0,000000028

Из которой видно, что приближенное решение сходится к точному в обоих


пространствах, во–вторых, при увеличении k на единицу норма невязки уменьшается в 2
раза, что означает линейную скорость сходимости (теорема о неподвижной точке
гарантирует скорость сходимости не хуже линейной p  1 ).
Обозначим неотрицательное число (норму невязки схемы)
 . ( k , h )  yk ( x )  y ( x )
Функционал  . (k , h) зависит от трех параметров – порядка итерации k шага разностной
схемы h и вида нормы . (если норма фиксирована, то ее можно не считать параметром).
Все свойства невязки можно определить
через символ  . (k , h) все характеристики разностной схемы
1) Скорость сходимости разностной схемы p по ЖБК [1]

 положительные числа С, p и натуральное число N , такие что  k  N

  (k  1, h)   (k  1, h)
 m ax .  C     lim . C 
 p  . p ( k , h)  h 0  . p (k , h)
 
2) Порядок сходимости разностной схемы p по Бахвалову Н.С.[2]

 положительные числа C, p, h0 , такие что  h  h0


  (k , h)   (k , h)
 m ax . p  C     lim . p C
 p h  h0 h
 

3) Порядок сходимости разностной схемы p (по Самарскому А.А.[3])


 положительное число p и l  1 , такие что верно:
 . (k , h)
lim p  l p (l  1)
h0  ( k , h / l )
.

Отметим что 1) есть предел по направлению k   , а 2) и 3) пределы по


направлению h  0 . Для данного примера скорость сходимости p  1 можно взять C  3 .
Найдем порядок сходимости по h в двух пространствах, используя определение 3) ( l  2 ),
дополнив таблицу значениями

 1   1 
C 10,   0,00049;  L2 10,   0,000020;
 200  200
 1   1 
C 10,   0,00049;  L2 10,   0,000014;
 400  400

59
 1   1 
Кроме того, из таблицы C 10,   0,00049;  L2 10,   0,000028;
 100  100

 1   1 
 C 10,   C 10, 
Получим  100
  200
 20  1( p  0) в пространстве C[a, b]
 1   1 
 C 10,   C 10, 
 200  400
 1   1 
 L2 10,  1  C  10,  1
 100  28  1.4  2 2 ,  200  20  1.43  2 2 , p  1 ; в пространстве L [a, b] .
 1  20  1  14 2
2
 L2 10,   C 10, 
 200  400
Порядок сходимости можно увеличить, если в формуле 3) пользоваться не формулой
Симпсона по 3 узлам, а квадратурной формулой по 4 или 5 узлам.
Наконец, приведем рекорд (на границе машинной точности 1016 )

( n1  1000 , n2  50, n  100 )


 1  16  1  16
C  50,   429* 10 ;  L2  50,   8 * 10
 1000  1000

Литература

1)Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – 6-е изд. –
М.:БИНОМ. Лаборатория знаний.
2)Бахвалов Н.С., Лапин А.В., Чижонков Е.В. Численные методы в задачах и упражнениях:
учебное пособие. – М.:БИНОМ. Лаборатория знаний,2010. – 240 с.
3) Самарский А.А., Вабишевич П.Н. Численные методы обратных задач математической
физики. – М.:Издательство ЛКИ, 2014.- 480 с.

60
Лабораторная работа №9 Решение неявного уравнения теплопроводности методом
прогонки

Уравнение теплопроводности является уравнением в частных производных второго


порядка с первой частной производной по времени и содержит оператор
div( grad(u)) применяемый к неизвестной скалярной функции u :
u
 div (k grad (u )) , где k - коэффициент температурной проводимости.
t
В одномерном случае получим уравнение
u ( x, t )  
 (k x  (u ( x, t )))
t x x
Наиболее просто записывается уравнение теплопроводности для однородной среды
u ( x, t )  2 u ( x, t )
 k x  (1)
t x 2
Уравнение теплопроводности описывает распространение тепла в сплошной среде.

Метод прогонки
Решается уравнение вида
Ak xk 1  Ck xk  Bk xk 1  Fk , k  1, n  1 (2)
Предположим, что на границах справедливы формулы
x0  0 x1  0 , xn  n xn 1  n (3)
И справедлива итерационная формула решающая (2)

xk  k xk 1  k , k  0, n  1 (4)

Из (4) получим xk 1  k 1 xk  k 1 , k  1, n , которое подставим в (2), имеем

 Bk xk 1 F  Ak k 1
Ak k 1xk  k 1   Ck xk  Bk xk 1  Fk , откуда xk   k , k  1, n  1
Ak k 1  Ck Ak k 1  Ck
Bk F  Ak k 1 Ak k 1  Fk
Т.е. k  , k  k  , k  1, n  1 - формулы вперёд (5)
C k  Ak k 1 Ak k 1  C k C k  Ak k 1

Где 0 , 0 определяются формулой(3)(из начальных условий).

По формуле(4)и (3) xn1  n1xn  n1, xn  n xn1  n  xn  n n1xn  n1   n

n n 1   n
Откуда xn  , n , n определяют из начальных условий (3)
1  n 1n

xk  k xk 1  k , k  0, n  1 (6)
Формулы (6) называются прогонкой назад
Запишем для численной схемы (2) (достаточное условие корректности по И.В.Красикову)

Ck  Ak  Bk , Bk  0, Ak  0, k  1, n  1, 0  1, n  1 (7)

Докажем утверждение (7):


Теорема. Пусть выполнено условие (7), тогда:
(1)