Вы находитесь на странице: 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) k  1, k  1, n  1

61
(2) формулы прогонки (5), (6) корректны, т.е. знаменатели формул (5),(6) знакопостоянны
и не обращаются в 0.
Доказательство первой части теоремы проведём по индукции:
1)Для базы индукции k  1 получим

1 
B1
, 1 
B1

B1

B1
 С1  A1  B1   1
C1  A10 C1  A10 C1  A1 0 C1  A1
2)Пусть при k  1 k  1 , тогда согласно формуле(7)
Bk 1 Bk 1 Bk 1
k 1  , k 1   
C k 1  Ak 1k C k 1  Ak 1k C k 1  Ak 1 k


Bk 1
С k 1  Ak 1  Bk 1   1, k  1, n  2, т.е. k  1, k  2, n  1
C k 1  Ak 1
Объединяя 1) и 2), получим , k  1, k  1, n  1 - первая часть теоремы доказана
Для формулы(6) получим её корректность, т.к. , n1  1и если n  1 , то
n n1   n
1  n1n  0 и xn  корректна (знаменатель больше нуля)
1  n1n
Ak k 1  Fk
(2)  k  , k  1, n  1, Ck  Ak k 1  Ck  Ak k 1  Ck  Ak  Bk  0
Ck  Ak k 1
A   Fk
Теперь формулы  k  k k 1 , k  1, n  1 также корректны.
Ck  Ak k 1
Теорема доказана.

Рассмотрим пример в качестве теста к программе:

ut  u xx , x  0, 

u( x,0)  sin(3x ), x  [0, ] (8)
u(0, t )  u( , t )  0, t  0

Разделим переменные u( x, t )  X ( x)T (t ) и подставим в первое уравнение (8)
T ' X ''
T ' X  TX ''    , в силу независимости переменных последнее уравнение
T X
возможно тогда и только тогда, если   const , решаем каждое уравнение порознь, сначала
задачу Штурма – Лиувилля (для функции X (x ) ):
 X n ''  n X n  0

 X n (0)  X n ( )  0
   
 X n ( x)  An cos n x  Bn sin n x  An  0, n   n  n  n 2 , n  0,1,2,...

X n ( x)  Bn sinnx, n  0,1,2,...Решаем второе ОДУ:


T '  n 2T  0  T (t )  Cn exp n 2t , u( x, t )   Cn exp n 2t sin(nx) . Используя начальное
n 0

условие (второе уравнение (7)), получим решение задачи (7) u( x, t )  exp 9t sin(3x) (9)
Составим численную схему задачи с полностью неявной схемой уравнения
теплопроводности (явная и неявная схемы уравнения отличаются лишь ориентацией
шаблона и соответственно верхним индексом координатной части дифференциального
оператора).

62
u n 1
m  umn 

u
n 1
m 1  umn 11  2umn 1 
, где:  , h,  шаг времени, шаг координаты и
 h2

коэффициент температуропроводности соответственно. Обозначим параметр z  и
h2
перепишем уравнение в канонической для прогонки форме:
zumn11  2z  1umn1  zumn11  umn , m  0, N , n  0, N1, h   / N ,  t1/ N1 (10)
n 1 n 1 n 1 n 1
Сравнивая (1) и (9), имеем A  z, B  z, C  1  2z, F  u
m m m m
n
m (11)
Заметим, что условие устойчивости (7) выполняется автоматически
1  2 z  z  z  2 z0  1 .
Исследуем спектральную устойчивость численной схемы (10) относительно ошибки
округления, выбирая функцию ошибки в виде umn  n eim , подставим её в (10):
 
 
z e i  2  e i    1  z 2(cos  1)  4 z sin 2      1   
1
(12)
2 2 
1  4 z sin  
2
Из формулы (12) видно, что численная схема(10) безусловно устойчива, т.к.
1 1
    1  0  z,   [0,2 ]
  1
1  4 z sin 2  
2
Исследуем также аппроксимацию неявной численной схемы (10), для чего
разложим узловые значения функций umn11 , umn1 , umn11 относительно узлового значения u mn :

u mn 11  u mn  u t  hu x   2 u tt  2hu tx  h 2 u xx    3 u ttt  3 2 hu ttx  3h 2 u txx  h 3 u xxx  


1 1
2 6
 
1 4
24
 u tttt  4 3 hu tttx  6 2 h 2 u ttxx  4h 3u txxx  h 4 u xxxx   O 5  h 5 

u mn 11  u mn  ut  hu x   2 utt  2hu tx  h 2 u xx    3uttt  3 2 hu ttx  3h 2 utxx  h 3u xxx  


1 1
2 6
  utttt  4 3 hu tttx  6 2 h 2 uttxx  4h 3utxxx  h 4 u xxxx   O 5  h 5 
1 4
24
2umn1  2umn  2ut   2utt   3uttt   4utttt  O 5 
1 1
3 12
u mn 1  u mn  u t   2 u tt   3u ttt   4 u tttt  O 5 
1 1 1
2 6 24
Тогда, приравнивая обе части уравнения, получим:
 3 4  2h2
 n 1 n 1
 
z u m1  u m1  2u m  z 2u t   u tt  h u xx  u ttt  h u txx  u tttt 
n 1 2 2 2 h4
u ttxx  u xxxx 
 3 12 2 12
 1 1  1 1 1
  2ut   2 utt   3uttt   4 utttt    u mn1  u mn  ut   2 utt   3uttt   4 utttt
 3 12  2 6 24
  2h2 
z h 2u xx  h 2utxx 
h4 1 1 1
uttxx  u xxxx   ut   2utt   3uttt   4utttt  O  5   (13)
 2 12  2 6 24

 u tt
Упростим формулу (13), учитывая, что z  , u t  u xx , u tt   2 u xxxx , u txч 
h 2

Скомпенсируем слагаемые в правой и левой частях уравнения (13) по степеням малости

63
 1 zh 2  1
zh 2 u xx  u t  u xx  z  , zh 2 u txx 
u tt   2 u tt  z  2  1  ,
h 2
 2 2h 2
полученное противоречие показывает, что неявная численная схема (10) аппроксимирует
 
уравнение ut  u xx с погрешностью O h 2   (делим уравнение(13) на  ).

Программа позволяет не только получить таблицу численного решения задачи (8), но и


геометрически построить неизвестную функцию двух переменных на прямоугольнике,
используя цифровые символы. Таким образом, мы получаем трёхмерное описание
функции (её численное значение в виде цифры от 0 до 4 в момент времени t с
координатой x ). Отметим, что в языке С++ нет графических приложений, и символьное
описание функции является единственным возможным её графическим представлением.
Для удобства колебания функции (разность max  min ) разбивается на интервалы,
разделённые пустыми промежутками для удобного зрительного восприятия волновой
поверхности.
В программе число nx равно числу символов "1" в 1 строке экрана монитора, и зависит
от разрешения экрана монитора, операционной системы. Число nx определяется
экспериментально участком программы
for(i=1;i<=80;i++)
{
printf("1");
}
до тех пор, пока первая строка экрана заполнится единицами без пробелов.

Выбираем N  80 (определяется экспериментально для каждого монитора и правильного


t1 zh 2
отображения графики), t1  0.1 с. Учитываем формулу связи  
N1 
Параметры l1, l 2 служат для масштабирования графики (с не очень большими
значениями).
Рекомендации для программы
1) Подобрать параметр N для правильного отображения графики
2) Написать программу для задачи (7) в соответствии с формулами (1) – (6),(9) – (11)
3) Получить тестовую таблицу
Один из возможных вариантов программы
#include <stdio.h>
#include <math.h>
int const nx=80, ny=15, l1=10,N=nx,N1=ny*l1;
void main()
{
int k,k1,j,i,g1,l2,n3;
double x0[N],x[N],y[N],l[N],nu[N],a[N],b[N],c[N],f[N],pro[N],res[N][N1],res1[N][N1];
double z,alfa,t1,delta[N1];
double pi,h,dt,min,max,period,g,g2;
for(i=1;i<=nx;i++)
{
//printf("1");
}
pi=2.0*asin(1.0);
h=pi/double(N);
alfa=1.0;
max=-1000.0;min=1000.0;
z=0.5;

64
t1=double(N1)*h*h*z/alfa;
l2=2;
printf("t1=%lf\n",t1);
// boundary condition
l[0] =0.0;
l[N]=0.0;
nu[0]=0.0;
nu[N]=0.0;
// first condition
//===========================
for( k=0;k<=N;++k)
{
res[k][0]=sin(3.0*k*h) ;
x[k]=exp(-9.0*t1)*res[k][0];

}
//===============================

for( k=0;k<=N;++k)
{
b[k]=z;
a[k]=z;
c[k]=2.0*z+1.0;
}
for (j=1;j<=N1;++j)
{
for(k=0;k<=N;++k)
{
f[k]=-res[k][j-1];
}
for(k=0;k<=N;k++)
{
l[k]=0.0;
nu[k]=0.0;
}
for( k=1;k<=N-1;++k)
{
l[k]=b[k]/(c[k]-a[k]*l[k-1]);
nu[k]=(a[k]*nu[k-1]-f[k])/(c[k]-a[k]*l[k-1]);
}
y[N]=(nu[N]+l[N]*nu[N-1])/(1.0-l[N-1]*l[N]);
res[N][j]=y[N];
for( k=N-1;k>=0;--k)
{
y[k]=l[k]*y[k+1]+nu[k];
res[k][j]=y[k];
}
}
for(j=0;j<=N1;++j)
{
for(k=0;k<=N;++k)
{

65
if(res[k][j]<=min)
{
min=res[k][j];
}
else
{
min=min;
}
if(res[k][j]>=max)
{
max=res[k][j];
}
else
{
max=max;
}
}
}
for(j=0;j<=N1;++j)
{
if(j%l2==0)
{
for(k=0;k<=N;++k)
{
res1[k][j/l2]=res[k][j];
}
}
}
period=max-min;
for(i=1;i<=(N1/l2)*(N);i++)
{
k=i%N;j=(i-i%N)/N;
if(k<N)
{
g=10.0*((res1[k][j]+res1[k+1][j])/2.0-min)/period;
}
g1=int(g);
g2=g-double(g1);
if(g1%2==1 && g2>=0.0)
{
printf("%d",(g1-1)/2);
}
else
{
printf(" ");
}
}
for(k1=0;k1<=N;k1++)
{
printf("ax(%d)=%lf res(%d %d)=%lf delta(%d)=%lf \n",k1,x[k1],k1,N1,res[k1][N1],k1,x[k1]-
res[k1][N1]);
}

66
for(k1=0;k1<=N;k1++)
{
delta[k1]=sqrt((x[k1]-res[k1][N1])*(x[k1]-res[k1][N1]));
}
for(i=0;i<=N;i++)
{
if(M<=delta[i])
{
M=delta[i];
}
}
printf("delta=%lf\n",M);
}

Рис.1 Распределение температуры на стержне длиной  со временем.

Тест – таблица (точное решение, численное решение, абсолютная ошибка)

exact(0)=0.000000 res(0 150)=0.000000 delta(0)=0.000000


exact(1)=0.041505 res(1 150)=0.041705 delta(1)=-0.000199
exact(2)=0.082435 res(2 150)=0.082831 delta(2)=-0.000396
exact(3)=0.122222 res(3 150)=0.122809 delta(3)=-0.000587
exact(4)=0.160315 res(4 150)=0.161085 delta(4)=-0.000770
exact(5)=0.196185 res(5 150)=0.197127 delta(5)=-0.000942
67
exact(6)=0.229336 res(6 150)=0.230437 delta(6)=-0.001101
exact(7)=0.259307 res(7 150)=0.260552 delta(7)=-0.001245
exact(8)=0.285684 res(8 150)=0.287055 delta(8)=-0.001372
exact(9)=0.308100 res(9 150)=0.309579 delta(9)=-0.001479
exact(10)=0.326244 res(10 150)=0.327811 delta(10)=-0.001567
exact(11)=0.339866 res(11 150)=0.341498 delta(11)=-0.001632
exact(12)=0.348777 res(12 150)=0.350452 delta(12)=-0.001675
exact(13)=0.352852 res(13 150)=0.354546 delta(13)=-0.001694
exact(14)=0.352036 res(14 150)=0.353726 delta(14)=-0.001690
exact(15)=0.346339 res(15 150)=0.348002 delta(15)=-0.001663
exact(16)=0.335841 res(16 150)=0.337454 delta(16)=-0.001613
exact(17)=0.320688 res(17 150)=0.322227 delta(17)=-0.001540
exact(18)=0.301088 res(18 150)=0.302534 delta(18)=-0.001446
exact(19)=0.277315 res(19 150)=0.278646 delta(19)=-0.001332
exact(20)=0.249697 res(20 150)=0.250896 delta(20)=-0.001199
exact(21)=0.218617 res(21 150)=0.219667 delta(21)=-0.001050
exact(22)=0.184507 res(22 150)=0.185393 delta(22)=-0.000886
exact(23)=0.147839 res(23 150)=0.148549 delta(23)=-0.000710
exact(24)=0.109121 res(24 150)=0.109645 delta(24)=-0.000524
exact(25)=0.068891 res(25 150)=0.069222 delta(25)=-0.000331
exact(26)=0.027706 res(26 150)=0.027839 delta(26)=-0.000133
exact(27)=-0.013864 res(27 150)=-0.013930 delta(27)=0.000067
exact(28)=-0.055241 res(28 150)=-0.055506 delta(28)=0.000265
exact(29)=-0.095852 res(29 150)=-0.096313 delta(29)=0.000460
exact(30)=-0.135135 res(30 150)=-0.135784 delta(30)=0.000649
exact(31)=-0.172544 res(31 150)=-0.173373 delta(31)=0.000829
exact(32)=-0.207561 res(32 150)=-0.208558 delta(32)=0.000997
exact(33)=-0.239701 res(33 150)=-0.240852 delta(33)=0.001151
exact(34)=-0.268518 res(34 150)=-0.269807 delta(34)=0.001289
exact(35)=-0.293612 res(35 150)=-0.295022 delta(35)=0.001410
exact(36)=-0.314636 res(36 150)=-0.316147 delta(36)=0.001511
exact(37)=-0.331298 res(37 150)=-0.332889 delta(37)=0.001591
exact(38)=-0.343368 res(38 150)=-0.345016 delta(38)=0.001649
exact(39)=-0.350677 res(39 150)=-0.352361 delta(39)=0.001684
exact(40)=-0.353124 res(40 150)=-0.354820 delta(40)=0.001696
exact(41)=-0.350677 res(41 150)=-0.352361 delta(41)=0.001684
exact(42)=-0.343368 res(42 150)=-0.345016 delta(42)=0.001649
exact(43)=-0.331298 res(43 150)=-0.332889 delta(43)=0.001591
exact(44)=-0.314636 res(44 150)=-0.316147 delta(44)=0.001511
exact(45)=-0.293612 res(45 150)=-0.295022 delta(45)=0.001410
exact(46)=-0.268518 res(46 150)=-0.269807 delta(46)=0.001289
exact(47)=-0.239701 res(47 150)=-0.240852 delta(47)=0.001151
exact(48)=-0.207561 res(48 150)=-0.208558 delta(48)=0.000997
exact(49)=-0.172544 res(49 150)=-0.173373 delta(49)=0.000829
exact(50)=-0.135135 res(50 150)=-0.135784 delta(50)=0.000649
exact(51)=-0.095852 res(51 150)=-0.096313 delta(51)=0.000460
exact(52)=-0.055241 res(52 150)=-0.055506 delta(52)=0.000265
exact(53)=-0.013864 res(53 150)=-0.013930 delta(53)=0.000067
exact(54)=0.027706 res(54 150)=0.027839 delta(54)=-0.000133
exact(55)=0.068891 res(55 150)=0.069222 delta(55)=-0.000331
exact(56)=0.109121 res(56 150)=0.109645 delta(56)=-0.000524
exact(57)=0.147839 res(57 150)=0.148549 delta(57)=-0.000710

68
exact(58)=0.184507 res(58 150)=0.185393 delta(58)=-0.000886
exact(59)=0.218617 res(59 150)=0.219667 delta(59)=-0.001050
exact(60)=0.249697 res(60 150)=0.250896 delta(60)=-0.001199
exact(61)=0.277315 res(61 150)=0.278646 delta(61)=-0.001332
exact(62)=0.301088 res(62 150)=0.302534 delta(62)=-0.001446
exact(63)=0.320688 res(63 150)=0.322227 delta(63)=-0.001540
exact(64)=0.335841 res(64 150)=0.337454 delta(64)=-0.001613
exact(65)=0.346339 res(65 150)=0.348002 delta(65)=-0.001663
exact(66)=0.352036 res(66 150)=0.353726 delta(66)=-0.001690
exact(67)=0.352852 res(67 150)=0.354546 delta(67)=-0.001694
exact(68)=0.348777 res(68 150)=0.350452 delta(68)=-0.001675
exact(69)=0.339866 res(69 150)=0.341498 delta(69)=-0.001632
exact(70)=0.326244 res(70 150)=0.327811 delta(70)=-0.001567
exact(71)=0.308100 res(71 150)=0.309579 delta(71)=-0.001479
exact(72)=0.285684 res(72 150)=0.287055 delta(72)=-0.001372
exact(73)=0.259307 res(73 150)=0.260552 delta(73)=-0.001245
exact(74)=0.229336 res(74 150)=0.230437 delta(74)=-0.001101
exact(75)=0.196185 res(75 150)=0.197127 delta(75)=-0.000942
exact(76)=0.160315 res(76 150)=0.161085 delta(76)=-0.000770
exact(77)=0.122222 res(77 150)=0.122809 delta(77)=-0.000587
exact(78)=0.082435 res(78 150)=0.082831 delta(78)=-0.000396
exact(79)=0.041505 res(79 150)=0.041705 delta(79)=-0.000199
exact(80)=0.000000 res(80 150)=0.000000 delta(80)=0.000000
delta=0.001696
Press any key to continue
Обратим внимание, что диффузия с течением времени приводит к выравниванию
первоначально неоднородных по температуре областей к средней температуре для всей
рассматриваемой области (исчезают области 0,3,4).
Delta=0.001696, N=80, N1=150 (норма Чебышева для невязки точного и приближённого
решений)
Delta=0.000232, N=160, N1=150
Delta=delta=0.000018, N=320, N1=150
Оценим порядок погрешности
Delta80  0.001696 Delta160  0.000232 3
  2 2  7,3  2 3   2  12,8  2 4
Delta160  0.000232 Delta320  0.000018
Порядок аппроксимации имеет смысл в данном случае при определённом законе (связи)
h, и их одновременном стремлении к нулю. Очевидно, что во всех приведенных
примерах порядок погрешности численной схемы не менее 2 u C
~ h 2 ,так как

 ~ h2 , z   const
h2
 
O   h2  O h2  
Литература:
1) А.А.Самарский, П.Н.Вабищевич. Численные методы. Решения обратных задач
математической физики. – М.: ЛКИ . 2013. – 478 с.
2) И.В. Красиков, И.Е. Красикова. Алгоритмы просто как дважды два. – М.:Эксмо,
2007. – 2007ю – 256 с.
3) В.П.Пикулин, С.И.Похожаев. Практический курс по уравнениям математической
физики. – М.: Наука. – 1995. – 223 с.

69
Лабораторная работа №10 Решение волнового уравнения с помощью явной
разностной схемой

Волновое уравнение описывает колебания струны или упругой мембраны.


В качестве теста для программы рассмотрим пример колебаний закреплённой за концы
струны.
u tt  c 2 u xx , x  (0,  ), t  0

u ( x,0)  sin(2 x), u t ( x,0)  0, x  [0,  ] (1)
u (0, t )  u ( , t )  0, t  0

В уравнении (1) с – скорость волнового фронта.
Неизвестную функцию найдём методом разделения переменных u( x, t )  X ( x)T (t ) ,
которую подставим в первое уравнение(1)
T '' X ''
T '' X  c 2 X ''T   c2  
T X
В силу независимости переменных x, t последнее равенство возможно тогда и только
тогда, если   const . Для функции X (x ) получаем задачу Штурма – Лиувилля
 ' ' n
Xn  2 Xn  0
 c (2)

 X n (0)  X n ( )  0, n  0,1,2,...
Задача (2) имеет общее решение
       n
X n ( x )  An cos x n   Bn sin x n , X n (0)  0  An  0, X n ( )  0, n   n  n
 c   c  c c
   
n  с 2n2 , n  0,1,2,...  X n ( x)  Bn sin(nx) (3)
Для функции Tn (t ) получаем уравнение Tn''  c2n2Tn  0 ,
общее решение последнего уравнения есть:
Tn (t )  Cn cos(cnt)  Dn sin(cnt),T ' n (t )  cnCn sin(cnt)  cnDn cos(cnt) (4)
Используем начальные условия – второе уравнение задачи(1):

Dn  0, n  0,1,2,...

u( x, t )   Cn sin(nx) cos(cnt) - общее решение задачи (1) (5)
n 0
Из начальных условий(1) получаем единственный ненулевой коэффициент разложения
C2  1, u( x, t )  sin(2x) cos(2ct) - решение задачи (1) (6)
Построим разностную схему для уравнения (1)
umn 1  umn 1  2umn 2 um 1  um 1  2um
n n n
 c (7)
2 h2
c 2 2
Введём параметр z  2 ,  u mn 1  u mn 1  2u mn  z u mn 1  u mn 1  2u mn  
h
um  zu m1  zu m1  2um 1  z   umn1
n1 n n n
(8)
Поскольку уравнения (7),(8) эквивалентны, то исследуем устойчивость (7) относительно
ошибки округления, в качестве функций возмущения возьмём umn  n ( )eim , [0,2 ] и
подставим в (7)
 
n ( )eim     2   n ( )eim z e i  ei  2      2   4 z sin 2   
 1   1 
      2

70
   
2  2   1  2 z sin 2     1  0,   [0,2 ] , находим корни последнего уравнения,
   2
разностная схема(6) устойчива если   1 [0,2 ] .
       
D  16z 2 sin 4    4  16z sin 2    4  16z 2 sin 4    16z sin 2  
2 2 2 2
     
1,2  1  2 z sin 2    2 z 2 sin 4    z sin 2   . (9)
2 2 2

Если 0  z  1 , то дискриминант D  0  [0,2 ] и


     
1, 2  1  2 z sin 2    2i  z 2 sin 4    z sin 2  
2 2 2
2
2                   
1,2  1  2 z sin 2     4  z 2 sin 4    z sin 2     1  4 z sin 2    4 z 2 sin 4    4  z 2 sin 4    z sin 2     1 .
  2   2  2  2 2  2  2 
Т.е. мы показали, что при z [0,1] разностная схема волнового уравнения устойчива.
2 
При z  1 разностная схема расходится, т.е. 1, 2  1 , например, при   (рассмотрим
2
случай с положительным дискриминантом):
2
2                  
1, 2  1  2 z sin 2     4 z 2 sin 4    z sin 2     41  2 z sin 2    z 2 sin 4    z sin 2    1 
  2   2  2    2  2 2
             
8 z 2 sin 4    z sin 2     41  2 z sin 2    z 2 sin 4    z sin 2    0 
 2  2    2  2 2
         
2 z 2 sin 4    z sin 2    1  2 z sin 2     0   
2 2   2   2
       
 2 z 2 sin 4    z sin 2    1  2 z sin 2   
2 2   2 
что невозможно одновременно для знаков плюс и минус.
Рассмотрим аппроксимацию уравнения(8), для чего разложим узловые значения
функции в ряд Тейлора относительно центрального значения umn :
umn1  zumn 1  zu mn 1  2umn 1  z   umn1
2 3 4 5
u n 1
m u n 1
m  2u  2u  u t 
n
m
n
m
2
u tt 
6
u ttt 
24
u tttt 
120
 
u ttttt  o  6

2 3 4 5 4
 ut 
2 6
utt 
24
uttt 
120
utttt 
12
 
uttttt  o  6  2u mn   2 utt   
utttt  o  6
Аналогично, заменяя временную переменную t пространственной переменной x
получим:
 
  h4
z u mn 1  u mn 1  2u mn  z h 2 u xx  u xxxx  O h 6   
 12 
Используя волновое уравнение utt  c 2uxx , utttt  c 2 uxx tt  c 2 utt xx  c 4uxxxx ,
получим:
4 4  
  h4
 
 2 utt  utttt  O  6   2 c 2 u xx  c 4 u xxxx  O  6  z h 2 u xx  u xxxx  O h 6   
12 12  12 

71
zh 2
Но  1   2 utt  zh 2 u xx попробуем компенсировать члены более высокого порядка
2
малости в разложении
4 4 4 4 2  h4  2h2
c u xxxx  O   z u xxxx  Oh  
h4 h4 2
6 6
c z c 2   c 2 2  h 2 
12 12 12 12 h 12 12

c 2 2
h 2
 1  z . В этом случае порядок погрешности O  4  h 4 . Если z  1 порядок  
аппроксимации волнового уравнения O  2  h 2 .   (*)
c 2 2
Оказывается, что в случае z   1 разностная схема (7),(8) имеет бесконечный
h2
порядок аппроксимации. Действительно, при z  1 операторы
u mn 1  u mn 1  2u mn umn 1  umn 1  2umn
и имеют одинаковые коэффициенты разложения в ряд
2 h2
Тейлора соответственно (по чётным степеням шага сетки  , h в силу симметрии
операторов) и справедливо уравнение utt  c2uxx . Кроме того
u( 2 k )  u x( 2 k )c 2 k  2 k  2u( 2 k )   2 k  2u x( 2 k )c 2 k  c 2  2c 2  u x( 2 k )  c 2 h 2  u x( 2 k )  c 2 h 2 k  2u x( 2 k )
k 1 k 1
(10)
Что справедливо для любого целого неотрицательного числа k  0,1,2,... Т.е.
в разложении в ряд Тейлора слагаемое со степенью  2 k  2 в левой её части компенсирует
слагаемое со степенью h 2 k  2 в правой её части. В итоге можно выбрать параметр z  1 ,
так как он кроме того удовлетворяет условию спектральной устойчивости численной
схемы относительно ошибок округления.
Волновое уравнение (уравнение колебаний) содержит вторую частную производную
по времени и вторые частные производные по координатам. Следовательно, для
однозначного описания задачи кроме двух граничных условий задачи(1) необходимо два
начальных условий (начальные значения координат u m0 струны и начальные значения
0
скорости всех точек струны u t m ). Эти начальные условия эквиваленты заданию 2 первых
слоёв по времени узловых значений неизвестной функции. Если использовать начальные
условия задачи (1) для аппроксимации второго временного слоя, то получим
u 1m  u m0  u t m
0
(11)
- аппроксимация с первым порядком погрешности второго временного слоя по начальной
0
скорости всех узлов u t m . Следовательно, ошибка с первым порядком погрешности по
 согласно формуле(11) переносится со второго временного слоя решения на конечный
временной слой u mN 1 .
Примерный код программы приведём ниже.
Рекомендации к программе
Первым шагом после написания программы для наблюдений волновой поверхности
необходимо отладить графический параметр N равный числу символов, заполняющих
строку экрана монитора. Он зависит как от разрешения операционной системы, так и от
настроек экрана. Подбирается экспериментально таким образом, чтобы строка символов,
состоящая из единиц начиная с левого края, была полностью заполнена единицами. В
нашем случае N=80. В программе используются параметры
pi=2.0*asin(1.0);
z=1.0;
h=pi/double(N);
c=velocity=1.0;

72
dt=(h/velocity)*sqrt(z);// dt= h
t2=pi*p*sqrt(z)/velocity;// конечный момент времени

Начало программы
#include <cstdio>
#include <cmath>
//int const N=11, p=5, N1=p*N;
main()
{
const int N=80, p=5, N1=p*N;
int k,j,i,ll,nx,ny,g1,l2;
double x0[N+1],x[N+1],pro[N+1],res[N+1][N1+1],res1[N+1][N1+1];
double z,velocity,t2,delta[N+1][N1+1],res0[N+1][N1+1];
double pi,h,dt,min,max,period,g,g2,M;

for(i=1;i<=80;i++)
{
printf("1");
}
pi=2.0*asin(1.0);
z=1.0;
h=pi/double(N);
velocity=1.0;
dt=(h/velocity)*sqrt(z);
t2=pi*double(p)*sqrt(z)/velocity;
max=-1000.0;
min=1000.0;
printf("h=%.16lf\n ",t2);
//return 0;
for(j=0;j<=N1;j++)
for(k=0;k<=N;k++)
{
res0[k][j]=sin(2.0*h*double(k))*cos(2.0*velocity*dt*double(j));
printf("res(%d %d)=%.16lf\n",k,j,res0[k][j] );
}
// return 0;
//================
// boundary condition

//================

// first condition
//===========================
for(j=0;j<=N1;j++)
{
res[0][j]=0.0;
res[N][j]=0.0;
}

for( i=1;i<=N-1;i++)
{
x0[i]=sin(2.0*double(i)*h);

73
// res[i][0]=res0[i][0];
res[i][0]=x0[i];
// pro[i]=0.0;
res[i][1]=res0[i][1];
//res[i][1]=res[i][0]+pro[i]*dt;
//x[k]=res[k][0]*cos(2.0*velocity*t2);
printf("i=%d,x=%.16lf y=%.16lf \n",i, res[i][1] , res0[i][1]);
}
for (j=2;j<=N1;++j)
{
for( k=1;k<N;++k)
{
res[k][j]=z*res[k-1][j-1]+z*res[k+1][j-1]+2.0*res[k][j-1]*(1.0-z)-res[k][j-2];
printf(" res0(%d %d)=%.16lf res(%d %d)=%.16lf \n",k,j,res0[k][j],k,j,res[k][j]);
delta[k][j]=sqrt((res[k][j]-res0[k][j])*(res[k][j]-res0[k][j]));
printf("delta(%d %d)=%.16lf\n",k,j,delta[k][j] );

if(M<=delta[k][j] )
{
M=delta[k][j];
}
}
res[0][j]=0.0;
res[N][j]=0.0;
}
printf(" N=%d\n",N);
}
printf("Norma Chebisheva=%.16lf\n",M);
//return 0;
for(k=0;k<=N;k++)
{
printf("res(%d)=%.16lf x(%d)=%.16lf delta[%d]=%.16lf\n",k,res[k][N1],k,x[k],k,delta[k]);
}
printf("Norma Chebisheva=%.16lf\n",M);
//return 0;
for(j=0;j<=N1;++j)
{
for(k=0;k<=N;++k)
{
if(res[k][j]<=min)
{
min=res[k][j];
}
else
{
min=min;
}
if(res[k][j]>=max)
{
max=res[k][j];
}
else

74
{
max=max;
}
}
}
for(j=0;j<=N1;++j)
{
if(j%l2==0)
{
for(k=0;k<=N;++k)
{
res1[k][j/l2]=res[k][j];
//printf("%d %d %d %lf\n",k,j,(j/l2),res1[k][j/l2]);
}
}
}
printf("l2=%d\n",l2);
period=max-min;
for(i=1;i<=(N1/l2)*(N);i++)
{
k=i%N;j=(i-i%N)/N;
if(k<N)
{
g=10.0*((res1[k][j]+res1[k+1][j])/2.0-min)/period;
}
g1=int(g);
g2=g-double(g1);
if(g1%2==1 && g2>=0.0)
{
printf("%d",(g1-1)/2);
}
else
{
printf(" ");
}
}
}
Конец программы.

75
Рис.1

Из приведенного графического решения видно, что пространственно – временная


зависимость смещения u ( x, t ) точек струны с координатой x в момент
времени t представляет собой колебания, которые представляют стоячие волны.
Действительно, левый верхний фрагмент волновой поверхности становится правым
нижним в следующем временном ряду, и наоборот – правый верхний фрагмент волновой
поверхности становится левым нижним в следующем временном ряду. Это
свидетельствует об одновременном распространении бегущих волн слева – направо и
справа – налево, которые, как известно, и образуют стоячую волну.
В программе массив res[i][j] заполняется значениями численного решения, uij , а
массив res0[i][j] заполняется точными значениями аналитического решения u( xi , t j ) на
общих узлах численной решётки.
Используем абсолютно точное значение второго временного слоя
res[i][1]=res0[i][1]; N=40, p=5, N1=p*N; z=1.0

76
Рис.2
Как видно из Рис.2 норма невязки равна, u C  5.2 1015 что близко к нулю для чисел с
двойной точностью (учитывая то, что ошибка занимает 15 и 16 позиции набора значащих
цифр после запятой) и служит численным подтверждением формулы (10). Рис.2 приведен
в виде скриншота преднамеренно, чтобы видеть, что массивы для численного и точного
решений отличны от нуля и близки друг другу по норме Чебышева, т.е. нет тривиального
совпадения 0-0=0.

Проверим, что в случае z  1 порядок погрешности O  2  h 2
res[i][1]=res0[i][1]; N=20, p=5, N1=p*N; z=0.95(Рис.3)

Рис.3

77
Уменьшим шаг сетки в 2 раза, увеличивая N в 2 раза, оставляя прочие параметры без
изменения
res[i][1]=res0[i][1]; N=40, p=5, N1=p*N; z=0.95(Рис.4)

Рис.4

u 20  C 0.00609
Из Рис.3, Рис.4 видно   3.98  2 2 , что с точностью до 3 значащих цифр
u 40  C 0.00153
 
подтверждает второй порядок погрешности O h 2 формула(*).
В программе используются следующие начальные формулы, определяющие
координатный и временной шаг сетки h, dt:
res[i][1]=res0[i][1]; N=40, p=5, N1=p*N;
h=pi/double(N);
velocity=1.0;
dt=(h/velocity)*sqrt(z);//   dt - временной шаг (12)

Из формулы (12) следует, что при фиксированном параметре z и скорости velocity


временной шаг  прямо пропорционален координатному шагу h  с / z . Следовательно,
 
для случая 0  z  1 , поскольку выполняется асимптотика погрешности O h 2 , то так же



верна оценка Oh 2   O с / z   O  2  . Таким образом, полная погрешность
2


численной схемы при изменении временного и пространственного шага изменяется как
     
O h 2  O  2  O h 2   2 , т.е. численно подтверждена справедливость формулы(*)
O  h , 0  z  1
2 2

Приблизим второй временной слой, используя значение первого временного слоя и


временную производную на первом слое формулой res[i][1]=res[i][0]+pro[i]*dt (что
является достаточно грубым приближением с первым порядком погрешности по dt). Тогда
конечное решение также имеет погрешность с первым порядком по dt . Абсолютно
точным приближением второго временного слоя является формула res[i][1]=res0[i][1];
Можно проверить численно, что для параметра z  1 численная схема расходится
даже в случае точного задания второго временного слоя:

78
res[i][1]=res0[i][1]; N=20, p=2, N1=p*N; z=1.01(Рис.5)(норма Чебышева превышает 10100
,хотя решение задачи ограничено по норме u C  1 - формула(6)).

Рис.5

В итоге численно подтверждены все выводы о порядке погрешности численной схемы


– формулы (10), (11), (12), (*).

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

79
Лабораторная работа №11 Интегрирование уравнение Пуассона на прямоугольнике
Рассмотрим линейную двухмерную задачу математической физики второго порядка -
уравнение Пуассона на прямоугольнике (по классификации уравнение эллиптического
типа):
  2u  2u
 x 2  y 2  sin(x), 0  x, y  


u 0, y   u  , y   sin  y  (1)
u  x,0   u  x,    sin  x 

0  x, y  

Условие данной задачи является новым.
Проведём редукцию линейной задачи (1). Действительно, если Lu( x, y) - линейный
дифференциальный оператор, то общая дифференциальная задача(2)
 Lu   F ( x, y ), x, y   D

u x, y   x , y C1  f1 x, y 
 (2)
u  x , y   x , y C2
 f 2  x , y 

x, y   С1 , С 2
Где: С1 ,С2 - 2 части границы замкнутой области D
Эквивалентна трём простейшим задачам, каждая из которых в системе содержит только
одно уравнение с неоднородной правой частью:
 Lu1   F ( x, y ), x, y   D  Lu 2   0, x, y   D  Lu 3   0,  x, y   D
  
u1  x, y   x , y C1  0 u 2 x, y   x , y C1  f1 x, y ; u 3  x, y   x , y C1  0
   (3)
 1
u  x , y   x , y C2
 0  2
u  x , y   x , y C2
 0  3
u  x , y   x , y C2
 f 2  x , y 
  
 x, y   С1 , С2 x, y   С1 , С 2  x, y   С1 , С 2
Тогда складывая все три системы (3), учитывая их линейность, получим, что
 Lu1  u 2  u 3   F ( x, y )  0  0, x, y   D

u 1 x, y  u 2 x, y  u 3 x, y   x , y C1  0  f1 x, y   0

u 1 x, y  u 2 x, y  u 3 x, y   x , y C2  0  0  f 2 x, y 

x, y   С1 , С 2
решением исходной системы уравнений (2) является сумма решений 3 частных систем (3).
ux, y  u1 x, y  u 2 x, y  u 3 x, y .
Пользуясь редукцией линейной задачи, решим пример (1).
  2 u1  2 u1
 2   0, 0  x, y  
  x  y 2

1) u1 0, y   u1  , y   sin  y 


u  x,0  u  x,    0
 1 1

0  x, y  
Решаем задачу методом разделения переменных ux, y   X ( x)Y ( y), X ''Y  XY ''  0
Выберем в решении функцию Y  y   sin y  , совпадающую с граничным условием на
первой части границы и автоматически обращающее в 0 решение на второй части
границы. Получим уравнение и граничные условия для функции X x 

80
 X ''  X  0
X '' sin  y   X sin  y   0   (4)
 X 0  X    1

Общее решение последней краевой задачи находим на множестве гиперболических


e x  ex e x  ex
функций X x   Ashx   Bchx , shx   , chx   .
2 2
Используя граничные условия:
1  ch 
X 0  Ash0  Bch0  B  1; X    Ash   ch   1  A 
sh 
  1  ch   
Запишем решение частной задачи 1) u1 x, y     shx   chx  sin  y 
  sh   
Ищем решение второй частной задачи
  2u2  2u2
 2   0, 0  x, y  
 x y 2

2) u 2 0, y   u 2  , y   0
u  x,0   u  x,    sin  x 
 2 2

0  x, y  
Аналогично, разделяя переменные, выбираем функцию X x   sin x  , автоматически
удовлетворяющую первому граничному условию 2) и совпадающую со вторым
граничным условием.

Y ''  Y  0
Y '' sin x   Y sin x   0   (5)
Y 0  Y    1
Краевые задачи (4) и (5) совпадают с точностью до замены переменных X  Y , x  y .
Поэтому выписываем ответ для второй частной задачи 2)
  1  ch   
u 2 x, y     sh y   ch y  sin x 
  sh   
Находим решение третьей частной задачи с уравнением Пуассона
  2u3  2u3
 2   sin(x), 0  x, y  
 x y 2
3) u 3 0, y   u 3  , y   0
u x,0  u x,    0
 3 3

0  x, y  
Разделяя переменные, выбираем функцию, зависящую от аргумента x и повторяющую
неоднородность уравнения Пуассона X x  sinx, ux, y   sinxY  y  . При этом
автоматически выполняется первое краевое условие задачи 3), решение подставим в
уравнение Пуассона:
 sinxY  Y '' sinx  sinx  Y ''  Y  1
Y ''  Y  1
 (6)
Y 0  Y    0
Находим частное решение дифференциального уравнения краевой задачи (6).
Ypart  y   1
Общее решение однородного уравнения следующее:

81
Y  y   Ash y   Bch y 
Общее решение неоднородного уравнения есть сумма частного неоднородного и общего
однородного уравнений.
Yн  y   1  Ash y   Bch y 
Теперь нужно выполнить краевые условия задачи (6)
Yн 0  1  Ash0  Bch0  B  1  0  B  1

 1  ch  
Yн    1  Ash   ch   0  A   
 sh  
Тогда решение краевой задачи (6) есть
  1  ch   
u3 x, y     1   sh y   ch y  sin x 
  sh   
Решение исходной задачи 1) есть сумма решений 3 частных задач:

  1  ch   
u x, y  u 1 x, y  u 2 x, y  u 3 x, y     shx   chx  sin  y  
  sh   
  1  ch      1  ch   
   sh y   ch y  sin x     1   sh y   ch y  sin x  (7)
  sh      sh   
Формулу (7) – решение краевой задачи для уравнения Пуассона на прямоугольнике
используем в качестве теста при составлении программы.
Для численного решения уравнения Пуассона составим схему. Для аппроксимации
выберем два шаблона максимального порядка симметрии и наименьшего диаметра:

шаблон “крест” девяти точечный шаблон


u 0,1 u 1,1 u 0,1 u1,1
   
u1,0    u1,0 u1,0    u1,0
   
u0, 1 u 1, 1 u0, 1 u1,1
Центральная точка в обоих шаблонах имеет значение u 0, 0 . Поскольку задача (1)
рассматривается на квадрате, то можно выбрать одинаковый шаг сетки по обоим
переменным. В силу симметрии шаблона относительно центрального узла
равноудалённые узлы входят в лапласиан (уравнение Пуассона) с одинаковым весом:
Разложим все узловые значения функций в последней формуле относительно
центрального узла, с точностью до O h 7 :  
 u u  h   u  u
2 2 2
 2 u  h 3   3u  3u  3u  3u 
u1,1  u 0,0  h     2  2  2   3 2 3  
 x y  2  x y xy  6  x 3 x y xy 2 y 3 
h 4   4u  4u  4u  4u  4 u  h 5   5u  5u  5u  5u
  4  4 3  6 2 2  4      5  10  10 
24  x x y x y xy 3 y 4  120  x 5 x 4 y x 3 y 2 x 2 y 3
 5u  5u  h 6   6u  6u  6u  6u  6u  6u  6u 
 5 4  5     6 5  15 4 2  20 3 3  15 2 4  6  
y x y  720  x 6 x y x y x y x y xy 5 y 6 
 u u  h 2   2 u  2u  2 u  h 3   3u  3u  3u  3u 
u1, 1  u0,0  h     2  2  2    3  3 2  3  
 x y  2  x y xy  6  x x y xy 2 y 3 

82
h 4   4u  4u  4u  4u  4 u  h 5   5u  5u  5u  5u
  4  4 3  6 2 2  4      5  10  10 
24  x x y x y xy 3 y 4  120 x 5 x 4 y x 3y 2 x 2 y 3
 5u  5u  h 6   6u  6u  6u  6u  6u  6u  6u 
 5 4  5     6 5  15 4 2  20 3 3  15 2 4  6  
y x y  720  x 6 x y x y x y x y xy 5 y 6 
 u u  h 2   2 u  2 u  2 u  h 3   3u  3u  3u  3u 
u 1, 1  u0,0  h     2  2  2    3  3 2  3  
 x y  2  x y xy  6  x x y xy 2 y 3 
h 4   4u  4u  4u  4u  4u  h 5   5u  5u  5u  5u
  4  4 3  6 2 2  4     5 4  10 3 2  10 2 3 
24  x x y x y xy 3 y 4  120  x 5 x y x y x y
 5u  5u  h 6   6u  6u  6u  6u  6u  6u  6u 
5      6  15  20  15  6  
y 4 x y 5  720  x 6 x 5 y x 4 y 2 x 3 y 3 x 2 y 4 xy 5 y 6 
 u u  h 2   2 u  2 u  2 u  h 3   3u  3u  3u  3u 
u 1,1  u 0,0  h      2  2  2     3  3 2  3  
 x y  2  x y xy  6  x x y xy 2 y 3 
h 4   4u  4u  4u  4u  4u  h 5   5u  5u  5u  5u
  4  4 3  6 2 2  4      5  10  10 
24  x x y x y xy 3 y 4  120  x 5 x 4 y x 3 y 2 x 2 y 3
 5u  5u  h 6   6u  6u  6u  6u  6u  6u  6u 
5      6  15  20  15  6  
y 4 x y 5  720  x 6 x 5 y x 4 y 2 x 3 y 3 x 2 y 4 xy 5 y 6 
В сумме получим:
  2u  2u  h 4   4u  4u  4u 
u1,1  u1,1  u1,1  u1,1  4u 0,0  2h 2  2  2    4  6 2 2  4  
 x y  6  x x y y 

h 6   6u  6u  6u  6u 
  6  15 4 2  15 4 2  6   O h 8
180 x
 
x y x y y 
Аналогично,
u h 2  2u h 3  3u h 4  4u h 5  5u h 6  6u
u0,1  u0, 1  u1,0  u1,0  4u0,0  h      
x 2 x 2 6 x 3 24 x 4 120 x 5 720 x 6
u h 2  2 u h 3  3u h 4  4 u h 5  5u h 6  6 u u h 2  2 u h 3  3u h 4  4 u
h      h    
x 2 x 2 6 x 3 24 x 4 120 x 5 720 x 6 y 2 y 2 6 y 3 24 y 4
h 5  5u h 6  6 u u h 2  2 u h 3  3u h 4  4 u h 5  5u h 6  6 u
  h       4u0,0 
120 y 5 720 y 6 y 2 y 2 6 y 3 24 y 4 120 y 5 720 y 6
  2u  2u  h 4   4u  4u  h 6   6u  6u 
 h 2  2  2    4  4    6  6   O h 8  
 x y  12  x y  360  x y 
1) 5 точечный шаблон “крест”
 2u  2u
u  2  2  f x, y   2 C0 u0,0  C1 u0,1  u0, 1  u1,0  u 1,0   2 C0 u0,0 
1 1
x y h h
   2u  2u  h 4   4u  4u  h 6   6u  6u  
 C1  4u 0,0  h 2  2  2    4  4    6  6    O h 8  
  x y  12  x y  360  x y  
Методом неопределённых коэффициентов получаем систему уравнений

83
C0  4C1  0 h 2   4u  4u 
  C  4 с главным членом погрешности     , выразим из
С1  1 3  x 4 y 4 
0

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


h 2 f 0, 0
u0,0  u0,1  u0, 1  u1,0  u1,0  
1
.
4 4
Методом простой итерации получаем рекуррентную последовательность

u 0,0  u 0,1  u 0, 1  u 1,0  u 1,0  


k 1 1 k h 2 f 0, 0
k k k
, k  0,1,2,... (8)
4 4
Используя формулу (8), напишем программу для решения задачи (1) на С++
Программа определяет норму погрешности (максимальное значение модуля разности
между численным и точным значениями по всем узлам сетки на прямоугольнике) после,
m=2000 простых итераций. Начальное значение потенциала определяется с учетом
принципа максимума для эллиптического уравнения (в данном внутреннем узле
потенциал равен арифметическому среднему от граничных узловых значений, имеющих
ту же строку либо тот же столбец, что и рассматриваемый узел).
#include<stdio.h>
#include<math.h>
int const n=20, m=2000;
double ch(double x);
double sh(double x);
double a1(double x,double y);
double a2(double x,double y);
double b1(double x,double y);
double b2(double x,double y);
double f(double x,double y);
int main()
{
int i,j,k;
double u[m+2][n+2][n+2],a,b,c,d,pi,h1,h2,x,y;
double res[n+2][n+2],delta[n+2][n+2],max,sum;
max=-1000.0;
pi=2.0*asin(1.0);
a=0.0;
b=pi;
c=0.0;
d=pi;
h1=(b-a)/double(n);
h2=(d-c)/double(n);
////////////boundary condition
for(j=0;j<=m;j++)
{
for(i=0;i<=n;i++)
{
x=a+h1*double(i);
y=c+h2*double(i);
u[j][0][i]=b1(x,c);
u[j][n][i]=b2(x,d);
u[j][i][0]=a1(a,y);
u[j][i][n]=a2(b,y);
//sum =sum+ b1(x,c)+ b2(x,d)+ a1(a,y)+ a2(b,y) ;
}
84
}
/////////////////////initial condition
for(j=1;j<=n-1;j++)
{
for(i=1;i<=n-1;i++)
{
x=a+h1*double(i);
y=c+h2*double(j);
u[0][j][i]=( b1(x,c)+ b2(x,d)+ a1(a,y)+ a2(b,y))/4.0 ;
}
}
for (k=0;k<=m;k++)
{
for (j=1;j<=n-1;j++)
{
for( i=1;i<=n-1;i++)
{
y=c+h1*double(j);
x=a+h1*double(i);
u[k+1][j][i]=0.25*(u[k][j-1][i]+u[k][j+1][i]+u[k][j][i-1]+u[k][j][i+1]) - (0.25)*h1*h1* f(x,y);
}
}
}
for(j=0;j<=n;j++)
for(i=0;i<=n;i++)
{
x=a+h1*double(i);
y=c+h2*double(j);

res[j][i]=(ch(x)+sh(x)*(1.0-ch(pi))/sh(pi))*sin(y)+sin(x)*(ch(y)+sh(y)*(1.0-
ch(pi))/sh(pi))+sin(x)*(ch(y)-1.0+sh(y)*(1.0-ch(pi))/sh(pi));
delta[j][i]= u[m][j][i]- res[j][i];
if( delta[j][i]<=0.0 )
{
delta[j][i]=- delta[j][i];
}
printf("i=%d j=%d delta=%.16lf\n",j,i, delta[j][i]);
if( delta[j][i]>=max)
{
max=delta[j][i];
}
printf("i=%d j=%d delta=%.16lf\n",j,i, delta[j][i]);
}
printf("norma C =%.16lf\n",max);
remove("101.txt");
FILE*file;
file=fopen("101.txt","w");
for(j=0;j<=n;j++)
{
for(i=0;i<=n;i++)
{
x=a+h1*double(i);

85
y=c+h2*double(j);
fprintf(file,"%.16lf %.16lf %.16lf \n",x,y,u[m][j][i]);
}
}
fclose(file);
remove("102.txt");
file=fopen("102.txt","w");
for(j=0;j<=n;j++)
{
for(i=0;i<=n;i++)
{
x=a+h1*double(i);
y=c+h2*double(j);
fprintf(file,"%.16lf %.16lf %.16lf \n",x,y ,res[j][i] );
}
}
fclose(file);
}
double ch(double x)
{
return (exp(x)+exp(-x))/2.0;
}
double sh(double x)
{
return (exp(x)-exp(-x))/2.0;
}
double a1(double x,double y)
{
return sin(y);
}
double a2(double x,double y)
{
return sin(y);
}
double b1(double x,double y)
{
return sin(x);
}
double b2(double x,double y)
{
return sin(x);
}
double f(double x,double y)
{
return sin(x);
}
При n=10 программа возвращает Чебышева норму погрешности: delta(10)  0.00912
При n=20 программа возвращает норму погрешности: delta(20)  0.00223
delta(10) 0.00912
  4.089  2 2 . Следовательно, у итерации (8) второй порядок
delta(20) 0.00223
погрешности.
2) девяти точеный шаблон
86
 2u  2u
 2  f x, y   2 C0 u0,0  C1 u0,1  u0, 1  u1,0  u 1,0   C2 u1,1  u1, 1  u1, 1  u 1, 1  
1
u 
x 2
y h
  
 C0 u 0,0  C1  4u 0,0  h 2   u   u   h   u   u   h   u   u   
2 2 4 4 4 6 6 6
1
 2   x 2 y 2  12  x 4 y 4  360  x 6 y 6  
      
h  
   2u  2u  h 4   4u  4u  4u  h 6   6u  6u  6u  6u  
C 2  4u 0,0  2h 2  2  2    4  6 2 2  4    6  15 4 2  15 4 2  6  
  x y  6  x x y y  180  x x y x y y  
2
 2 2   4 4 4 
Учитывая операторное равенство  u   2  2  u   4  2 2 2  4
2
u ,
 x y   x x y y 
выразим производные старшего порядка потенциала u через производные
функции f x, y  :

C 0  4C1  4C 2  0 C 0  4C1  4C 2  0 C 0  10 / 3
  
С1  2C 2  1  С1  2C 2  1  С1  2 / 3
С С С  4С С  1 / 6
 1  2  C 2 
1  1 2  2
 12 6 2

Итого  u  f
2

1
C0 u 0,0  C1 u 0,1  u 0,1  u1,0  u 1,0   C 2 u1,1  u1,1  u1,1  u 1,1  
h2
1  10 
 u0,0  u0,1  u0, 1  u1,0  u 1,0   u1,1  u1, 1  u1, 1  u 1, 1  
2 1
2 
h  3 3 6 
 C   4u  4u  C   4u  4u  4u   h2
 u  h 2  1  4  4   2  4  6 2 2  4    f  f
 12  x  y  6   x  x y y   12
Выражаем центральное узловое значение
3 2  
u 0,0   u 0,1  u 0, 1  u1,0  u 1, 0   u1,1  u1, 1  u1, 1  u 1, 1   h 2  f 
1 h2
f   

10  3 6  12 
3 2 
 u 0,1  u 0, 1  u1,0  u 1,0   u1,1  u1, 1  u1, 1  u 1, 1   h  f  f  
1 1 h2

5 20 10  12 
1
u0,1  u0,1  u1,0  u1,0   1 u1,1  u1,1  u1,1  u1,1  
5 20
3 
 f 0,1  f 0,1  f1,0  f 1,0  4 f 0,0   1 u0,1  u0,1  u1,0  u 1,0  
2
h
 h 2  f 0,0  2
10  12h  5
3 2  1
 u1,1  u1, 1  u1, 1  u 1, 1   h 2  f 0,0   f 0,1  f 0, 1  f1,0  f 1,0   u 0,1  u 0, 1  u1,0  u 1,0 
1 1
20 10  3 12  5

1
u1,1  u1,1  u1,1  u 1,1   1 h 2 8 f 0,0  f 0,1  f 0,1  f1,0  f 1,0  (9)
20 40
Из формулы (9) получим простую итерацию
u k 1 0, 0  u k 0,1  u k 0, 1  u k 1, 0  u k 1,0   u 1,1  u k 1,1  u k 1,1  u k 1,1  
1 1 k
5 20
h 8 f 0,0  f 0,1  f 0, 1  f1,0  f 1,0 
1 2
 (10)
40
Используя формулу (10) составим программу для задачи (1)
#include<stdio.h>

87
#include<math.h>
int const n=20, m=2000;
double ch(double x);
double sh(double x);
double a1(double x,double y);
double a2(double x,double y);
double b1(double x,double y);
double b2(double x,double y);
double f(double x,double y);
//int const n=100, m=10,ll=10;
int main()
{
int i,j,k;
double u[m+2][n+2][n+2],a,b,c,d,pi,h1,h2,x,y;
double res[n+2][n+2],delta[n+2][n+2],max,sum;
max=-1000.0;
pi=2.0*asin(1.0);
a=0.0;
b=pi;
c=0.0;
d=pi;
h1=(b-a)/double(n);
h2=(d-c)/double(n);
////////////boundary condition
for(j=0;j<=m;j++)
{
for(i=0;i<=n;i++)
{
x=a+h1*double(i);
y=c+h2*double(i);
u[j][0][i]=b1(x,c);
u[j][n][i]=b2(x,d);
u[j][i][0]=a1(a,y);
u[j][i][n]=a2(b,y);
}
}
/////////////////////initial condition
for(j=1;j<=n-1;j++)
{
for(i=1;i<=n-1;i++)
{
x=a+h1*double(i);
y=c+h2*double(j);
u[0][j][i]=( b1(x,c)+ b2(x,d)+ a1(a,y)+ a2(b,y))/4.0 ;

}
}
/////////////////////
for (k=0;k<=m;k++)
{
for (j=1;j<=n-1;j++)
{

88
for( i=1;i<=n-1;i++)
{

y=c+h1*double(j);
x=a+h1*double(i);
u[k+1][j][i]=0.2*(u[k][j-1][i]+u[k][j+1][i]+u[k][j][i-1]+u[k][j][i+1])+
0.05*(u[k][j+1][i+1]+u[k][j+1][i-1]+u[k][j-1][i-1]+u[k][j-1][i+1])-
(1.0/40.0)*h1*h1*(8.0*f(x,y)+ f(x-h1,y)+ f(x+h1,y) +f(x,y-h1) + f(x,y+h1) );
}
}
}
for(j=0;j<=n;j++)
for(i=0;i<=n;i++)
{
x=a+h1*double(i);
y=c+h2*double(j);

res[j][i]=(ch(x)+sh(x)*(1.0-ch(pi))/sh(pi))*sin(y)+sin(x)*(ch(y)+sh(y)*(1.0-
ch(pi))/sh(pi))+sin(x)*(ch(y)-1.0+sh(y)*(1.0-ch(pi))/sh(pi));
delta[j][i]= u[m][j][i]- res[j][i];
if( delta[j][i]<=0.0 )
{
delta[j][i]=- delta[j][i];
}
printf("i=%d j=%d delta=%.16lf\n",j,i, delta[j][i]);
if( delta[j][i]>=max)
{
max=delta[j][i];
}
printf("i=%d j=%d delta=%.16lf\n",j,i, delta[j][i]);
}
printf("norma C =%.16lf\n",max);
remove("101.txt");
FILE*file;
file=fopen("101.txt","w");
for(j=0;j<=n;j++)
{
for(i=0;i<=n;i++)
{
x=a+h1*double(i);
y=c+h2*double(j);
fprintf(file,"%.16lf %.16lf %.16lf \n",x,y,u[m][j][i]);
}
}
fclose(file);
remove("102.txt");
file=fopen("102.txt","w");
for(j=0;j<=n;j++)
{
for(i=0;i<=n;i++)
{
x=a+h1*double(i);

89
y=c+h2*double(j);
fprintf(file,"%.16lf %.16lf %.16lf \n",x,y ,res[j][i] );
}
}
fclose(file);
}
double ch(double x)
{
return (exp(x)+exp(-x))/2.0;
}
double sh(double x)
{
return (exp(x)-exp(-x))/2.0;
}
double a1(double x,double y)
{
return sin(y);
}
double a2(double x,double y)
{
return sin(y);
}
double b1(double x,double y)
{
return sin(x);
}
double b2(double x,double y)
{
return sin(x);
}
double f(double x,double y)
{
return sin(x);
}
При n=10 программа возвращает Чебышева норму погрешности: delta(10)  0.0000242
При n=20 программа возвращает норму погрешности: delta(20)  0.00000152
delta(10) 0.0000242
  15.92  2 4 . Следовательно, у итерации (10) четвёртый порядок
delta(20) 0.00000152
погрешности.

90
Лабораторная работа №12 по уравнениям математической физики №12
Согласование порядков аппроксимации дифференциального и граничного
операторов.

Введение

Рассмотрим в области D с границей G краевую дифференциальную задачу:


Lu  f в D (1)
с граничным условием
lu   на G (2)
Здесь L и l - дифференциальные операторы; и f ,  – заданные, а u - искомый
элементы некоторых линейных нормированных функциональных пространств F , Ф,U
соответственно[1]. Разностную схему определяют как семейство сеточных задач,
зависящих от параметра (шага) h :
Lhuh  f h на сетке в области Dh (3)
lhuh  h на граничной сетке Gh ( 4)
Говорят, что разностная схема (3), (4) аппроксимирует на решении u с порядком
аппроксимации p  min(p1, p2 ) дифференциальную задачу (1), (2) , если существуют
такие положительные постоянные h0 , c1, p1, c2 , p2 , не зависящие от h , что при всех h  h0 ,
справедливы неравенства:
Lh (u )  f h F  c1h p1 , lh (u )   h Ф  с2 h p 2
h р

Из определения порядка аппроксимации следует, что для максимальной точности


аппроксимации разностной задачи (3), (4) и экономии машинного времени необходимо
соблюдение равенства:
p1  p2  p (5)
Постановка задачи
Для обоснования условия (5) рассмотрим численное решение начально-краевой
задачи параболического типа[2], стр.193:
u t  u xx ,0  x   , t  0,

u ( x,0)  cos(2 x),0  x   ,
u (0, t )  u ( ,0), t  0.
 x x (6)
Система уравнений (6) имеет точное аналитическое решение: u( x, t )  e4t cos(2 x) .
Действительно:
u( x, t )t  u( x, t )xx  4 cos(2x)e4t ,0  x   , t  0,
u( x,0)  cos(2x),0  x   , u x ( x, t )  2e 4t sin(2x),u x (0, t )  u x ( ,0)  0, t  0.
Используем задачу (6) , в которой третье уравнение представляет собой граничное условие
Неймана, в качестве теста при составлении программы.
В задаче (6) первое уравнение соответствует дифференциальной задаче (1) в полу
полосе 0  x   , t  0. Третье уравнение является граничным оператором ( 2) на
лучах: t  0, x  0, x   . Рассмотрим разностное уравнение (3) для задачи (6) :
(umn 1  umn )
(umn 1  umn 1  2umn )
 , m  1,2,3,...N , n  1,2,3 (7)
 h2
Уравнение (7) представляет явную разностную схему однородного уравнения
теплопроводности на сетке с равномерным шагом по времени  и по координате
h   / N . Обозначим параметр z   / h 2 и уравнение (7) преобразуем к виду:

91
umn1  umn  z(umn 1  umn 1  2umn ), (8)
n 1
Разложим узловые значения u m
n
,u
m1 ,u n
m1 в формуле (8) в ряд Тейлора для получения
максимального порядка аппроксимации с центром разложения umn :
(umn )  2  2 (umn )
umn 1  umn     o( 2 )
t 2 t 2
(u mn ) h 2  2 (u mn ) h 3  3 (u mn ) h 4  4 (u mn )
u mn 1  u mn  h     o( h 4 )
x 2 x 2
6 x 3
24 x 4

(umn ) h 2  2 (umn ) h3  3 (umn ) h 4  4 (umn )


umn 1  umn  h     o(h 4 )
x 2 x 2 6 x 3 24 x 4
Подставляя разложения для umn 1, umn 1, umn 1 в формулу(8), получим:
(umn )  2  2 (umn )  2  2 (umn ) h 4  4 (umn ) 
   z  h  4 
  o( 2  h 4 ) (9 )
t 2 t 2
  x 2
12  x 
Потребуем по отдельности равенства первых и вторых слагаемых в формуле (9) по
отдельности:
(umn ) (umn )
  zh 2 , используя первое уравнение системы уравнений (6)
t x 2
(umn )  2 (umn )
 , получим   zh 2 , которое справедливо для любого z . Преобразуем вторую
t x 2

производную во времени, считая функцию u( x, t ) дважды по t и четырежды по x


непрерывно дифференцируемой:
(umn )    n     2 (umn )   2  n 2 2 n 4 n
  u m     ( u )  ( u )  (um )
t 2 t  t    x 2  x 2 t x 2 x 2 x 4
m m

Учитывая последнее равенство и требование:


 2  2 (umn ) h 4  4 (umn ) 2 h4  h4 h2 h2 1
 z   z       z . (10)
2 t 2
12 x 4
2 2
12 h 12 12 6 6
Итак, максимальный порядок аппроксимации дифференциального оператора (1) по h
1
p1  4 с параметром z  . Тогда уравнение (8) перепишем в виде:
6
1 1
umn 1  umn  (umn 1  umn 1  2umn )  o( 2  h 4 )  (umn 1  umn 1  4umn )  o( 2  h 4 ). (11)
6 6
Разностное уравнение (8) необходимо исследовать на устойчивость. Используем
признак спектральной устойчивости. Спектральный признак состоит в следующем: если
при заданном законе стремления  и h к нулю для всех 0    2 справедливо
неравенство  ( )  1, то спектральный признак выполнен, и численная схема может быть
использована для решения уравнения Lu  f . Комплексное число  ( ) определяет
замкнутую кривую на комплексной плоскости при изменении  . В качестве функций
возмущения численной схемы выберем umn  ( ) eim
n
[1] и подставим в (8) :
( ) n 1 im
e  ( ) e
n im
 z( ) e
n im i
(e  e i
 2)
Разделим последнее уравнение на ( ) e
n im
:
2 2
       
( ( )  1)  2 z(cos( )  1)  4 z sin     ( )  1  4 z sin   (12)
  2    2 

92
1
Если параметр 0  z , то справедливо из (12) :  1  ( )  1  ( )  1.
2
1
Таким образом, при z  численная схема (11) имеет не только максимальный
6
порядок аппроксимации, но и является устойчивой.
Построим схему граничного оператора lhuh  h для граничного условия lu  
- третьего уравнения системы (6) : ux (0, t )  ux ( ,0) с тем же порядком
точности: p2  p1  4 . Составим квадратурную формулу для граничного оператора
u
(производной функции в нуле (0, t ) ) методом неопределенных коэффициентов[1]:
x
u
(0, t )  au0n  bu1n  cu 2n  du3n  eu 4n   r ( x )
1
(13)
x h
В формуле неизвестные коэффициенты a, b, c, d , e подлежат определению, h шаг
равномерной сетки, u0n , u1n , u2n , u3n , u4n значения функции umn в 5 ближайших узлах к левой
границе отрезка 0,  . r(x )  невязка квадратуры.
Потребуем равенства нулю остатка r(x ) в формуле (13) для многочленов максимально
высокой степени:
u 1
a) u( x, t )  1, (0, t )  0  ( a  b  c  d  e)  a  b  c  d  e  0.
x h

u 1
b) u( x, t )  x, (0, t )  1  ( a * 0  bh  2hc  3dh  4eh )  b  2c  3d  4e  1.
x h
u 1
c) u( x, t )  x 2 , (0, t )  0  ( a0  bh 2  c( 2h )2  d (3h)2  e( 4h )2 )  b  4c  9d  16 e  0.
x h
u 1
d) u( x, t )  x 3 , (0, t )  0  ( a0  bh 3  c( 2h)3  d (3h )3  e( 4h)3 )  b  8c  27 d  64 e  0.
x h

u 1
e) u( x, t )  x 4 , (0, t )  0  ( a0  bh 4  c( 2h)4  d (3h)4  e( 4h )4 )  b  16c  81d  256 e  0.
x h

Решаем систему линейных уравнений:


a  b  c  d  e  0
b  2c  3d  4e  1

b  4c  9d  16e  0 (14)
b  8c  27d  64e  0

b  16c  81d  256e  0
Линейная система уравнений (14) имеет единственное
25 4 1
решение: a   , b  4, c  3, d  , e  
12 3 4
Подставляя найденные коэффициенты в (13) , получим квадратуру, точную для
многочленов степени не выше четырех, т.е. порядок сходимости граничного оператора в
поставленной задаче также p2  4  p1 :
u 1
(0, t )  ( 25u0n  48u1n  36u2n  16u3n  3u4n ) (15)
x 12 h

93
u
Так как, по условию задачи (6) (0, t )  0 , то выразим из (15) u0n :
x
1
u0n  ( 48u1n  36u2n  16u3n  3u4n ) (16)
25
В силу симметрии задачи для граничного оператора на правой границе в точке x   :
1
u Nn  ( 48u Nn 1  36u Nn  2  16u Nn  3  3u Nn  4 ) (17)
25
1
Учитывая связь   zh 2  h 2 , видим, что при малых h :   h . Выберем временной
6
отрезок T  M таким образом, чтобы по порядку величины T ~ X  Nh и исходная
задача рассматривается на прямоугольнике с соизмеримыми сторонами.
N 2h 2  2
Положим M ~ N 2  T  M  N 2   ~ 1. Окончательно, выпишем разностные
6 6
уравнения численной схемы, соответствующей дифференциальной задаче (6) :
um0  cos(2m h), m  0,1,2,...,N


n 1 n 1 n 1

u n  um 1  um 1  4um , m  1,2,...N  1, n  1,2,...,N 2
 m 6

 n 1 (18)
u0  ( 48u1  36u2  16u3  3u4 ), n  1,2,...,N
n n n n 2

 25
 n 1
u N  25 ( 48u N 1  36u N  2  16u N  3  3u N  4 ), n  1,2,...N
n n n n 2

Первое уравнение в численной схеме (18) представляет собой начальное условие


задачи (6) . Тогда точное решение u( x, T ) в узлах равномерной сетки в последнем
временном слое n  N 2 :
4 2
 h2 N 2 2
 4T
uN2
m  cos(2mh)e  cos(2mh)e 6
 cos(2mh)e 3
, m  0,1,2,...N (19)

Описание программы
Для численной схемы (18) и теста (19) напишем программу, например, на языке С.
Нижеследующая программа написана с двойной точностью:
# include  stdio.h 
# include  math .h 
int N  100 , N1  N * N ;
intmain(){
int k , j;
double resN  1N1  1, xN  1;
double pi, h, dt;
pi  2.0 * a sin(1.0);
h  pi / double( N );
h*h
dt  ;
6 .0
for(k  0; k  N ; k  ){
resk 0  cos(2.0 * h * double(k ));
xk   resk 0* exp(4.0 * dt * double( N1));}
for( j  1; j  N1; j  )
{

94
for(k  1; k  N  1; k  )
{
 1.0 
resk  j     * resk  1 j  1  resk  1 j  1  4.0 * resk  j  1 ;
 6.0 
}}
 1.0 
res0 j     48.0 * res1 j   36.0 * res2 j   16.0 * res3 j   3.0 * res4 j ; (20)
 25.0 
 1.0 
resN  j     48.0 * resN  1 j   36.0 * resN  2 j   16.0 * resN  3 j   3.0 * resN  4 j ; (21)
 25.0 

pr int f (" x axact resolve \ n " );


for(k  0; k  N ; k  ) {
if (k  10 * int(double(k ) / double(10))  0)
{
print f (" x  %lf axact %.14lf res  %.14lf \ n", h * double(k ), x(k ), resk N1)
}}
pr int f ("h  %lf h * h * h * h  %lf \ n", h, h * h * h * h); }
Результаты численного решения
Покажем, насколько важно требовать согласование порядков аппроксимации p2  p1
дифференциального и граничного операторов в задачах математической физики. Для
этого аппроксимируем сначала граничный оператор первым порядком сходимости p1  1 ,
а дифференциальный оператор (11) , по – прежнему, четвертым порядком p2  4 . Т.е. в
формулах (16),(17) положим u0n  u1n , uNn  uNn 1 и в программе в формулах
(20),(21) res0 j   res1 j , resN  j   resN  1 j . . Программа возвращает таблицу
значений x, axact, resolve, delta (координату, точное решение, численное решение,
разность между численным и точным решениями delta  resolve axact ):

Таблица 1(N=400)
x axact resolve delta
0.00000000 0.00138821536422 -0.00116477704469 -0.00255299240891
0.31415927 0.00112308982151 -0.00141598028627 -0.00255282114823
0.62831853 0.00042898213940 -0.00208561646036 -0.00255264003627
0.94247780 -0.00042898213940 -0.00291666632857 -0.00255244911732
1.25663706 -0.00112308982151 -0.00359015697326 -0.00255224843765
1.57079633 -0.00138821536422 -0.00384758973613 -0.00255203804554
1.88495559 -0.00112308982151 -0.00359015697326 -0.00255181799127
2.19911486 -0.00042898213940 -0.00359015697326 -0.00255158832706
2.51327412 0.00042898213940 -0.00208561646036 -0.00255134910711
2.82743339 0.00112308982151 -0.00141598028627 -0.00255110038758
3.14159265 0.00138821536422 -0.00116477704469 -0.00255084222654

h  7.853981633974483E- 003, h4  3.80504261 8515720E- 009


Сравнивая значения exact и resolv в таблице 1, видим, что приближенное решение
даже не сходится к точному, так как приближенное решение всегда отрицательно, в то
время как точное

95
2
2
u  cos(2mh)e 3 , m  0,12,...,N дважды меняет знак при 0  x   . .
N2
m

Пусть теперь p1  p2  4 формулы (16),(17),(20),(21) написаны с четвертым порядком


аппроксимации. В таблице 2( N  200 )и в таблице 3( N  400 ) также указаны полученные
программой значения x, axact, resolve, delta.
Таблица 2( N  200 )
x axact resolve delta
0.00000000 0.00138821536422 0.00138821868693 0.00000000332271
0.31415927 0.00112308982151 0.00112309312266 0.00000000332223
0.62831853 0.00042898213940 0.00042898540013 0.00000000332168
0.94247780 - -0.00042897892418 0.00000000332107
0.00042898213940
1.25663706 -0.00112308982151 -0.00112308664158 0.00000000332039
1.57079633 -0.00138821536422 -0.00138821219752 0.00000000331964
1.88495559 -0.00112308982151 -0.00112308664158 0.00000000331883
2.19911486 -0.00042898213940 -0.00042897892418 0.00000000331796
2.51327412 0.00042898213940 0.00042898540013 0.00000000331702
2.82743339 0.00112308982151 0.00112309312266 0.00000000331602
3.14159265 0.00138821536422 0.00138821868693 0.00000000331495

h = 1.57079632
6794897E- 002, 6.088068189625153E- 008
В пространстве С непрерывных на отрезке 0,  функций с нормой Чебышева
x C  maxt0,  x(t ) норма разности приближенного и точного решений, заданной на
равномерной сетке, равна
delta  umN (resolve)  umN (axact)  max deltamN
2 2 2

C m 0,...N 
Из таблицы 2 видно при ( N  200) , что delta C  4 109 в то время как h4  6 108 ,
Другими словами, равномерная норма разности не превышает четвертой степени шага
равномерной сетки h .
Таблица 3 (N=400)
x axact resolve delta
0.00000000 0.00138821536422 0.00138821868693 0.00000000010439
0.31415927 0.00112308982151 0.00112308992513 0.00000000010439
0.62831853 0.00042898213940 0.00042898224150 0.00000000010438
0.94247780 -0.00042898213940 -0.00042898203902 0.00000000010437
1.25663706 -0.00112308982151 -0.00112308972249 0.00000000010436
1.57079633 -0.00138821536422 -0.00138821526571 0.00000000010435
1.88495559 -0.00112308982151 -0.00112308972249 0.00000000010434
2.19911486 -0.00042898213940 -0.00042898203902 0.00000000010433
2.51327412 0.00042898213940 0.00042898224150 0.00000000010432
2.82743339 0.00112308982151 0.00112308992513 0.00000000010430
3.14159265 0.00138821536422 0.00138821546861 0.00000000010429

h  7.85398163 3974483E- 003, h4  3.805042618515720E- 009


Аналогично, из таблицы 3 видно, что при ( N  400) delta C  2 1010 в то время
как h4  3 109 , и равномерная норма невязки также не превышает четвертой порядка
степени шага сетки h .

96
В общем случае, для определения (оценки) порядка сходимости разностной схемы, как
определяет А.А.Самарский 3 , стр. 57, необходимо требовать уменьшение погрешности
(нормы разности приближенного и точного решений) в 16 раз при уменьшении шага сетки
h в 2 раза (увеличении N в 2 раза) – для сходимости с четвертым порядком. В данной
разностной схеме при увеличении N в 2 раза (с 200 до 400) погрешность по норме
 3 10 9 
Чебышева уменьшается примерно в  10  30  16  раз.
 10 
Необходимо выбирать большие N , так как указанное требование может проявляться
на практике только в асимптотике 3 . Другими словами, численная схема (18)
аппроксимирует задачу (6) и ее решение на последнем временном слое (19) с четвертым
порядком. Легко видеть, что в общем случае от формулы (11) на конечном временном
слое достаточно требовать меньшей точности – второй порядок сходимости:
   2 4 
um ~ N o(  h ) ~ N o(h ) ~ o(N h ) ~ o   h  ~ o (h2 )
N2 2 2 4 2 4 2 4
(20)
 h  
 
Используя формулу (20) , можно теоретически обосновать сходимость (расходимость)
∞ ∞Действительно, в случае равенства p2  p1  4 порядок аппроксимации общей задачи
p  min(p1, p2 )  4 и согласно (20) на последнем временном слое разностное решение

(18) сходится при h  0 к решению дифференциальной задачи u( x, t )  uh ( x, t ) ~ o(h2 ) 
(6) не хуже чем со вторым порядком.
Если p2  1; p1  4, то p  min(p1, p2 )  1 , т.е. на конечном временном слое невязка
между решениями разностной и дифференциальной задачами имеет асимптотику:
 
N 2 o(h) ~ N 2 h o(1)  N 2   o(1) ~ N o(1) .
N

Поскольку o(1) может иметь слабую сходимость, например, при


1
h  0(  N  ); o(1) ~ ,
lnN
То u( x, t )  uh ( x, t ) ~ N/lnN   , N  .
Что доказывает расходимость задачи в последнем случае.
Литература
1) Бахвалов Н.С., Лапин А.В., Чижонков Е.В.Численные методы в задачах и
упражнениях. – М.:БИНОМ, Лаборатория знаний, 2010.
2) Пикулин В.П., Похожаев С.И. Практический курс по уравнениям математической
физики. – М: Наука, ФИЗМАТЛИТ, 1995.
3) Самарский А.А., Вабишевич П.Н. Численные методы решения обратных задач
математической физики. Учебное пособие. – М.: Издательство ЛКИ, 2014 – 480 с.
4) Герец А.Ю., Зеленкевич А.А., Гурьева Н.А.,Пастухов Ю.Ф.,Пастухов Д.Ф.
Согласование порядков аппроксимации дифференциального и граничного
операторов в краевой задаче для уравнений в частных производных. Вестник
Полоцкого государственного университета, серия С, №12,2015, стр.102.

97
Лабораторная работа№13
Аппроксимация двойных интегралов
Составная формула для отрезка, порядок аппроксимации.
Рассмотрим канонический отрезок[-1,1], на котором в силу симметрии узлы
квадратурной формулы расположены симметрично относительно нуля, а весовые
коэффициенты, соответствующие симметричным узлам имеют равные
положительные значения, как в формуле Симпсона. Разделим отрезок [-1,1] на 6
равных частей, т.е. используем 7 равноотстоящих узлов.
Получим формулу (по узлам x1  1, x2  2 / 3, x3  1/ 3, x4  0, x5  1/ 3, x6  2 / 3, x7  1,
n  6 ):
-1 -2/3 -1/3 0 1/3 2/3 1

x1 x2 x3 x4 x5 x6 x7
С3 С2 С1 С0 С1 С2 С3
1

 f ( z)dz  С 0 f (0)  C1  f (1/ 3)  f (1/ 3)  C2  f (2 / 3)  f (2 / 3)  C3  f (1)  f (1) (1)
1
Подставляя в формулу (1) в качестве функции f (z ) степенные мономы, начиная с
нулевой степени, используя только чётные степени мономов, получим систему
уравнений:
1 1
f ( z )  1,
1
 f ( z)dz   dz  2  С
1
0  2C1 2C2  2C3
1 1
2 2 8
f ( z)  z 2 ,  f ( z)dz   z dz   C1  C2  2C3  3  C1  4C2  9C3
2

1 1
3 9 9

f ( z)  z 4 ,
1 1
2 2 32
 f ( z)dz   z dz   C1  C2  2C3  81  5C1  80C2  405C3
4

1 1
5 81 81

f ( z)  z 6 ,
1 1
2 2 128
 f ( z)dz   z dz   C1  C2  2C3  729  7C1  448C2  5103C3
6

1 1
7 729 729

Нужно решить систему линейных уравнений с 4 неизвестными.


2  С0  2C1  2C2  2C3
3  C  4C  9C
 68 9 18 41
 С0  , С1  , С 2  , С3 
1 2 3
 (2)
81  5C1  80C2  405C3 105 140 35 420
729  7C1  448C2  5103C3
Из формул (1) и (2) получим формулу (3):
1

1 f ( z)dz  S f  105 f (0)  140 f (1/ 3)  f (1/ 3)  35  f (2 / 3)  f (2 / 3)  420 f (1)  f (1)
68 9 18 41
(3)

 9 18 41 
1
68
В частности, если f ( z)  1,  f ( z)dz  2   2    - имеем длину
1
105  140 35 420
канонического отрезка [-1,1].
98
Шаблон весовых коэффициентов для составной формулы по решению системы
уравнений (2)(коэффициенты на внутренних границах удваиваются):
 41 18 9 68 9 18 41 18 9 68 9 18 41 
 . , , , , , , , , , , ,  ( n  12 )
 420 35 140 105 140 35 210 35 140 105 140 35 420
Для интеграла на отрезке [a, b] составная формула (на базе (3)) с равномерным шагом
сетки n  6k , k  N :
3(b  a) (b  a)
, S f   С j f x j , x j  a  h * j
b n
I 1   f ( x)dx 3hS f  S f ,h  (4)
a
n n 0

Где в квадратурной формуле (4) значение однократного интеграла I 1


(b  a)
пропорционально шагу равномерной сетки h  , коэффициент 3 выбран
n
согласно принципу соответствия (при делении отрезка[-1,1] на 6 равных частей
h  1/ 3,3h  1, S f  2, I1  3hS f  2  b  a, b  1, a  1)
Удобно разбить S f ( n  6k , k  N ) в формуле(4) на 5отдельных слагаемых
S f  S1  S2  S3  S4  S5 (5)

1) если j  0 или j  n : S1 
41
 f (a)  f (b), С j  41 ;
420 420
(5.1)
18  k 1 k 1

2)если j  1mod6 или j  5 mod6 : S2    f a  h(1  6s)   f a  h(5  6s) (5.2)
35  s0 s 0 
18
Сj  ;
35
3) если j  2 mod6 или j  4 mod6 :
9  k 1 k 1

S3    f a  h(2  6s)   f a  h(4  6s) (5.3)
140 s0 s 0 
9
Сj  ;
140

68  k 1 
4) если j  3 mod6 : S 4    f a  h(3  6s)
105 s0 
(5.4)
68
Сj  ;
105
41  k 1 
5) если j  0 mod6 : S5    f a  h(6s)
210 s1 
41
Сj  ;
210

Алгоритмическое разбиение квадратуры S f в(4) на 4 слагаемых (формулы (5))


обусловлено экономией машинного времени и уменьшением суммарной ошибки.
Действительно, в (5) мы складываем все узловые значения функции с одинаковым
весом С j и только один раз умножаем полученную сумму на этот вес С j .

99
2
b x10
Рассмотрим пример: b  2, a  0, f ( x)  x , I ( f )  
9
f ( x)dx   102.4
a 10 0
Программа соответствует построенному алгоритму и формулам (4), (5.1-5.4),
написана на языке C++ и приведена ниже:
//////////////////////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<math.h>

double f(double x);


int const n=60,k=n/6;
main()
{
int s,j;
double a,b,c,d,h1,h2,bb[n+1],x,y,x1;
double sum,sum1,sum2,sum3,bac1,bac,delta,epsilon;
printf("n=%d k=%d\n",n,k);
a=0.0;
b=2.0;
h1=(b-a)/double(n);
bac1=0.0;
sum=0.0;
sum1=0.0;
sum2=0.0;
sum3=0.0;
for(s=0;s<=k-1;s++)
{
x=a+h1*(1.0+6.0*double(s));
x1=a+h1*(5.0+6.0*double(s));
sum=sum+f(x)+f(x1);
}
sum=sum*(18.0/35.0);
for(s=0;s<=k-1;s++)
{
x=a+h1*(2.0+6.0*double(s));
x1=a+h1*(4.0+6.0*double(s));
sum1=sum1+f(x)+f(x1);
}
sum1=sum1*(9.0/140.0);
for(s=0;s<=k-1;s++)
{
x=a+h1*(3.0+6.0*double(s));
sum2=sum2+f(x);
}
sum2=sum2*(68.0/105.0);
for(s=1;s<=k-1;s++)
{
x=a+6.0*h1*double(s);

sum3=sum3+f(x);
}
sum3=sum3*(41.0/210.0);

100
bac1=sum+sum1+sum2+sum3+(f(a)+f(b))*(41.0/420.0);
bac1=bac1*3.0*h1;

delta=102.4-bac1;
epsilon=delta/bac1;
printf("int 1 =%.14lf, exact=%.14lf delta=%.14lf eps=%.16lf\n",bac1, 102.4,delta,epsilon);
}
double f(double x )
{
return x*x*x*x*x*x*x*x*x;
}
//////////////////////////////////////////////////////////////////////
При n=120 k=20 программа возвращает значения:
int 1 =102.40000000000461, exact=102.40000000000001 delta=-0.00000000000460 eps=
-0.0000000000000450
Press any key to continue
При n=60 k=10 программа воpвращает значения:
int 1 =102.40000000118513, exact=102.40000000000001 delta=-0.00000000118513 eps=
-0.0000000000115735
Press any key to continue
Откуда видно, что абсолютная погрешность изменяется
delta2 0.00000000 118513
  257,6  28
delta1 0.00000000 000460
Т.е. порядок аппроксимации полученной составной одномерной формулы равен 8.
delta I ( f )  S f
Параметр eps    относитель ь не должна быть меньше
ная погрешност
Sf Sf
1016 , выполнение асимптотики (порядок аппроксимации p  8 ) можно ожидать
при eps  1015 .
2.Построение двумерного алгоритма
Двумерную квадратурную формулу на прямоугольнике получим как декартовое
произведение двух одномерных формул, заданных на отрезке, по аналогии с формулой
(4):

(b  a) (d  c)
, S f   Ci , j f  y j xi ,
b d n n
I 2    f ( x, y )dxdy 9h1h2 S f , h1  , h2 
a c
n n j 0 i 0

xi  a  h1 * i, y j  c  h2 * j; i, j  0, n
(6)
Где: C i , j - весовые коэффициенты определяются формулой (7)
В частности, при f ( x, y)  1, I 2  4, a  c  1, b  d  1 получаем площадь канонического
квадрата со стороной 2([-1,1]*[-1,1]). h1  h2  1/ 3, S f  4 - как повторная сумма при
фиксированной внешней переменной суммирования j (при этом сумма по внутренней
переменной i равна 2 при фиксированной переменной j) в соответствии с формулой (7).

101
Ci , j  Сi * C j ; i, j  0, n

С  18 если i  1 mod6 или i  5 mod6 
 i 35

С  9 если i  2 mod6 или i  2 mod6 
 i 140
 (7)
Сi 
68
еслиi  3 mod6 
 105

Ci  210 если i  0 mod6, i  0, i  n 
41

С  41 если i  0, i  n 
 i 420
10 10 10
y5 105
Рассмотрим пример: найти I 2    exp(x) y dxdy  exp x  
4
exp10  1 .
0 0
5 0
5
В данном примере выбраны большие размеры области интегрирования, кроме того
экспоненциальная функция растёт значительно быстрее степенной, именно при этих
условиях можно проследить асимптотику для порядка аппроксимации(p=8).

Согласно формулам (6),(7) построим алгоритм для программы на Visual C++ 6.0:
/////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<math.h>

double f(double x, double y);


int const n=120,k=n/6;
main()
{
int s,j;
double a,b,c,d,h1,h2,bb[n+1],x,y,x1;
double sum,ss,sum1,sum2,sum3,bac1,bac,bac2,delta,epsilon;
printf("n=%d k=%d\n",n,k);
a=0.0;
b=10.0;
c=a;
d=b;
h1=(b-a)/double(n);
h2=(d-c)/double(n);
bac1=0.0;
bac2=0.0;
sum=0.0;
sum1=0.0;
sum2=0.0;
sum3=0.0;
for (j=0;j<=n;j++)
{
y=c+h2*double(j);
bac1=0.0;
sum=0.0;
sum1=0.0;
sum2=0.0;

102
sum3=0.0;
for(s=0;s<=k-1;s++)
{
x=a+h1*(1.0+6.0*double(s));
x1=a+h1*(5.0+6.0*double(s));
sum=sum+f(x,y)+f(x1,y);
}
sum=sum*(18.0/35.0);
for(s=0;s<=k-1;s++)
{
x=a+h1*(2.0+6.0*double(s));
x1=a+h1*(4.0+6.0*double(s));
sum1=sum1+f(x,y)+f(x1,y);
}
sum1=sum1*(9.0/140.0);
for(s=0;s<=k-1;s++)
{
x=a+h1*(3.0+6.0*double(s));
sum2=sum2+f(x,y);
}
sum2=sum2*(68.0/105.0);
for(s=1;s<=k-1;s++)
{
x=a+6.0*h1*double(s);

sum3=sum3+f(x,y);
}
sum3=sum3*(41.0/210.0);

bac1=sum+sum1+sum2+sum3+(f(a,y)+f(b,y))*(41.0/420.0);
if(j==0 || j==n)
{
bb[j]= bac1*(41.0/420.0);
}
еlse if(j%6==1 || j%6==5)
{
bb[j]= bac1*(18.0/35.0);
}
else if(j%6==2 || j%6==4)
{
bb[j]= bac1*(9.0/140.0);
}
else if(j%6==3)
{
bb[j]= bac1*(68.0/105.0);
}
else if(j%6==0 && j>0 && j<n)
{
bb[j]=bac1*(41.0/210.0);
}
}
for(j=0;j<=n;j++)

103
{
bac2=bac2+bb[j];
}
bac2=bac2*(9.0*h2*h1);
ss=(exp(10.0)-1.0)*(10.0*10.0*10.0*10.0*10.0)/5.0;
delta=ss-bac2;
epsilon=delta/bac1;
printf(" eps=%.16lf\n",epsilon);

printf("int 2 =%.10lf, exact=%.10lf delta=%.10lf\n",bac2,ss,delta);


}
double f(double x, double y)
{
return exp(x)*y*y*y*y;
}

При n=120 k=20 программа возвращает значения:


eps=-0.0000000000012346
int 2 =440509315.8972221000, exact=440509315.8961343800 delta=-0.0010877252
Press any key to continue
При n=240 k=40 программа возвращает значения:
eps=-0.0000000000000022
int 2 =440509315.8961383100, exact=440509315.8961343800 delta=-0.0000039339
Press any key to continue
Откуда видно, что абсолютная погрешность изменяется
delta1 0.00108772 52
  276,5  256  28
delta2 0.00000393 39
Т.е. порядок аппроксимации полученной составной двумерной формулы равен 8.
delta I ( f )  S f
Параметр eps    относитель ь не должна быть меньше
ная погрешност
Sf Sf
1016 , выполнение асимптотики (порядок аппроксимации p  8 ) можно ожидать, что
при eps  1015 , что в последних двух расчётах выполнено.

104
Лабораторная работа № 14
Аппроксимация тройного интеграла
Учитывая предыдущий опыт построения алгоритма I 2 по I 1 , получим алгоритм
трёхмерной квадратурной формулы для объёмного интеграла I 3 как декартово
произведение трёх одномерных на отрезке квадратурных формул:
(b  a) (d  c) ( f  e)
b d f
I 3     f ( x, y, z )dxdydz27h1h2 h3 S f , h1  , h2  , h3 
a c e
n n n

S f   Ci , j ,k f xi y j zk ,
n n n
(8)
k 0 j 0 i 0

xi  a  h1 * i, y j  c  h2 * j , zk  c  h3 * k ; i, j , k  0, n
Ci , j ,k  Сi * C j * C k ; i, j , k  0, n

С  18 еслиi  1mod6 или i  5 mod6 
 i 35

С  9 еслиi  2 mod6 или i  2 mod6 


i
140 (9)

Сi 
68
еслиi  3 mod6 
 105

Ci  210 еслиi  0 mod6, i  0, i  n 
41

С  41 если i  0, i  n 


i
420
В частности, при f ( x, y, z)  1, I 3  8, a  c  e  1, b  d  f  1получаем объём
канонического куба со стороной 2([-1,1]*[-1,1] *[-1,1]). h1  h2  h3  1/ 3, S f  8 - как
повторная тройная сумма при фиксированных внешних переменной суммирования j,k (
при этом сумма по внутренней переменной i равна 2 при фиксированных переменных j,k)
в соответствии с формулой (9).
4 4 4 4
y5 z 6 11
Приведём пример: найти I 3     exp(x) y z dxdydz 4 5
exp x   4 exp4  1
0 0 0
5 6 0
30
Согласно формулам (8),(9) построим алгоритм для программы на Visual C++ 6.0:
#include<stdio.h>
#include<math.h>

double f(double x, double y, double z);


int const n=120,k=n/6;
main()
{
int s,j,j1;
double a,b,c,d,e,f1,h1,h2,h3,aa[n+1],bb[n+1],x,y,z,x1,xx;
double sum,sum1,sum2,sum3,sum4,epsilon,bac1,bac,bac2,bac3,delta;
printf("n=%d k=%d\n",n,k);
a=0.0;
c=a;
e=a;
b=4.0;
d=b;
f1=b;
h1=(b-a)/double(n);
h2=(d-c)/double(n);

105
h3=(f1-e)/double(n);
for(j1=0;j1<=n;j1++)
{
z=e+h3*double(j1);
for(j=0;j<=n;j++)
{
bac1=0.0;

y=c+h2*double(j);
sum=0.0;
sum1=0.0;
sum2=0.0;
sum3=0.0;
for(s=0;s<=k-1;s++)
{
x=a+h1*(1.0+6.0*double(s));
x1=a+h1*(5.0+6.0*double(s));
sum=sum+f(x,y,z)+f(x1,y,z) ;
}
sum=sum*(18.0/35.0);
for(s=0;s<=k-1;s++)
{
x=a+h1*(2.0+6.0*double(s));
x1=a+h1*(4.0+6.0*double(s));
sum1=sum1+f(x,y,z)+f(x1,y,z);
}
sum1=sum1*(9.0/140.0);
for(s=0;s<=k-1;s++)
{
x=a+h1*(3.0+6.0*double(s));
sum2=sum2+f(x,y,z);
}
sum2=sum2*(68.0/105.0);
for(s=1;s<=k-1;s++)
{
x=a+h1*(6.0*double(s));
sum3=sum3+f(x,y,z);
}
sum3=sum3*(41.0/210.0);
bac1=3.0*h1*(sum +sum1+sum2+sum3+(41.0/420.0)*(f(a,y,z)+f(b,y,z)));
if( (j==n) || (j==0))
{
bb[j] = (41.0/420.0)*bac1;
}
else if((j%6==1) || (j%6==5) )
{
bb[j] = (18.0/35.0)*bac1;
}
else if((j%6==2) || (j%6==4) )
{
bb[j] = (9.0/140.0)*bac1;
}

106
else if(j>0 && j<n && j%6==0)
{
bb[j]=(41.0/210.0)*bac1;
}
else if(j%6==3)
{
bb[j]=(68.0/105.0)*bac1;
}
}
bac=0.0;
for(j=0;j<=n;j++)
{
bac=bac+bb[j];
}
bac=bac*h2*3.0;
if(j1==0 || j1==n)
{
aa[j1]=(41.0/420.0)*bac;
}
else if(j1%6==1 || j1%6==5)
{
aa[j1]=(18.0/35.0)*bac;
}
else if(j1%6==2 || j1%6==4)
{
aa[j1]=(9.0/140.0)*bac;
}
else if(j1%6==0 && j1>0 && j1<n)
{
aa[j1]=(41.0/210.0)*bac;
}
else if(j1%6==3 )
{
aa[j1]=(68.0/105.0)*bac;
}
}
bac2=0.0;
for(s=0;s<=n;s++)
{
bac2=bac2+aa[s];
}
bac2=bac2*h3*3.0;
xx=(-1.0+exp(4.0))*1024.0*1024.0*4.0/30.0;
delta=bac2-xx;
epsilon=delta/bac2;
printf(" eps=%.16lf\n",epsilon);

printf("int 3 =%.25lf, exact=%.25lf delta=%.25lf\n",bac2, xx,delta);


}
double f(double x, double y, double z)
{
return exp(x)*y*y*y*y*z*z*z*z*z;

107
}
При n=60 k=10 программа возвращает значения:
eps=0.0000000000004155
int 3 =7493564.5025570132000000000000000, exact=7493564.5025538998000000000000000
delta=0.0000031134113669395447000
Press any key to continue
n=120 k=20
eps=0.0000000000000014
int 3 =7493564.5025539100000000000000000, exact=7493564.5025538998000000000000000
delta=0.0000000102445483207702640
Press any key to continue

Откуда видно, что абсолютная погрешность изменяется


delta1 0.00000311 3411366939 5447000
  303.9  256  28
delta2 0.00000001 0244548320 7702640
Т.е. порядок аппроксимации полученной составной трёхмерной формулы равен 8.
delta I ( f )  S f
Параметр eps    относитель ь не должна быть меньше
ная погрешност
Sf Sf
1016 , выполнение асимптотики (порядок аппроксимации p  8 ) можно ожидать
при eps  1015 , что в последних двух расчётах выполнено.

108
Лабораторная работа №15
Интерполяция интегралов в полярной системе координат
Рассмотрим равновеликое отображение обобщённых координат - полярных в кольце
(круге) на прямоугольник в декартовой системе координат, сохраняющее площади фигур
и равномерный шаг сетки вдоль всех координатных линий:
b  r2  r1, a   r2  r1  , где: r2 ,r1  внешний и внутренний радиусы кольца, a, b  стороны
прямоугольника, S  ab   r22  r12  площадь кольца. 
x  a  r2  r1  r  r 
0  x  a,0  y  b,  , y  r  r1 , dx  d , dy  dr , h1  , h2  2 1 .
a 2 2 n n
При таком отображении оба берега разреза кольца вдоль радиуса
  0  x  0;  2  x  a переходят в вертикальные стороны прямоугольника,
внутренняя и внешняя окружности r1  const  y  0; r2  const  y  r2  r1 переходят в
горизонтальные стороны прямоугольника.
По теореме 4(стр.282) [5]отображение x(r , ), y(r, ) должно обладать следующими
a
Dx, y  xr , x 0 a
свойствами: якобиан замены координат   2    0 во всех точках
Dr ,  yr , y 2
1 0
рассматриваемой области; частные производные xr , x , yr , y непрерывны во всех точках
области; отображение x(r , ), y(r, ) взаимно однозначно в силу линейности
отображения обобщённых координат. Все требования выполнены, если область
интегрирования - кольцо ( r1  0 ). В случае круга ( r1  0 ) выполнены первые 2 требования,
кроме третьего (неоднозначность отображения в точке r1  0 ), что в данном интеграле
несущественно, так как мера интеграла в полярных координатах в окрестности указанной
точки dI2  f r, rdrd  f 0, 0drd  0 .
r2 2  r2 r1   r2  r1 
 2  2 2  2 
b a
I 2    f r ,  rdrd     f  y  r1 , x  y  r1 dy dx    f  y  r1 , x (r1  y )dydx 
r1 0 0 0  a  a a 0 0  a 
r2 r1   r2 r1  r2 r1   r2 r1 
2  2  2  2 
 r2  r1   
0 0
f  y  r1 , x (r1  y)dydx 
 a  r2  r1   
0 0
f  y  r1 , x (r1  y)dydx 
 a 
2 nh1 nh2 
n n
2  n h1h2 2 n

n
2 
  C
r2  r1  2 2 i0 j0 
i, j f  r1  y j , xi
a 
( r1  y j )  
2r2  r1  i0 j 0
Ci , j f  r1  jh2 , ih1 (r1  jh2 ) (*)
 a 
Рассмотрим пример:
2
10 2
r10 1
10 2  sin 2 
0 0 r sin  rdrd  10 2 0 1  cos2 d  10   4 0   10   3141592653.589793
8 2 9 9

0  
Программа, учитывающая формулы(*),(12),(13)приложения, написана на языке C++:
#include<stdio.h>
#include<math.h>
double f(double x, double y, double b);
double alg(int s, int n);
int const n1=3;
main()
{
int s,j,n,t,p;
int n0,i,jj,jjj;
double v[n1+1],vv[n1+1];
double a,aa,b,bb,c,d,h1,h2,x,y,r,r1,r2,x1,pi,res,xx;

109
double sum, bc, delta, epsilon;
double cab, caban, mins;
n0=14;
pi=2.0*asin(1.0);
r1=5.0;
r2=10.0;
for(t=1;t<=n1;t++)
{
n=n0;
printf("n=%d t=%d\n",n0,t);
a=0.0;
c=a;
b=(r1+r2)*pi;
d=(r2-r1);
h1=(b-a)/double(n);
h2=(d-c)/double(n);
bc=0.0;
for(j=0;j<=n;j++)
{
y=c+h2*double(j);
for(i=0;i<=n;i++)
{
x=a+h1*double(i);
bc=bc+f(x,y,b)*alg(i,n)*alg(j,n);
}
}
bc=bc*(2.0*pi*49.0*h2*h1)/b;
res=bc;
v[t]=bc;
xx= pi*(pow(10.0,10.0)-pow(5.0,10.0))/10.0;
delta=xx-res;
printf("numerical=%.16lf v[%d]=%.16lf exact=%.16lf delta=%.16lfn=%d\n", res, t,
v[t],xx,delta,n0);
epsilon=delta/xx;
printf("epsilon(%d)=%.16lf \n",n0,epsilon);
n0=n0+14;
}
for(s=1;s<=n1;s++)
{
vv[s]=v[s];
}
for(s=1;s<=n1;s++)
{
mins=1e10;
for(j=s;j<=n1;j++)
{
if(vv[j]<mins)
{
mins=vv[j];
jj=j;
aa=mins;
bb=vv[s];

110
}
}
vv[s]=aa;
vv[jj]=bb;
}
for(s=1;s<=n1;s++)
{
printf("v(%d)=%lf\n",s,vv[s]);
}
for(s=1;s<=n1;s++)
{
if(vv[(n1+1)/2]==v[s])
{
jjj=s;
}
}
if(n1%2==1)
{
cab=vv[(n1+1)/2];
}
else
{
cab=(vv[n1/2]+ vv[n1/2+1])/2.0;
}
delta=cab-xx;
epsilon=delta/xx;
printf("result:\n");
printf(" n(opt)=%d eps(%d)=%.16lf \n", jjj, jjj, epsilon);
printf("int =%.16lf, exact=%.16lf delta=%.16lf\n",cab,xx,delta);
}
double f(double x, double y, double b)
{
double pi,z,fi,r,r1;
r1=5.0;
pi=2.0*asin(1.0);
fi= 2.0*pi*x/b;
r=y+r1;
z=r*r*r*r*r*r*r*r*sin(fi)*sin(fi);
return z*r;
}
double alg(int s, int n)
{
double res;
if(s==0 || s==n)
{
res= 90241897.0/2501928000.0;
}
else if(s%14==1 || s%14==13)
{
res= 44436679.0/156370500.0;
}
else if(s%14==2 || s%14==12)

111
{
res= -770720657.0/2501928000.0;
}
else if (s%14==3 || s%14==11)
{
res= 109420087.0/78185250.0;
}
else if(s%14==4 || s%14==10)
{
res= -6625093363.0/2501928000.0;
}
else if(s%14==5 || s%14==9)
{
res= 789382601.0/156370500.0;
}
else if(s%14==6 || s%14==8)
{
res= -5600756791.0/833976000.0;
}
else if(s%14==7)
{
res= 101741867.0/13030875.0;
}
else if s%14==0 || s>0 || s<n)
{
res= 2.0* 90241897.0/2501928000.0;
}
return res;
}

При n1  5, r1  0.0, r2  10.0 программа возвращает значения (в программе N  n ):


n=14 t=1 numerical=3141521192.673302 exact=3141592653.589793 delta=71460.916492n=14
epsilon(14)=0.0000227467161950
n=28 t=2 numerical=3141592655.167346 exact=3141592653.589793 delta=-1.577553n=28
epsilon(28)=-0.0000000005021507
n=42 t=3 numerical=3141592653.589776 exact=3141592653.589793 delta=0.000017n=42
epsilon(42)=0.0000000000000055
n=56 t=4 numerical=3141592653.589798 exact=3141592653.589793 delta=-0.000005n=56
epsilon(56)=-0.0000000000000015
n=70 t=5 numerical=3141592653.589792 exact=3141592653.589793 delta=0.000001n=70
epsilon(70)=0.0000000000000005
v(1)=3141521192.673302
v(2)=3141592653.589776
v(3)=3141592653.589792
v(4)=3141592653.589798
v(5)=3141592655.167346
result: n(opt)=5 eps (5)=-0.0000000000000005
int(polar) =3141592653.589792, exact=3141592653.589793 delta=-0.000001 Press any key to
continue.
Мы видим, что значение интеграла в круге r1  0, r2  10 достигается с двойной
точностью epsilon  5 *1016 и n  70 . Часто на практике неизвестно точное значение
интеграла, например, значение интеграла не может быть выражено через элементарные
112
функции. Поэтому в программе использован алгоритм медианной фильтрации,
позволяющий из нескольких значений интеграла при малых параметрах N  14 k выбрать
значение с наименьшей относительной ошибкой, являющееся центральным элементом
окна фильтра (элемент массива v[n1  1 / 2], n1  5 ), как видно по результату программы.
Медианная фильтрация применима здесь благодаря знакопеременности относительной
погрешности epsilon.
10 2 10

Рассмотрим пример:   r sin rdrd  


8 2 r10
10
 
  1010  510 / 10  3138524692
.01402
5 0 5

Для параметров n1  3, r1  5.0, r2  10.0 программа возвращает значения:


result: n(opt)=3 epsilon(3)=0.0000000000000021
int(polar) =3138524692.014029, exact=3138524692.014022 delta=0.000007 Press any key to
continue
То есть в кольце формульная пара(25),(13)обеспечивает двойную точность интегральной
квадратуры.

113
Лабораторная работа №16
Тройные интегралы в сферической системе координат

Рассмотрим равновеликое отображение обобщённых координат - сферической


системы в шаре (шаровом слое) на декартовую систему в параллелепипеде, сохраняющее
объёмы тел и равномерный шаг сетки вдоль всех координатных линий:
4  r  r1r2  r1 
2 2
a   r2  r1 , b   2 , c  r2  r1 , где: r2 ,r1  внешний и внутренний радиусы

3 r2  r1 
шарового слоя, a, b, c  стороны параллелепипеда V  abc   r23  r13   объём шарового
4
3
слоя.
x   y a b
0  x  a,0  z  b,0  z  c,  ,  , z  r  r1 , dx  d , dy  d , dz  dr
a 2  b 2 
r2  r1 b a
zk  kh1 , h1  ; y j  h2 j , h2  j; xi  h3i, h3  i; i, j , k  0, n
n n n
При отображении x(r , , ), y(r , , ), z (r , , ) внутренняя и внешняя сферы переходят в
нижнюю и верхнюю грани параллелепипеда r1  const  z  0; r2  const  z  r2  r1 .
Сечения:   0  x  0;  2  x  a;  0  y  0,    y  b . По теореме 9
(стр.298)[5] отображение x(r , , ), y(r , , ), z (r , , ) должно обладать свойствами:
a
0 0
xr , x , x 2
D  x, y , z  b ab
якобиан перехода  yr , y , y  0 0   2  0 Первые три требования
D r , ,    2
z r , z , z 1 0 0

выполнены, если область - сферический слой, r1  0 , за исключением 2 азимутальных


направлений 1  0,1   (особые направления). Мы можем проколоть сферический слой
насквозь вдоль выбранных направлений, что топологически эквивалентно сфере с 1
ручкой. Сжать указанную область от полюсов к экватору так, что получится торообразный
слой с плоскими боковыми гранями, разрезать его от оси симметрии плоскостью   0 и
разогнуть полученное тело в параллелепипед. Вдоль особых направлений
неоднозначность отображения нарушается, что, однако, не сказывается на мере интеграла
в сферических координатах, так как во всех точках указанных направлений
  0,   , dI3  f r, , r 2 sin( )drd  0 . Для шара имеем ещё одну особую точку
r1  0 , выполнены первые 2 требования для гладкой замены переменных интегрирования
кроме третьего (неоднозначность отображения в точке r1  0 ). Что в данном интеграле
несущественно, так как мера интеграла в сферических координатах в окрестности
указанной точки: dI3  f r, , r 2dr sindd  f 0, , 02 dr sindd  0 .

r2  2
 y 2   y   2
c b a
I 3    f r , , r 2 dr sin dd   f  r1  z, , x r1  z  dz sin   dy dx
2

0 0 0    b b
r1 0 0
b a a

114
4  r2 2  r1r2  r12 

 r2  r1   r  r 
2 r2  r1 3 
2  2 1
 y 2   y 
   f  r1  z, , x r1  z  sin dzdydx
2

ab 0 0 0  b a  b
4  r2  r1r2  r1 
2 2

r2  r1 3  r2  r1   r  r 

3 2 1
 y 2   y 
x r1  z  sin dzdydx
    f  r1  z, ,
2

2 r2  r1r2  r1  b a  b
2 2
0 0 0

3 n n
 n y 2   y 
Ci , j ,k f  r1  zk , j , xi r1  zk  sin j  
nh1 nh2 nh3

 

2

2 r2  r1r2  r1 2 2 2 i0 j0 k 0


2 2
 b a   b 
3n3h1h2 h3 n n n
  2   
  Ci , j ,k f  r1  kh1 , h2 j, h3i r1  kh1  sin h2 j 
 
2
(*)
16 r2  r1r2  r1 i0 j 0 k 0   b 
2 2
b a
Рассмотрим пример:
10  2 10 2 
10 
 
r 10 1
 
2

5 0 0   1
 
10 5 2 0 2 0
r 7
sin  sin 
2
r dr sin dd  2
1  cos 2 d 1  cos 2 d  1010
 5
20
Программа с учётом формул (*),(10 - приложение) написана на языке C++:
#include<stdio.h>
#include<math.h>
double f(double x, double y, double z);
double alg(int s, int n);
main()
{
int s,j;
double a,b,c,d,e,f1,h1,h2,h3,x,y,z,xx,r1,r2;
double sum, epsilon, bc, delta, res, aa, bb;
double pi, mins, cab;
int t1,t2,n,k,i,t,n0,jj,jjj;
int const n1=3;
double v[n1+1],vv[n1+1];
n0=10;
pi=2.0*asin(1.0);
r1=5.0;
r2=10.0;
for(t=1;t<=n1;t++)
{
n=n0;
printf("n=%d t=%d\n",n0,t);
a=0.0;
c=a;
e=a;
b=pi*(r2+r1);
d= 4.0*(r2*r2+r2*r1+r1*r1)/(3.0*(r2+r1));
f1=r2-r1;
h1=(b-a)/double(n);
h2=(d-c)/double(n);
h3=(f1-e)/double(n);
bc=0.0;
for(k=0;k<=n;k++)
{
z=e+h3*double(k);

115
for(j=0;j<=n;j++)
{
y=c+h2*double(j);
for(i=0;i<=n;i++)
{
x=a+h1*double(i);
bc=bc+f(x,y,z)*alg(i,n)*alg(j,n)*alg(k,n);
}
}
}
bc=bc*h1*h2*h3*125.0;
res=bc;
res=res*2.0*pi*pi/(d*b);
xx=pi*pi*(pow(10.0,10.0)-pow(5.0,10.0))/20.0;
delta=res-xx;
epsilon=delta/res;
v[t]=res;
printf("numerical=%.6lf exact=%.6lf delta=%.6lf \n",res,xx,delta);
printf("epsilon(%d)=%.16lf \n",n0,epsilon);
n0=n0+10;
}
for(s=1;s<=n1;s++)
{
vv[s]=v[s];
}
for(s=1;s<=n1;s++)
{
mins=1e10;
for(j=s;j<=n1;j++)
{
if(vv[j]<mins)
{
mins=vv[j];
jj=j;
aa=mins;
bb=vv[s];
}
}
vv[s]=aa;
vv[jj]=bb;
}
for(s=1;s<=n1;s++)
{
printf("v(%d)=%lf\n",s,vv[s]);
}
for(s=1;s<=n1;s++)
{
if(vv[(n1+1)/2]==v[s])
{
jjj=s;
}
}

116
if(n1%2==1)
{
cab=vv[(n1+1)/2];
}
else if(n1%2==0)
{
cab=(vv[n1/2]+ vv[n1/2+1] )/2.0;
}
delta=cab-xx;
epsilon=delta/xx;
printf("result:\n");
printf(" n(opt)=%d eps(%d)=%.16lf \n",jjj,jjj,epsilon);
printf("int =%.6lf, exact=%.6lf delta=%.6lf\n",cab,xx,delta);
}
double f(double x, double y, double z)
{
double cab,fi,teta,r,pi,a1,b1,r1,r2;
pi=2.0*asin(1.0);
r1=5.0;
r2=10.0;
a1=pi*(r2+r1);
b1=4.0*(r2*r2+r2*r1+r1*r1)/(3.0*(r2+r1));
fi=2.0*x*pi/a1;
teta=pi*y/b1;
r=z+r1;
cab=r*r*r*r*r*r*r*sin(fi)*sin(fi)*sin(teta);
return cab *r*r*sin(teta);
}
double alg(int s, int n)
{
double res;
if(s==0 || s==n)
{
res=16067.0 / 299376.0;
}
else if( s%10==1 || s%10==9 )
{
res= 26575.0/74844.0;
}
else if( s%10==2 || s%10==8 )
{
res= -16175.0/99792.0;
}
else if(s%10==3 || s%10==7)
{
res= 5675.0/6237.0;
}
else if(s%10==4 || s%10==6)
{
res= -4825.0/5544.0;
}
else if(s%10==5)

117
{
res= 17807.0/12474.0;
}
else if(s%10==0 || s>0 || s<n)
{
res= 16067.0/149688.0;
}
return res;
}
Программа возвращает значения (в программе N  n ):
n=10 t=1 numerical=4914074506.509758 exact=4929983057.770709 delta=-15908551.260951
epsilon(10)=-0.0032373443340911
n=20 t=2 numerical=4929989554.759921 exact=4929983057.770709 delta=6496.989212
epsilon(20)=0.0000013178505025
n=30 t=3 numerical=4929983057.770734 exact=4929983057.770709 delta=0.000025
epsilon(30)=0.0000000000000050
v(1)=4914074506.509758
v(2)=4929983057.770734
v(3)=4929989554.759921
result: n(opt)=3 eps(3)=0.0000000000000050
int =4929983057.770734, exact=4929983057.770709 delta=0.000025 Press any key to
continue.
По первым 2 значениям delta при малых N оценим порядок погрешности
формул(26),(10):
delta(10)  -15908551. 260951
2028 211    2449 212  4096, что является хорошим
delta(20) 6496.98921
2
подтверждением леммы для алгоритма(11) и квадратур с алгебраическим порядком
точности равным 10, но применённым уже к тройному интегралу в сферической системе
координат.

118
Приложение
Квадратурные формулы в кратных интегралах

УДК 519.6 517.958


АППРОКСИМАЦИЯ ДВОЙНЫХ И ТРОЙНЫХ ИНТЕГРАЛОВ ВО ВНУТРЕННИХ
ЗАДАЧАХ МАТЕМАТИЧЕСКОЙ ФИЗИКИ
канд. физ.-мат. наук О.В. Голубева, д-р техн. наук С.Г.Ехилевский, канд. физ.-мат. наук
Н.А.Гурьева, канд. физ.-мат. наук Ю.Ф.Пастухов, канд. физ.-мат. наук Д.Ф.Пастухов
Аннотация: Получены формулы и алгоритмы для составных интегральных квадратур с
равномерным шагом 7-го,11-го,15-го алгебраического порядка погрешности и с 8,12,16
порядком погрешности соответственно во внутренних задачах математической физики.
Найдены аналоги формул для двойных на прямоугольнике и тройных в параллелепипеде
интегралов с сохранением такого же порядка погрешности, что и в одномерном случае.
Построены линейные отображения обобщённых координат с кольца (круга) на
прямоугольник, с шарового слоя (шара) на параллелепипед. Найдены интегральные
квадратуры в полярной и в сферической системах координат с сохранением
алгебраического порядка точности, что проверено численно. Доказана лемма,
указывающая минимальное число узлов достаточное для вычисления интеграла с
двойной точностью. Приведены соответствующие алгоритмы.
Ключевые слова: алгебраический порядок точности, порядок погрешности, метод
медианной фильтрации, шаровой слой, кольцо, аппроксимация интегралов.
THE APROXIMATION DOUBLE AND TRIPLE INTEGRAL IN MATHEMATICAL
PHYSICIST
Golubeva O.V,,Ehilevski S.G.,Gureva N.A.,Pastuhov D.F., Pastuhov YU.F.
The Abstract: are Received formulas and algorithms for component integral squarings with
even at a walk 7-go,11-go,15-go algebraic order to inaccuracy and with 8,12,16 rather
inaccuracy in internal problem mathematical physicists accordingly. Founded analogues molded
for double on rectangle and triple in parallelepiped integral with conservation such order to
inaccuracy, as in univariate event. The linear images of the generalised coordinates will Built
with layer of circle (the circle) on rectangle, with ball layer (the ball) on box, as well as integral
squarings in arctic coordinate system and in spherical coordinate system with conservation of the
algebraic order to accuracy that is checked numerically. The Proved lemma, indicating minimum
number of the nodes sufficient for calculation of the integral with double accuracy. They Are
Brought corresponding to algorithms.
The Keywords: algebraic order to accuracy, order to inaccuracy, method of median to filtering,
ball layer, ring, aproximation integral.
Введение
В задачах математической физики обычно используют области: прямоугольник
(параллелепипед), круг (шар). Например, во внутренней задаче Дирихле для уравнения
Лапласа в круге, во внутренней задаче Дирихле для уравнения Лапласа в шаре [1,2]. В
подобных задачах решение записывается в виде суммы ряда по собственным функциям
выбранной области и уравнения в частных производных. Коэффициенты разложения ряда
находят через двойные интегралы (в прямоугольнике, в круге, кольце) и тройные
интегралы (в параллепипеде, шаре, шаровом слое). В программе коэффициенты
разложения вычисляют по циклу, и их число может достигать несколько тысяч. Что в
свою очередь требует высокой точности расчёта двойных и тройных интегралов в задачах
математической физики.
Как известно, среди интегральных квадратурных формул при заданном числе
узлов аппроксимации на отрезке наибольший алгебраический порядок точности имеют
квадратурные формулы Гаусса [3,стр.44]. Для поиска узлов нужно построить
ортогональный на отрезке [a, b] многочлен степени n с весовой функцией
p( x)  0, x  [a, b] (у многочлена все n корней расположены на отрезке [a, b] ). Согласно

119
теореме Галуа произвольные многочлены степени больше четвёртой имеют корни, для
которых невозможно указать замкнутую формулу для решений, т.е. формулу,
содержащую только арифметические операции и корни произвольной степени. По
теореме Гаусса[3,стр.45] ортогональный многочлен степени n имеет квадратурную
формулу Гаусса точную для всех многочленов степени не выше 2n  1 (алгебраический
порядок точности). Таким образом, интегральная формула Гаусса с узлами и весовыми
коэффициентами, записанными через радикалы или рациональные дроби, может быть
точна для всех многочленов степени не выше 2n  1  2  4  1  7 .
Следовательно, корни ортогональных многочленов, равные узлам квадратурной
формулы Гаусса (с числом больше четырёх) необходимо искать с двойной точность[6],
например, с помощью формулы касательных Ньютона, что потребует не менее 250
итерации и более 1000 флопов[4]. В работе построены интегральные квадратурные
формулы с равномерным шагом, рациональными узлами и весовыми коэффициентами,
т.е. с двойной точностью. Найденные квадратурные формулы имеют алгебраический
порядок точности соответственно n  7,11,15. Полученные интегральные квадратурные
формулы в одномерном случае могут быть перенесены на двойные и тройные интегралы с
сохранением алгебраического порядка точности. В работе построено линейное
отображение обобщённых координат с прямоугольника (параллелепипеда) на круг,
кольцо, (шар, сферический слой), а квадратурные интегральные формулы в указанных
областях имеют тот же алгебраический порядок точности, что и на отрезке.
Немецкая группа математиков из университета города (Paderbom) создала пакет
программ MuPad Pro 2.5.2, в котором интегралы вычисляются всего с 10 значащими
цифрами, т.е. с точностью меньшей, чем достигнутая в данной работе.
1.Составная формула для отрезка, алгебраический порядок точности.
Аппроксимация определённого интеграла квадратурной формулой с
непрерывной функции
f (x) , x  [a, b] , имеет вид:
b n

 f ( z )dz   Ci f ( xi )  r ( f ) (1)
a i 0

Где: xi , i  0, n - узлы квадратурной формулы;


Ci  весовые коэффициенты; r ( f ) - погрешность аппроксимации.
b n
Из формулы (1) следует, что r ( f )   f ( z )dz   Ci f ( xi ) является линейным оператором
a i 0

относительно функции f как разность линейных операторов. Поэтому если формула(1)


 
точна для всех степенных функций вида x j : r x j  0, j  0, m , то r ( Pm ( x))  0 для всех
многочленов степени не выше m .
Определение 1. Пусть квадратурная формула(1) точна для всех степенных функций
x , k  0, m включительно, т.е. r( xk )  0, k  0, m , тогда говорят что алгебраический
k

порядок точности интегральной квадратурной формулы(1) равен m .


Определение 2. Пусть алгебраический порядок точности квадратурной формулы(1)
равен m , а погрешность r ( f ) формулы (1)отлична от нуля степенной функции
x l , l  m  1 , тогда говорят что порядок погрешности формулы(1) равен l . Другими
словами, порядок погрешности формулы (1) - минимальная степень многочлена l такая,
что r ( Pl ( x))  0 .
Рассмотрим канонический отрезок[-1,1], на котором в силу симметрии узлы
квадратурной формулы расположены симметрично относительно нуля, а весовые
коэффициенты симметричных узлов имеют равные значения. Выберем чётное число

120
интервалов разбиения n0  2l и нечётное число узлов 2n0  1 во всех квадратурных
формулах (в данной работе отрезок[-1,1] разбивается на n0 {6,10,14} число равных
частей).
Пользуясь формулой (1) , определением 1 найдём условия на весовые коэффициенты Ck в
квадратурной формуле с равномерным шагом на отрезке [-1,1](с учётом сказанной
симметрии):
1 n0 / 2

  dz  2  С0  2  С k
1 k 1
1 n /2 (2)
 z 2 s dz  2 /( 2s  1)  2 0 C 2k / n 2 s , s  1, n / 2
  k 0 0
1 k 1

Решение системы уравнений (2) подставим в квадратурную формулу (1), имеем:


1 n0 / 2

 f ( z)dz  С0 f (0)   Ck  f (2k / n0 )  f (2k / n0 ), xk  2k / n0 , k  0, n0 / 2 (3)


1 k 1
Сначала, разделим отрезок [-1,1] на 6 равных частей, т.е. используем 7 равноотстоящих
узлов:
x1  1, x2  2 / 3, x3  1/ 3, x4  0, x5  1/ 3, x6  2 / 3, x7  1 , n0  6
-1 -2/3 -1/3 0 1/3 2/3 1

x1 x2 x3 x4 x5 x6 x7
С3 С2 С1 С0 С1 С2 С3
Согласно симметрии и квадратурной формуле (3) ( n0  6 )получим:
1

 f ( z)dz  С 0 f (0)  C1  f (1 / 3)  f (1 / 3)  C2  f (2 / 3)  f (2 / 3)  C3  f (1)  f (1)


1
Подставляя в (2) степенные функции, начиная с нулевой степени, используя только
чётные степени (для нечётных степеней имеем тривиальные тождества 0  0 ), запишем
систему уравнений:
1 1
f ( z)  1 : 
1
f ( z )dz   dz  2  С
1
0  2C1 2C2  2C3
1 1
2 2 8
f ( z)  z 2 :  f ( z )dz  z dz   C1  C2  2C3  3  C1  4C2  9C3
2

1 1
3 9 9
1 1
2 2 32
f ( z)  z 4 :  f ( z)dz   z dz   C1  C2  2C3  81  5C1  80C2  405C3
4

1 1
5 81 81
1 1
128 2 2
f ( z)  z 6 :  f ( z)dz   z dz  7  729C
C2  2C3  729  7C1  448C2  5103C3 
6
1
1 1
729
То есть необходимо решить неоднородную систему 4 линейных уравнений с 4
неизвестными.
С0  2C1  2C2  2C3  2
C  4C  9C  3
 1 68 9 18 41 (4)
 С0  , С1  , С2  , С3 
2 3

5C
 1  80C 2  405 C3  81 105 140 35 420

 1
7 C  448C 2  5103 C3  729
Из формул (3)( n0  6 ) и (4) получим формулу (5):

121
1

 f ( z)dz  S f 
68
f ( 0) 
9
 f (1 / 3)  f (1 / 3)  18  f (2 / 3)  f (2 / 3)  41  f (1)  f (1) (5)
1
105 140 35 420
Проверкой убеждаемся, что коэффициенты С0 , С1 , С2 , С3 являются решением системы
уравнений(4), т.е. по определению 1 у квадратурной формулы (5) алгебраический порядок
1 3
точности равен семи (так как с учётом (4) и  z 7 dz  0   C 2k / 6  0 ), следовательно,
7
k
1 k  3
по определению 2 порядок погрешности для формулы (5) равен 8. В частности, если
f ( z )  1 :  f ( z )dz  2  68  2 9  18  41  , то интеграл равен длине отрезка [-1,1].
1

1
105  140 35 420
1 6
Учитывая шаг h  1 / 3 , перепишем формулу (5) в виде  f ( z )dz  3h Ci f ( xi ) , в общем
1 i 0
1 n0
hn0 hn0
случае:  f ( z)dz  
2 i 0
Ci f ( xi ),
2
 1, xi  1  ih, i  0, n0 (6)
1
Рассмотрим составную квадратурную формулу для вычисления определённого
интеграла, т.е. формула (6) используется k раз на отрезке [a, b],b  a  kn0 h . Шаблон
весовых коэффициентов для составной формулы получим из (4) (коэффициенты в
смежных узлах удваиваются), например:
 41 18 9 68 9 18 41 18 9 68 9 18 41 
 . , , , , , , , , , , ,  ( n  12, k  2, n0  6 )
 420 35 140 105 140 35 210 35 140 105 140 35 420
А определённый интеграл на отрезке [a, b] отличается от(6) длиной интервала в k  n / n0
раз.
ba
b
hn0 n0 *k n0

a f ( z ) dz  
2 i 0
C i f ( xi  Ci  2, h 
),
i 0 n
, xi  a  ih, i  0, n (7)

b
hn0 n0 *k hn
Для функции f ( z )  1,  f ( z )dz  
2 i 0
Ci  0 2k  hkn0  b  a . Т.е. составная формула
2
a

(7) является общей, в частности, коэффициенты Ci для случая ( n0  6 ) определяются


алгоритмом:

 41
если j  0 или j  n : С j  420;

если j  1 mod6 или j  5 mod6 : С  18 ;
 j
35
 (8)
 9
если j  2 mod6 или j  4 mod6 : С j  ;
 140
 68
если j  3 mod6 : С j  105;

если j  0 mod6 , j  0, j  n : С  41 ;


j
210
Аналогично формуле (5) можно разбить канонический отрезок[-1,1]
n0  10 равных частей (из соображений удобства разбиения), используя симметрию
весовых коэффициентов, и получить решение системы уравнений(2) ( n0  10 ), в которой
6 неизвестных коэффициентов С0 , С1 , С2 , С3 С4 , С5 являются решением неоднородной
системы n0 / 2  1  6 линейных уравнений с 11 алгебраическим порядком точности:

122
 17807 4825 5675 16175 26575 16067
 С0  , С1   , С2  , С3   , С4  , С5  (9)
 12474 5544 6237 99792 74844 299376
Проверим на компьютере, что рациональный вид коэффициентов (9)(символьное
решение системы (2) для n0  10 ) удовлетворяет(2) с двойной точностью(16 значащих
цифр). В таблице 1 в левой части указано точное значение интеграла
1
a(s)   z s dz, s  0,12 , а справа численное значение правой части уравнений системы (2) -
1
b(s) с использованием значений весовых коэффициентов (8) ( s  показатель степенной
функции).
Таблица 1
a(0)=2.0000000000000000 b(0)=2.0000000000000004
a(1)=0.0000000000000000 b(1)=0.0000000000000000
a(2)=0.6666666666666666 b(2)=0.6666666666666669
a(3)=0.0000000000000000 b(3)=-0.0000000000000000
a(4)=0.4000000000000000 b(4)=0.4000000000000001
a(5)=0.0000000000000000 b(5)=-0.0000000000000000
a(6)=0.2857142857142857 b(6)=0.2857142857142858
a(7)=0.0000000000000000 b(7)=0.0000000000000000
a(8)=0.2222222222222222 b(8)=0.2222222222222223
a(9)=0.0000000000000000 b(9)=-0.0000000000000000
a(10)=0.1818181818181818 b(10)=0.1818181818181819
a(11)= 0.0000000000000000 b(11)=-0.0000000000000000
a(12)= 0.1538461538461539 b(12)= 0.1554621683809524
Из таблицы 1 видно, что алгебраический порядок точности системы уравнений (2)
при n0  10 равен11, а порядок погрешности квадратурной формулы
1 10 10

 f ( z )dz  5h Ci f ( xi ) , где 5h  1,  Ci  2, xi  1  ih, i  0,10 равен 12( Сi определяются


1 i 0 i 0

с помощью (9)).
Из выражения (7) для n0  10 получим составную формулу:
(b  a )  10 
b n

a f ( z )dz  5h Ci f ( xi ), h 
, xi  a  ih, n  10k ,   Ci  2  (10)
i 0 n  i 0 
в которой весовые коэффициенты Ci определяются алгоритмом (11):
 16067
если j  0 или j  n : С j  ;
299376

если j  1 mod10 или j  9 mod10 : С j 
26575
;
 74844

если 16175
j  2 mod10 или j  8 mod10 : С j   ;
 99792
 (11)
 5675
если j  3 mod10 или j  7 mod10 : С j  ;
 6237
 4825
если j  4 mod10 или j  6 mod10 : С j   ;
 5544
если j  5 mod10 : С j 
17807
;
 12474

если j  0 mod10 , j  0, j  n : С j 
16067
;

 149688

123
Решение системы уравнений (2) ( n0  14 ), с делением отрезка[-1,1] на 14 равных
частей есть:
 101741867 5600756791 789382601 6625093363
 С0  13030875; С1   833976000; С2  156370500; С3   2501928000;
 (12)
 С  109420087; С   770720657; С  44436679; С  90241897 .
 4 78185250 5 2501928000
6
156370500
7
2501928000
Численно проверим, что весовые коэффициенты (12),- символьное решение системы (2)
(для n0  14 ), удовлетворяет(2) с двойной точностью (16 значащих цифр). Значения
занесём в таблицу 2.
Таблица 2
a(0)=2.0000000000000000 b(0)=2.0000000000000009
a(1)=0.0000000000000000 b(1)=0.0000000000000001
a(2)=0.6666666666666666 b(2)=0.6666666666666665
a(3)=0.0000000000000000 b(3)=0.0000000000000000
a(4)=0.4000000000000000 b(4)=0.4000000000000000
a(5)=0.0000000000000000 b(5)=0.0000000000000000
a(6)=0.2857142857142857 b(6)=0.2857142857142856
a(7)=0.0000000000000000 b(7)=0.0000000000000000
a(8)=0.2222222222222222 b(8)=0.2222222222222221
a(9)=0.0000000000000000 b(9)=0.0000000000000000
a(10)=0.1818181818181818 b(10)=0.1818181818181817
a(11)=0.0000000000000000 b(11)=0.0000000000000000
a(12)=0.1538461538461539 b(12)=0.1538461538461538
a(13)=0.0000000000000000 b(13)=0.0000000000000000
a(14)=0.1333333333333333 a(14)=0.1333333333333333
a(15)=0.0000000000000000 b(15)=0.0000000000000000
a(16)=0.1176470588235294 b(16)=0.1179107308149041
Из таблицы 2 видно, что формула
1 14 14

 f ( z )dz  7h Ci f ( xi ), 7h  1,  Ci  2, xi  1  ih, i  0,14


1 i 0 i 0

имеет 15 алгебраический порядок точности и 16 порядок погрешности. Используя


формулу (7) ( n0  14 ),получим составную формулу с делением отрезка [a, b] на число
частей кратное 14:
(b  a )  14 
b n

a f ( z ) dz  7h  Ci f ( xi ), h  , xi  a  ih, n  14k ,   Ci  2 
 i 0
(13)
i 0 n 

124
Весовые коэффициенты Сi определяются алгоритмом:
 90241897
если j  0 или j  n : С j  2501928000;

если j  1 mod14 или j  13mod14 : С  44436679;
 j
156370500

если j  2 mod14 или j  12 mod14 : С j   770720657;
 2501928000
 109420087
если j  3 mod14 или j  11mod14 : С j  ;
 78185250

 6625093363
если j  4 mod14 или j  10 mod14 : С j   ;
 2501928000
 789382601
если j  5 mod14 или j  9 mod14 : С j  156370500;

если j  6 mod14 или j  8 mod14 : С   5600756791 ;
 j
833976000

если j  7 mod14 : С  101741867;
 j
13030875
 90241897
если j  0 mod14 , j  0, j  n : С j  ; (14)

 1250964000
Докажем следующее утверждение:
Лемма. Пусть дана функция f ( x)  C ( n0 2) [a, b] и составная квадратурная формула (1) с
равномерным шагом точна для всех многочленов степени равной n0 {6,10,14} . То есть
выполнено условие (формула (7)):
H
hn0 n
H   Ci zi , t  0, n0 , где: c  середина отрезка [a, b]
t t
z dz (15)
2 i 0
c  (a  b) / 2, x  z  c, dx  dz, h  (b  a) / n, H  (b  a) / 2, x [a, b], z [ H , H ]
xi  c  zi , xi  a  i(b  a) / n  a  ih, i  0, n
Тогда порядок погрешности r ( f ) составной формулы равен n0  2 , другими словами,
алгебраический порядок точности равен n0  1{7,11,15} .
Доказательство. Разложим функцию f ( x)  C ( n0 2) [a, b] , в ряд Тейлора с центром в точке
x c:
f ( k ) (c) k f ( n0 1) (c) n0 1 f ( n0  2) (c) n0  2
 
n0
f (c  z )   z  z  z  O z n0  3 , z  H .
k 0 k! (n0  1)! (n0  2)!
Покажем, что из условия (15) следует
b
 hn0  n  hn0  n
a x t
dx   
 2  i 0
C x
i i
t
   Ci xi , t  0, n0 , t  N .
 2  i 0
t

b
 hn0  n
H
 hn0  n t H s hn0 n s
a xt
dx     Ci xi
t
 H ( z  c ) t
dz     Ci c  z i t
  Ct
s t s
c 
 z dz   Ci z i
  0, t  0, n0 , s  0, t

 2  i 0  2  i 0 s 0  H 2 i  0 
b n
hn0
т.е. из (15) следует  x t dx  C x , t  0, n0 (параллельный перенос системы координат
t
i i
a
2 i 0

не изменяет алгебраического порядка точности квадратурной формулы). Cts -


биномиальный коэффициент.

125
 n0 f (t ) (c) t f ( n0 1) (c) n0 1 f ( n0 2) (c) n0 2
 d z 
b H
hn0 n
r( f )   f ( x)dx   Ci f ( xi )  H   z 
(n0  1)!
z 
(n0  2)!
z  O H n0 4
a
2 i 0 t 0 t! 
 n0 f (t ) (c) t f ( n0 1) (c) n0 1 f ( n0  2) (c) n0  2  n0 f (t ) (c)  H t 
 
n n
hn hn
 0  Ci   zi  zi  z i  O H n0  4      z dz  0 C z 
t

(n0  1)! (n0  2)!  i i 


2 i 0  t 0 t!  t 0 t!   H 2 i 0 
( n  2)
n0  2
f ( t ) (c )   f 0 (c) 2 H n0 3 hn0
   
H n n
hn
   z t dz  0  Ci z i  O H  C z
n0  4 n0  2
 (n  2)! n  3  2  O H n0  4
t

t!   H i i
t  n0 1 2 i 0  0 0 i 0

f ( n0  2) (c) hn n
z 
n0  2
zi
 O H  ,
2
r( f ) 
(n0  2)!
H n0  3
 0
n0  3 2 H

i 0
Ci  i 
H H
1 (16)

В формуле (16) учтены равенства справедливые в силу соотношений:


H n

 z 0 dz 0,  Ci zi 0  0, так как Cn / 2 j Cn / 2 j , z n / 2 j   z n / 2 j , z n / 2  0, j   n / 2, n / 2


n 1 n 1

H i 0

 i  n/2 2j
zi   H  H , i  0, n, j  i  n / 2, j   n / 2, n / 2, i  0, n, zi  H .
 n/2  n

В формуле (16) последний множитель представляет собой многочлен степени n0  2 ,


которая определяет порядок погрешности r ( f ) составной формулы согласно определению
2, другими словами, алгебраический порядок точности равен n0  1  7,11,15 по
определению 1 .
Лемма доказана.
Формулу (16) можно проанализировать и упростить

f ( n0  2) (c) n0  2
z 
 
n
2 hn
r( f ) 
(n0  2)!
H n0 3  0
n0  3 2 H

i 0
Ci  i 
H
 O H n0  4

n 2
n0
 zi 
0

  Ci   k  1 справедливо с точностью до 3 знаков (как видно


2
Выражение
n0  3 i  0  H 
из таблицы 2 в случае s  16 a(16) и b(16) отличаются в четвёртой значащей цифре, а из
таблицы 1 в случае s  12 a(12) и b(12) отличаются в третьей значащей цифре). Поэтому
для(16)справедливо:
f ( n0  2) (c) n 3 2 2 f ( n0  2) (c) n 3
r( f ) 
(n0  2)!
H 0

n0  3
 O H  
(n0  3)!
H 0  O H n0  4  
С другой стороны, суммирование на n  kn0 узлах эквивалентно взятию k интегралов на
ba
интервалах длиной b j  a j  , j  1, k . Обозначим среднее значение производной
k
1 k  a j  b j   1  b ( n0  2)
f ( n0  2)   f n0  2       f ( x)dx . Тогда имеет место оценка
k j 1  2   b  a a
n0  3
2 ba 2H n0 3
f n0  2  x  f n0  2  x 
k
 k r( f )   n0  2
[ a ,b ] [ a j ,b j ]
r( f )   (17)
n0  2! n0  3  2k  k n0  3!

126
Нас будет интересовать порядок погрешности составной квадратурной формулы и
двойная точность относительной погрешности результата интегрирования (16 значащих
цифр).
Вычислим определённый интеграл (ответ с 16 значащими цифрами):
2

 exp(2 x)dx  (exp(4)  1) / 2  26.79907501657212,


0
При N  28, k  2 написанная нами программа с использованием формул (13),(14)
возвращает значения ( epsilon  (int1  exact) / exact):
int 1 =26.79907501657214delta, exact=26.79907501657212 delta =-0.00000000000002=-
2*10 14
epsilon=-0.0000000000000008.
Снова оценим погрешность составной интегральной квадратуры по формуле (17)
2
для интеграла  exp(2 x )dx  (exp(4)  1) / 2  26.7990750
1657212:
0

 1  ( n0  2)
b
 1 
2
exp(4)  1216 ,
f ( n0  2)    f ( x)dx    exp(2 x) 2 dx 
(16 )

 b  a a  2  0 0 4
1 2H n0 3
2 exp(4)  1
17
r( f )  n0 2 f ( n0 2) ( x )  16  7.5 1014
k n0  3! 2 17! 4
Видно, что r( f ) хорошо приближает численное значение delta с избытком. Достигнув
двойной точности с помощью(17), мы получим и двойную точность численное значение.
В программе получена двойная точность, т.к. epsilon  8 1016 .
2.Построение двумерных и трёхмерных алгоритмов
Для построения двумерных и трёхмерных квадратурных интегральных формул
рассмотрим сначала случай функций с разделяющимися переменными.
1) Пусть ( x, y )  [a, b]  [c, d ] , воспользуемся дважды составной формулой (7) для
определённого интеграла функции одной переменной:
b d b d
h n n0 *k h n n0 *k
f ( x, y )  f1 ( x ) f 2 ( y ),   f ( x, y )dxdy   f1 ( x )dx f 2 ( y )dy  1 0  Ci f1 ( xi ) 2 0  C j f 2 ( y j ) 
a c a c
2 i 0 2 j 0
h1h2n02 n0 k n0 k h1h2n02 n0 k
 i j 1 i 2 j
4 i 0 j 0
C C f ( x ) f ( x )  Ci, j f xi , y j 
4 i, j 0
(18)

ba d c
Ci , j  Ci C j , f xi , y j   f1 xi  f 2  y j , xi  a  ih1 , y j  c  jh2 , h1 
, h2  , i, j  0, n
n n
2) Пусть ( x, y, z )  [a, b]  [c, d ]  [e, f ] , воспользуемся трижды составной формулой (7)
для определённого интеграла функции одной переменной:
b d f b d f

f ( x, y, z )  f1 ( x ) f 2 ( y ) f 3 ( z ),    f ( x, y, z )dxdydz  f1 ( x )dx f 2 ( y )dy f 3 ( z )dz 


a c e a c e
n0  k n0  k n0  k 3 n0  k n0  k n0  k
h1n0 hn hn hh h n
 
2 i 0
Ci f1 ( xi ) 2 0 C j f 2 ( y j ) 3 0 Cs f3 ( zs ) 
2 j 0 2 s 0 8
1 2 3 0
C C C
i 0 j 0 s 0
i j f ( xi ) f 2 ( y j ) f 3 ( zs ) 
s 1

h1h2h3n03 n0 k
Ci, j,s f ( xi , y j , zs )
8 i , j , s 0
(19)

127
Ci , j , s  CiC jCs , f xi , y j , zs   f1 xi  f 2 y j  f 3 zs , xi  a  ih1, y j  c  jh2 , zs  e  sh3
ba d c d c
h1  , h2  , i, h3  , i, j, s  0, n
n n n
Формулы (20),(21),(22)получим подстановкой в (18) n0  6,10,14 соответственно
(b  a ) (d  c)
I 2    f ( x, y )dxdy 9h1h2  Ci , j f xi y j , h1 
b d n n
, h2  ,
1) a c j 0 i 0 n n (20)
Ci , j  Ci C j ; xi  a  h1  i, y j  c  h2  j; i, j  0, n
Где: Ci , C j - весовые коэффициенты определяются формулой (8)

(b  a ) (d  c)
I 2    f ( x, y )dxdy 25h1h2  Ci , j f xi y j , h1 
b d n n
, h2  ,
2) a c j 0 i 0 n n (21)
Ci , j  Ci C j ; xi  a  h1  i, y j  c  h2  j; i, j  0, n
Где: Ci , C j - весовые коэффициенты определяются формулой (11)
(b  a ) (d  c)
I 2    f ( x, y )dxdy 49h1h2  Ci , j f xi y j , h1 
b d n n
, h2  ,
3) a c j 0 i 0 n n (22)
Ci , j  Ci C j ; xi  a  h1  i, y j  c  h2  j; i, j  0, n
Где: Ci , C j - весовые коэффициенты определяются формулой (14)
Формулы (23)-(25)получим подстановкой в (19) n0  6,10,14 соответственно

(b  a ) (d  c) ( f  e)
b d f
I 3     f ( x, y, z )dxdydz27h1h2 h3  Ci , j ,k f xi y j zk , h1 
n n n
, h2  , h3 
4) a c e k 0 j 0 i 0 n n n (23)
Ci , j ,k  Ci C j Ck ; xi  a  h1  i, y j  c  h2  j, zk  c  h3  k ; i, j, k  0, n
Где: Ci , C j , Ck - весовые коэффициенты определяются формулой (8)
(b  a ) (d  c) ( f  e)
b d f
I 3     f ( x, y, z )dxdydz125h1h2 h3  Ci , j ,k f xi y j zk , h1 
n n n
, h2  , h3 
5) a c e k 0 j 0 i 0 n n n (24)
Ci , j ,k  Ci C j Ck ; xi  a  h1  i, y j  c  h2  j, zk  c  h3  k ; i, j, k  0, n
Где: Ci , C j , Ck - весовые коэффициенты определяются формулой (11)
(b  a ) (d  c) ( f  e)
b d f
I 3     f ( x, y, z )dxdydz343h1h2 h3  Ci , j ,k f xi y j zk , h1 
n n n
, h2  , h3 
6) a c e k 0 j 0 i 0 n n n (25)
Ci , j ,k  Ci C j Ck ; xi  a  h1  i, y j  c  h2  j, zk  c  h3  k ; i, j, k  0, n
Где: Ci , C j , Ck - весовые коэффициенты определяются формулой (14)
Теорема 1: Формульные пары (20)-(8);(21)-(11);(22)-(14);(23)-(8);(24)-(11);(25)-(14)
справедливы для любой функции

f ( x, y)  С n0  2 [1,1]  [1,1] f x, y, z   С n0  2 [1,1]  [1,1]  [1,1] необязательно с 
разделяющимися переменными. Порядок погрешности двумерной (трёхмерной)
интегральной квадратурной формулы совпадает с порядком погрешности одномерной
квадратурной формулы (равен 7,11,15 соответственно для алгоритмов (8),(11),(14)).
Доказательство: проведём в два этапа:
Утверждение 1. Для двойного интеграла на каноническом квадрате
x, y [1,1]  [1,1] и тройного интеграла на каноническом кубе

128
x, y, z  [1,1]  [1,1]  [1,1] равноудалённые от центра точки имеют равные весовые
коэффициенты.
Не теряя общности, доказательство рассмотрим для двумерного случая, выберем
каноническую область квадрат ( x, y )  [1,1]  [1,1] со стороной 2.
1.1) Сделаем линейную замену переменных в интеграле
1 1
 y 1, y '  x 1; dx'  dy; dy'  dx
1 1
x'
1 1

  C j ,i f y j , xi 
1 1 1 1 1 1
h1h2 n02 n0 h1h2 n02 n0
11 4

f ( x, y )dxdy    f ( y ' , x ' )dy' dx'    f ( y ' , x ' )dx' dy' 

Ci, j f xi , y j 
4
 
1 1 1 1 i , j 0 i , j 0

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


зеркальном отражении канонического квадрата относительно прямой y  x . Что в свою
очередь для f xi , y j   1 приводит к симметрии (равенству) весовых
коэффициентов C j ,i  Ci , j , i, j  0, n0
1.2) Рассмотрим инверсию канонического квадрата относительно центра (поворот на 1800 )

1 1 1 1
x'   x 1 , y'   y 1 ; dx'  dx; dy'  dy
1 1

1 1

  f ( x, y )dxdy    f ( x , y )d  x d  y     f ( x , y )dx dy 
1 1 1 1
' ' ' ' ' ' ' '

1 1 1 1 1 1

   
1 1 n0
hh n h1h2n02 n0 2
 11  i, j i j
f ( x ' , y ' )dx' dy' 
4 i, j 0
C f x , y  Cn i ,n  j f xn0 i , yn0  j
4 i, j 0 0 0
1 2 0

Равенство интегралов означает инвариантность интеграла при повороте канонического


квадрата на 1800 (преобразование инверсии), а в случае f xi , y j   1 для интегральных
сумм Ci , j  Cn0 i ,n0  j , i, j  0, n0
1.3) Рассмотрим поворот канонического квадрата на 900 .
1 1
 y 1 , y '   x 1; dx'  dy; dy'  dx
1 1
x'
1 1
1 1
f ( x, y )dxdy    f ( y ' , x ' )d  y ' dx'     f ( y ' , x ' )dy' dx'    f ( y ' , x ' )dy' dx' 
1 1 1 1 1 1


1 1 1 1 1 1 1 1

  f ( y , x )d x dy   C f x , y   4  C  
1 1 2 n0 2 n0
' ' ' ' hh n 1 2 0 hh n 1 2 0
i, j i j n0  j ,i f yn0  j , xi
1 1
4 i, j 0 i, j 0

Равенство интегралов означает инвариантность интеграла при повороте канонического


квадрата на 900 , а в случае f xi , y j   1 для интегральных сумм Ci , j  Cn0  j ,i , i, j  0, n0 .
На целочисленной решётке с координатами xi , y j  квадрат с фиксированным
расстоянием до центра есть xi  y j  const , поэтому решением этого же уравнения будут
2 2

пары чисел:
xi , y j ,  xi , y j , xi , y j ,  xi , y j , y j , xi , y j ,xi ,  y j , xi ,  y j ,xi .
Последние 4 пары отличаются от первых четырёх преобразованием симметрии 1.1.Первая
и четвертая пары, а также вторая и третья пары отличаются друг от друга
преобразованием инверсии 1.2. Наконец, первая и шестая пары совмещаются поворотом
относительно центра на 900 (преобразование 1.3). Следовательно, в силу 1.1-1.3 весовые
коэффициенты на всех восьми (или четырёх) указанных точках имеют равные значения.

129
Доказанное утверждение 1 справедливо независимо от вида алгоритма построения
весовых коэффициентов (8),(11),(14).
Утверждение 2. Квадратурные интегральные формулы (18) для двойного интеграла и
(19) для тройного интеграла справедливы для произвольной непрерывной функции (не
обязательно с разделяющимися переменными). Порядок погрешности в двойной
интегральной квадратурной формуле (18) и в тройной (19) тот же, что и в одномерной
квадратурной формуле (7).
Доказательство для определённости проведём для двойного интеграла в простейшем
случае n0  6 .
На квадрате x, y   [1,1]  [1,1] с равномерной сеткой для случая n0  6 имеем
n0  12  49 узлов (соответственно 49 весовых коэффициентов Ci , j , i, j  0, n0 ).
Квадратурная формула для двойного интеграла (аналог (6)) имеет вид:
1 1
  1   1   1   1   1 1   1 1
11 f ( x, y)dxdy  C0 f 0,0  C1  f   3 ,0   f  3 ,0   f  0, 3   f  0, 3    C2  f   3 , 3  
f  ,  
 3 3
1 1  1 1    2  2   2  2   1 2  2 1
f  ,   f  ,    C3  f   ,0   f  ,0   f  0,   f  0,    С4  f  ,   f  ,  
 3 3  3 3    3  3   3  3   3 3  3 3
 2 1   1 2   1 2   2 1   2 1   1 2    2 2  2 2
 f  ,   f  ,   f   ,   f   ,   f   ,   f   ,    С5  f  ,   f  ,  
 3 3   3 3   3 3   3 3   3 3   3 3    3 3  3 3

 2 2   2 2   1   1  1
f   ,   f   ,    С6  f 0,1  f 0,1  f  1,0  f 1,0  С7  f  ,1  f 1,   f 1,  
 3 3   3 3    3   3  3
1   1   1  1  1   2   2  2
f  ,1  f   ,1  f   1,   f   1,   f   ,1   С8  f  ,1  f 1,   f 1,  
3   3   3  3  3   3   3  3
2   2   2   2   2 
 f  ,1  f   1,   f   ,1  f   ,1  f   1,    С9  f (1,1)  f (1,1)  f (1,1)  f (1,1) (26)
3   3   3   3   3 
В формуле(26) согласно утверждению 1 сгруппированы с одинаковым весом все узлы,
равно - удалённые от центра канонического квадрата x, y   [1,1]  [1,1] как видно из
формулы (26), число таких узлов 4 либо 8, за исключением центра.
Аналогично одномерной интерполяционной задаче (2) можно поставить двумерную на
каноническом квадрате и трёхмерную на каноническом кубе задачи интерполяции:
1 1 n0

  dxdy   Ci , j  4
1 1 i , j 0
1 1 n0
(27)
 x 2 s y 2l dxdy 
   Ci , j xi2 s y 2j l ,2s  2l  0, n0
1 1 i , j 0

В формуле (27) f ( x, y)  С n0 2 [1,1] [1,1] используется множество линейно


независимых степенных функций двух
 
переменных 1, x, y, x 2 , xy, y 2 ,...x n0 , x n0 1 y,...xy n0 1 , y n0 . Здесь n0 - алгебраический порядок
точности квадратурной формулы (27). Из-за симметрии, как и в задаче (2) нетривиальные
условия на коэффициенты получим при условии, что степени x, y чётные, учитывая
формулу (26), получим:
1) f ( x, y )  1 :
1 1 n0

  dxdy 4  C
i , j 0
i, j  С0  4С1  4С2  4С3  8С4  4С5  4С6  8С7  8С8  4С9
1 1

2) f ( x, y)  x 2 (для f ( x, y)  x 2 в силу симметрии получим тот же результат):


130
1 1
4 2 4 8 20 16 40 52
  x dxdy  3  9 С  С2  С3  С4  С5  2С6  С7  С8  4С9
2
1
1 1
9 9 9 9 9 9
3) f ( x, y)  x 4 (для f ( x, y)  y 4 в силу симметрии получим тот же результат):
1 1
4 2 4 32 68 64 328 388
  x dxdy  5  81С  81С  С3  С4  С5  2С6  С7  С8  4С9
4
1 2
1 1
81 81 81 81 81
4) f ( x, y)  x 2 y 2 :
1 1
4 4 32 64 8 32
x y 2 dxdy   С2  С4  С5  С7  С8  4С9
2

1 1
9 81 81 81 9 9
5) f ( x, y)  x6 (для f ( x, y)  y 6 в силу симметрии получим тот же результат):
1 1
4 2 4 128 260 256 2920 3172
  x dxdy  7  3 С1  С2  6 С3  6 С4  6 С5  2С6  6 С7  6 С8  4С9
6
6 6
1 1
3 3 3 3 3 3
6) f ( x, y)  x 4 y 4 (для f ( x, y)  x 2 y 4 в силу симметрии получим тот же результат):
1 1
4 4 80 256 360 1872
x y 2 dxdy   6 С2  6 С4  6 С5  6 С7  6 С8  4С9
4

1 1
15 3 3 3 3 3
7) f ( x, y)  x8 :
1 1
4 2 4 512 1028 1024 26248 27268
  x dxdy  9  3 С1  С2  8 С3  8 С4  8 С5  2C6  8 С7  8 С8  4С9
8
8 8
1 1
3 3 3 3 3 3
8) f ( x, y)  x6 y 2 (для f ( x, y)  x 2 y 6 в силу симметрии получим тот же результат):
1 1
4 4 272 1024 2952 13968
x y 2 dxdy   8 С2  8 С4  8 С5  8 С7  8 С8  4С9
6

1 1
21 3 3 3 3 3
9) f ( x, y)  x 4 y 4 :
1 1
4 4 128 1024 648 1296
x y 4 dxdy   8 С2  8 С4  8 С5  8 С7  8 С8  4С9
4

1 1
25 3 3 3 3 3
Если верно утверждение 2 с формулой весов Сi , j  Ci C j , i, j  0, n0 и сохранением
алгебраического порядка точности таким же, как и в одномерном случае (равен семи для
n0  6 ), то условия 1)-6) должны выполняться тождественно, а условия 7),8),9) имеют
погрешность. Учитывая(8) получим
2 2
 68  4624 68 9 612  9  81
С0  С3С3     ; С1  С3С4   ; С2  С4С4     ;
 105 11025 105140 14700  140 19600
2
68 18 1224 9 18 162  18  324
С3  С3С5   ; С4  С4С5   ; С5  С5С5     ;
105 35 3850 140 35 4900  35  1225

68 41 2788 9 41 369 18 41 738


С6  С3С6   ; С7  С4С6   ; С8  С5С6   ;
105 420 44100 140 420 58800 35 420 14700
2
 41  1681
С9  С6С6     (28)
 420 176400
Подставим коэффициенты(28) Сi i  0,9 в интегральную квадратурную формулу (26)
для двойного интеграла от произвольной непрерывной функции f ( x, y ) проверяя
справедливость Сi , j  Ci C j , i, j  0, n0 . Результаты проверки собраны в таблице 3.

131
Таблица 3

f ( x, y )  1 num(1)  3.99999999
99999996 exact(1)  4.00000000
00000000
f ( x, y )  x 2 num(2)  1.33333333
33333333 exact(2)  1.33333333
33333333
f ( x, y )  x 4 num(3)  0.44444444
44444444 exact(3)  0.44444444
44444444
f ( x, y )  x 2 y 2 num(4)  0.79999999
99999999 exact(4)  0.80000000
00000000
f ( x, y )  x 6 num(5)  0.57142857
14285714 exact(5)  0.57142857
14285714
f ( x, y )  x 4 y 2 num(6)  0.26666666
66666666 exact(6)  0.26666666
66666667

f ( x, y )  x8 num(7)  0.47078189
30041152 exact(7)  0.44444444
44444444
f ( x, y )  x6 y 2 num(8)  0.19047619
04761905 exact(8)  0.19047619
04761905
f ( x, y )  x 4 y 4 num(9)  0.09058201
05820106 exact(9)  0.16000000
00000000

В первом столбце указана функция, во втором - численное значение правой части (26),
в третьем столбце точное значение интеграла от указанной функции (левая часть(26)). Из
таблицы 3, что квадратурная интегральная формула (26) имеет седьмой алгебраический
порядок точности по определению 2 (учитывая тривиальное тождество 0=0 для функции
f ( x, y )  x l y s , l  s  7 (27)) .
Нами показано, что с использованием тождества Сi , j  Ci C j , i, j  0, n0 n0  6
двухмерная квадратурная формула (26) имеет седьмой алгебраический порядок точности
для произвольной функции f ( x, y )  С n0  2 [1,1]  [1,1] и этот порядок совпадает с
порядком одномерной формулы.

Замечание; Из формул (18),(19) для функций с разделяющимися переменными следует


равенство алгебраических порядков точности двойных(18) (тройных(19)) квадратурных
формул с учётом Ci , j  CiC j (Ci , j , s  CiC jCs ),i, j, s  0, n0 алгебраическому порядку точности
одномерной квадратурной формулы(7) . Действительно, перемножая интегральные
суммы, точные для многочленов степени m , получим двойные или тройные интегральные
суммы точные для многочленов того же порядка.
Проверим численно, используя в программе формулы (20),(8) для тройного интеграла, что
сохраняется алгебраический порядок точности такой же, как и в однократном интеграле,
т.е. равный семи,

   
2 2 2
y5 z6 x 211
   e y z dxdydz
2
x 4 5
e 1  e2 1  436,1595630203324( 16 знач. цифр).
0 0 0
30 0 30
Для небольших N численно получим:
Если N  18 , программа возвращает значение eps=0.0000000000245057
int 3 =436.1595630310208100, exact=436.1595630203324300 delta =0.0000000106883
Если N  36 , программа возвращает значение eps=0.0000000000000989
int 3 =436.1595630203755700, exact=436.1595630203324300 delta =0.0000000000431
Определим порядок погрешности формул(20),(8) - при уменьшении шага сетки в 2 раза
погрешность уменьшится в число раз:

132
delta2 0.00000001 06883
  248  256  28 т.е. порядок погрешности равен 8(согласно
delta1 0.0000000000431
определению 2).
3. Интерполяция интегралов в полярной и сферической системах координат
Рассмотрим равновеликое отображение обобщённых координат - полярных в кольце
(круге) на прямоугольник в декартовой системе координат, сохраняющее площади фигур
и равномерный шаг сетки вдоль всех координатных линий:
b  r2  r1, a   r2  r1  ,
где: r2 ,r1  внешний и внутренний радиусы кольца,
a, b  стороны прямоугольника,
Тогда площадь кольца равна S  ab   r22  r12  , где
x  a  r2  r1  r  r 
0  x  a,0  y  b,  , y  r  r1 , dx  d , dy  dr , h1  , h2  2 1 .
a 2 2 n n
При таком отображении оба берега разреза кольца вдоль радиуса
  0  x  0;  2  x  a переходят в вертикальные стороны прямоугольника,
внутренняя и внешняя окружности r1  const  y  0; r2  const  y  r2  r1 переходят в
горизонтальные стороны прямоугольника.
По теореме 4(стр.282) [5]отображение x(r , ), y(r, ) должно обладать следующими
a
Dx, y  xr , x 0 a
свойствами: якобиан замены координат   2    0 во всех точках
Dr ,  yr , y 2
1 0
рассматриваемой области; частные производные xr , x , yr , y непрерывны во всех точках
области; отображение x(r , ), y(r, ) взаимно однозначно в силу линейности
отображения обобщённых координат. Все требования выполнены, если область
интегрирования - кольцо ( r1  0 ). В случае круга ( r1  0 ) выполнены первые 2 требования
из трёх Третье - неоднозначность отображения в точке r1  0 - не выполнено, что в данном
интеграле несущественно, так как мера интеграла в полярных координатах в окрестности
указанной точки dI2  f r, rdrd  f 0, 0drd  0 .
r2 2  r2 r1   r2  r1 
 2  2 2  2 
b a
I 2    f r ,  rdrd     f  y  r1 , x  y  r1 dy dx    f  y  r1 , x (r1  y )dydx 
r1 0 0 0  a  a a 0 0  a 
r2 r1   r2 r1  r2 r1   r2 r1 
2  2  2  2 
 r2  r1   
0 0
f  y  r1 , x (r1  y)dydx 
 a  r2  r1   
0 0
f  y  r1 , x (r1  y)dydx 
 a 
 2   2 
n n 2 n n
2 n0h1 n0h2 n0 h1h2
  C
r2  r1  2 2 i 0 j 0 
i, j f  r1  y j , xi
a 
( r1  y j )  
2r2  r1  i 0 j 0
Ci , j f  r1  jh2 , ih1 (r1  jh2 )
 a 
(29)

Рассмотрим пример (ответ с 16 значащими цифрами):


2
10 2
r10 1
10 2  sin 2 
0 0 r sin  rdrd  10 2 0 1  cos2 d  10   4 0   10   3141592653.589793
8 2 9 9

0  
Программа для двойных интегралов в полярной системе координат с учётом
формул(29),(13),(14):
при n1  5, r1  0.0, r2  10.0 возвращает значения (в программе N  n ):
n=14 k=1 numerical=3141521192.673302 exact=3141592653.589793
delta =71460.916492n=14
epsilon14)=0.0000227467161950
n=28 k=2 numerical=3141592655.167346 exact=3141592653.589793 delta =-1.577553n=28
133
epsilon (28)=-0.0000000005021507
n=42 k=3 numerical=3141592653.589776 exact=3141592653.589793 delta =0.000017n=42
epsilon (42)=0.0000000000000055
n=56 k=4 numerical=3141592653.589798 exact=3141592653.589793 delta =-0.000005n=56
epsilon (56)=-0.0000000000000015
n=70 k=5 numerical=3141592653.589792 exact=3141592653.589793 delta =0.000001n=70
epsilon (70)=0.0000000000000005
v(1)=3141521192.673302 v(2)=3141592653.589776 v(3)=3141592653.589792
v(4)=3141592653.589798
v(5)=3141592655.167346
result: k (opt) =5 epsilon(5) =-0.0000000000000005
int(polar) =3141592653.589792, exact=3141592653.589793 delta =-0.000001.
Мы видим, что значение интеграла в круге r1  0, r2  10 достигает двойной точности
epsilon  5 *1016 и n  70 . Часто на практике неизвестно точное значение интеграла,
например, оно не может быть выражено через элементарные функции. Поэтому в
программе использован алгоритм медианной фильтрации, позволяющий из нескольких
значений интеграла при малых параметрах N  14 k выбрать значение с наименьшей
относительной ошибкой, соответствующее центральному элементу окна фильтра (элемент
массива v[n1  1 / 2], n1  5 ), как видно по результату программы. Медианная фильтрация
применима здесь благодаря знакопеременности относительной погрешности epsilon[7].
Получаемая численная погрешность не является случайной величиной и повторяет своё
значение при запуске программы. Оптимальное значение числа узлов k (opt) с
наименьшей относительной ошибкой может быть найдено предварительно и
фиксироваться в цикле при вычислении нескольких тысяч интегралов. В алгоритме(14)
мы видим рациональные весовые коэффициенты с 10 значащими цифрами, тогда
используя формулы (22),(25) получим произведение весовых коэффициентов с 20 и 30
значащими цифрами соответственно. Распространённые компиляторы обеспечивают
только двойную точность(16 значащих цифр) относительной погрешности epsilon .
Использование компиляторов с 32 верными знаками обеспечит эффективное применение
алгоритма(14) без потери точности. Оценим порядок точности(22),(14) по первым 2
значениям delta :
delta(14) 71460.9164 92
  45300 216  65536,т.е. погрешность пары (25),(13) имеет
delta(28) - 1.577553
тот же 16 – ий порядок, что и порядок погрешности интегральных квадратур 15-го
алгебраического порядка точности на отрезке и прямоугольнике, согласно замечанию 3
леммы, но применённым уже в полярной системе координат.
10 2 10

Рассмотрим пример:   r sin rdrd  


8 2 r10
10
 
  1010  510 / 10  3138524692
.01402
5 0 5

Для параметров n1  5, r1  5.0, r2  10.0 программа возвращает значения:


result: k(opt)=4 epsilon (4)=0.0000000000000024
int(polar) =3138524692.0140295, exact=3138524692.014022 delta =0.0000076
То есть в кольце формульная пара(29),(14)обеспечивает двойную точность относительной
погрешности.
Рассмотрим равновеликое отображение обобщённых координат - сферической
системы в шаре (шаровом слое) на декартовую систему в параллелепипеде, сохраняющее
объёмы тел и равномерный шаг сетки вдоль всех координатных линий:

134
4  r2  r1r2  r1
 2 2
a   r2  r1 , b  , c  r2  r1 ,
3 
 r2  r1
где: r2 ,r1  внешний и внутренний радиусы шарового слоя,
a, b, c  стороны параллелепипеда

Тогда объём шарового слоя V  abc   r23  r13  ,


4
3
x   y a b
где 0  x  a,0  y  b,0  z  c,  ,  , z  r  r1 , dx  d , dy  d , dz  dr
a 2  b 2 
с b a
z k  kh1 , h1  ; y j  h2 j , h2  j; xi  h3i, h3  i; i, j , k  0, n
n n n
При отображении x(r , , ), y(r , , ), z (r , , ) внутренняя и внешняя сфера переходят в
нижнюю и верхнюю грани параллелепипеда r1  const  z  0; r2  const  z  r2  r1 .
Сечения:   0  x  0;  2  x  a;  0  y  0,    y  b . По теореме 9
(стр.298)[5] отображение x(r , , ), y(r , , ), z (r , , ) должно обладать свойствами:
a
0 0
xr , x , x 2
D  x, y , z  b ab
1) якобиан перехода  yr , y , y  0 0   2  0 во всех точках
D r , ,    2
z r , z , z 1 0 0

рассматриваемой области;
2) частные производные xr , x , x , yr , y , y , zr , z , z непрерывны во всех точках области;
3)отображение x(r , , ), y(r , , ), z (r , , ) взаимно однозначно.
Первые два требования выполнены всегда.
В сферическом слое или шаре не выполнено третье условие (однозначность отображения)
в 2 азимутальных направлениях 1  0,2   (особые направления) и в центре шара r  0 .
Мы можем проколоть сферический слой насквозь вдоль выбранных направлений, что
топологически эквивалентно сфере с 1 ручкой. Сжать указанную область от полюсов к
экватору так, что получится торообразный слой с плоскими боковыми гранями, разрезать
его от оси симметрии плоскостью   0 и разогнуть полученное тело в параллелепипед.
Вдоль особых направлениий неоднозначность отображения нарушается, что, однако, не
сказывается на мере интеграла в сферических координатах, так как во всех точках
направлений   0,   , f r, ,  r 2 sin( )drd  0 . Для шара имеем ещё одну особую
точку r1  0 , выполнены первые 2 требования гладкой замены переменных
интегрирования кроме третьего (неоднозначность отображения в точке r  0 ). Что для
интеграла несущественно, так как мера интеграла в сферических координатах в
окрестности указанной точки: dI3  f r, , r 2 dr sindd  f 0, , 02 dr sindd  0 .

r2  2
 y 2
c b a
  y   2
I3     f r ,  ,  r 2 dr sin dd     f  r1  z , , x r1  z  dz sin   dy
2
dx
r1 0 0 0 0 0  b a   b b a
4  r2 2  r1r2  r12 

 r2  r1   r  r 
2 r2  r1 3 
2  2 1
 y 2   y 
   f  r1  z, , x r1  z  sin dzdydx
2

ab 0 0 0  b a  b

135
4  r2  r1r2  r1 
2 2

r2  r1 3  r2  r1   r  r 

3 
2
y 2 
1
 y 
x r1  z  sin dzdydx
   f  r1  z, , 
2

2 r2  r1r2  r1  b a  b
2 2
0 0 0

3 n0 h1 n0 h2 n0 h3 n n n  y j 2   y j 
       2

 b 

 
C i , j , k f  r1 z k , , x i  r1 z k sin
2 r2  r1 r2  r1 2 2 2 i 0 j 0 k 0
2 2
 b a   
3n0 h1 h2 h3  2 
3 n n n
  
 2  i , j , k  1
C f r  kh1 , h2 j, h3i r1  kh1  sin h2 j 
2

 
(30)
16 r2  r1 r2  r1 i 0 j 0 k 0   b 
2
b a
Рассмотрим пример:
10  2 10 2 
10 
    1  cos2 d  1  cos2 d  10  5 
r 10 1 1 2
r sin  sin  r dr sin dd 
7 2 2 10

5 0 0
10 5 2 0
20 20
Программа для тройных интегралов в сферической системе координат с учётом формул
(11),(30):
возвращает значения (в программе N  n ):
n=10 k=1 numerical=4914074506.509758 exact=4929983057.770709 delta =-
15908551.260951
epsilon (10)=-0.0032373443340911
n=20 k=2 numerical=4929989554.759921 exact=4929983057.770709 delta =6496.989212
epsilon (20)=0.0000013178505025
n=30 k=3 numerical=4929983057.770734 exact=4929983057.770709 delta =0.000025
epsilon (30)=0.0000000000000050
v(1)=4914074506.509758 v(2)=4929983057.770734 v(3)=4929989554.759921
result: n(opt)=3 eps(3)=0.0000000000000050
int =4929983057.770734, exact=4929983057.770709 delta =0.000025.
По первым 2 значениям delta при малых N оценим порядок погрешности
формул(26),(10):
delta(10)  -15908551. 260951
2028 211    2449 212  4096, что является хорошим
delta(20) 6496.989212
подтверждением леммы для алгоритма(11) и квадратур с алгебраическим порядком
точности равным 11, но применённым уже к тройному интегралу в сферической системе
координат.
Выводы:
1) Получены формулы и алгоритмы для составных интегральных квадратур с
равномерным шагом,(7),(8);(10),(11);(13),(14) с 7,11,15 алгебраическим порядком
точности соответственно.
2) Найдены аналоги формул (20)-(22), (23) – (25) для двойных на прямоугольнике и
тройных в параллелепипеде интегралов с сохранением порядка погрешности, что и
в одномерном случае.
3) Построены линейные отображения обобщённых координат с кольца (круга) на
прямоугольник, с шарового слоя (шара) на параллелепипед, а также интегральные
квадратуры(29) в полярной системе координат и(30) в сферической системе
координат с сохранением алгебраического порядка точности, что проверено
численно.
Литература
1)Тихонов А.Н., Самарский А.А. Уравнения математической физики. – М.:Наука, 2008.
2)Пикулин В.П.,Похожаев С.И. Практический курс по уравнениям математической
физики. – М.:Наука,1995.
3)Н.С.Бахвалов, А.В.Лапин, Е.В.Чижонков. Численные методы в задачах и упражнениях.
– М.:БИНОМ. Лаборатория знаний,2010.

136
4)Голубева О.В.,Ехилевский С.Г., Пастухов Ю.Ф., Пастухов Д.Ф. Об эффективном поиске
безусловного экстремума гладких функционалов в конечномерных задачах. Вестн. Полоц.
гос. ун-та. Сер. С. Фундаментальные науки. – 2016. – № 4 . –С. 119 – 131.
5) Бутузов В.Ф., Н.Ч.Крутицкая, Г.Н.Медведев, А.А.Шишкин. Математический анализ в
вопросах и задачах, – М. Физико – математическая литература, 2001 – 480 с.
6)Бартеньев О.В. “Математическая библиотека IMSL”.:(Ч1). – М .:Диалог МИФИ,2001. –
457 с.
7) Пастухов Ю.Ф., Пастухов Д.Ф. Задача построения поля линий тока по температурному
разрезу. Вестн. Полоцкого государственного ун-та. Серия С. Фундаментальные науки. –
2015. – № 4 . –С. 27 – 36.

137
ЛИТЕРАТУРА
1.Бахвалов Н.С. Численные методы. - М.:Наука, 1975.Андерсон Д. Дискретная
математика и комбинаторика.: Пер. с англ. – М.: Издательский дом «Вильямс»,
2004. – 960 с.: ил.
2.Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – 6-е изд. –
М.:БИНОМ. Лаборатория знаний,2008.
3.Калиткин Н.Н. Численные методы. – М.:Изд. Наука,1977.
4.Бахвалов Н.С., Лапин А.В., Чижонков Е.В. Численные методы в задачах и
упражнениях: учебное пособие. – М.:БИНОМ. Лаборатория знаний,2010. – 240 с.
5.Самарский А.А. Теория разностных схем. – М.:Наука, 1983.
6. Самарский А.А., Вабишевич П.Н., Самарская Е.А. Задачи и упражнения по
численным методам. – М.: Эдиториал УРСС, 2000.
7.Марчук Г.И. Методы вычислительной математики. – М.:Наука, 1980.
8.Воеводин В.В., Кузнецов Ю.А. Матрицы и вычисления. – М.:Наука,1984.
9.Голуб Дж., Ван Лоун Ч. Матричные вычисления. – М.:Мир, 1980.
10.Демидович Б.П., Марон И.А., Шувалова Э.З. Численные методы анализа. –
М.:ФИЗМАТЛИТ,1962.
11.Самарский А. А., Вабищевич П. Н. Вычислительная теплопередача. — М.:
Едиториал УРСС, 2003. — 784 с.
12.Алгоритмы. Просто как дважды два / И. В. Красиков, И. Е. Красикова. — М.:
Эксмо, 2007. — 256 с.
13.Тихонов А.Н., Самарский А.А. Уравнения математической физики. – М.:Наука,
2008.
14.Самарский А.А., Вабишевич П.Н. Численные методы обратных задач
математической физики. – М.:Издательство ЛКИ, 2014.- 480 с.
15.Андерсон Д., Таннехилл Дж., Плетчер Р. Вычислительная гидромеханика и
теплообмен: В 2-х т. Т. 2: Пер. с англ. — М.: Мир, 1990. — 728—392 с, ил.
16.Бахвалов Н.С., Корнев А.А., Чижонков Е.В. Численные методы. Решения задач
и упражнения. – М.:Дрофа.2009.
17.Годунов С.К., Рябенький В.С. Разностные схемы. – М.:Наука, 1977.
18. Уилкинсон Дж.Х. Алгебраическая проблема собственных значений. – М.:Наука,
1970.

138
Численные методы в инженерных раcчётах (УДК 517. 6)
Лабораторный практикум по численным методам

Голубева Оксана Валерьевна


Гурьева Нина Алексеевна
Ехилевский Степан Григорьевич
Пастухов Юрий Феликсович
Пастухов Дмитрий Феликсович

Полоцкий государственный университет


2016

139