Учреждение образования
«Полоцкий государственный университет»
О.В.Голубева
Н.А.Гурьева
С.Г.Ехилевский
Ю.Ф.Пастухов
Д.Ф.Пастухов
Новополоцк
ПГУ
2016
УДК 519.6
Рецензенты:
А.Ф. Оськин, кандидат технических наук, доцент, доцент кафедры технологий
программирования;
Р.П. Богуш, кандидат технических наук, доцент, заведующий кафедрой
вычислительных систем и сетей
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
Введение
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)
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 mx 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)
Обозначим с a1 a2 , b min a, c1 . Тогда справедливо утверждение
(О сходимости метода Ньютона). При условиях (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 ,...,xim11 , 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 ,...,xim11 , xim 1 ,...,xnm11 , 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
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
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
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 2e1.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 Эффективный поиск точек экстремума и точек перевала
гладких функционалов
Введение
Градиентные методы являются не достаточно эффективными с точки зрения
точности. Действительно, пусть необходимо найти решение с абсолютной
точностью 103 , а значение функционала в экстремальной точке с точностью порядка
10
3 2
106 - 6 значащими цифрами. Зададим шаг итерации h 0.001 с начальным
расстоянием между первым приближением и стационарной точкой на 100 единиц.
Понадобится число 102 / 103 105 итераций (если градиент по модулю 1, иначе точность
оценки ещё хуже или число итераций ещё больше), в то время как можно получить
решение и экстремальное значение гладкого функционала с абсолютной точностью
1015 всего за 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 x1m1, x2m1,...,xim1,...,xnm 0 , i 1, n представляет
уравнение с одной неизвестной xim1 переменной, а все остальные переменные при
фиксированной итерации остаются “замороженными”, т.е. постоянными. В этом случае
можно для нахождения i - ой переменной использовать i - ое уравнение с
явным видом итерации – формулу касательных Ньютона для уравнения с одной
неизвестной переменной:
....
x m 1 Fn ( x1m 1 , x2m 1 ,...,xim11 , xim 1 ,...,xnm11 , xnm )
x '
m
n Fn x n ( x1m 1 , x2m 1 ,...,xim11 , xim 1 ,...,xnm11 , xnm )
n
Обозначим вектор x m x1m ,x2 m ,...,xn m x1m x1, x2m x2 ,...,xnm xn , аналогично:
x m1 x1m1,x2m1,...,xn m1 x1m1 x1, x2m1 x2 ,...,xnm1 xn ,где вектор ( x1, x2 ,...,xn ) -
представляет стационарную искомую точку решения системы (2) (5), т.е.:
lim x1m1 lim x1m x1 , f x'1 ( x1 , x2 ,...,xn ) 0,...,lim xnm1 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 x1m1, x2m1,...,xim1,...,xnm Fi x1m1, x2m1,...,xim1,...,xnm , i 1, n .
Вычтем из правой и из левой части (4) каждого i - го уравнения xi ,
xim1 xim1 xi , xim xim xi , кроме того, в частных прозводных f x' , f x'' x переменные с
i i i
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 xim11 , xi xim ,...,xn xnm )
xi xi
m
,
f x'i' xi ( x1 x1m 1 , x2 x2m 1 ,...,xi 1 xim11 , xi xim ,...,xn xnm )
....
m 1 f x' n ( x1 x1m 1 , x2 x2m 1 ,...,xn 1 xnm11 , xn xnm )
xn xn
m
Сходимость метода
начальными итерациями x 0 , x1 , x0 x10 x1, x20 x2 ,...,xn0 xn .
.
Доказательство проведём по индукции (достаточность).
Разложим последовательно
f x'i ( x1 x1m1, x2 x2m1,...,xi 1 xim11, 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 O1 x m f x'1' x j ( x)x mj O1 x m в
2 2
j 1
j1
силу справедливости (5). Где x m maxx 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
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 )
f ''
x1x j ( x )x mj
x1m
O x m x1m O x m
j 2 2 2
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
f x'1' x j ( x ) x mj x m f x'' x ( x )
O x m '' O x m
1 j
j2 2 j2 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
M1,1
x1m1 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 ( x1m1, x2m1,...,xim ,...,xnm ) f x'i ( x1, x2 ,...,xn ) f x'i' x j ( x)x mj1 f x'i' x j ( x )x mj Oi x m
2
j 1 j i
i 1 n
f x'i' x j ( x)x mj1 f x'i' x j ( x)x mj Oi x m
2
j 1 j i
f x'i ( x1 x1m1 ,...,xi1 xim11 , xi xim ,...,xn xnm )
xim1 xim
f x''i xi ( x1 x1m1 ,...,xi 1 xim11 , xi xim ,...,xn xnm )
i 1 n
j 1 j i
xim
f x'i' xi ( x1 x1m 1,..., xi 1 xim11, xi xim ,..., xn xnm ) f x'i' xi ( x1 x1m 1 ,..., xn xnm )
f x'i' xi ( x1, x2 ,..., xn )
i 1 n
f ''
xi x j ( x )x m1
j f ''
xi x j ( x )x m
j f ''
xi x j ( x )x m1
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 m1
1
m
n
''
xi xi ( x1 x m1
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
M1,i
xim1 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 maxxim 1 x m q x m .
i 1, n
18
где x 0 maxxi0 max xi0 xi начальное приближение стационарной точки,
i 1, n i 1, n
x m 1 xm
Рис.1
На практике известны не величины x m 1
и x m , а расстояния между последовательными
итерациями x m , x m1 (рис.1). Из неравенства треугольника получим:
x m x m1 x m x m 1 x x m x x m 1 x m x m x m1 (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 m1 (1 q) x m 2 ... (1 q)( x m x m 1 x m 2 ...)
im
(1 q) x 0 qm
(1 q) x q 0 m
q 1 q
i 0
i
.
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 m2 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 m1 Ax 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]:
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, yx2 y2 , yxn yn .
Рассмотрим условия, при которых данная задача имеет единственное решение.
Запишем задачу в виде системы уравнений:
а 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
n 1 n2
1 x2 x0 x x2 x0
2
2 x
2 x 2 x0 x x2n 1 x0
2
n
n 1 n2
1 xn 1 x0 xn21 xn 1 x0 x
n 1 x 0 x0 x n
n 1 xnn11 x0
n 1 n2
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 xn21 xnn11
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
xj
n 1 попарно одинаковых
i
Ф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
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 ) .
25
( 2)n ( xi2 ) 0, xi2 xi1, xi11 , 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 , yxi yi , i 1, n -
называются узловыми значениями функции y (x ) .
y ( x ) y x1
y x1, x y ( x2 , x1 ) x x2 y x1, x2 , x , откуда
x x1
y( x) yx1 x x1 yx1, x2 x x1 x x2 yx1, x2 , x (3)
Сравнение формул (1),(2), (3) показывает, что приближённую формулу аппроксимации
функции можно получить, отбросив последнее слагаемое с разделённой разностью (в (3)
y x1, x2 , x ) , содержащей свободную переменную x , что эквивалентно в предыдущем
разложении переменную x заменить на следующий узел (в (2) x на x2 ). Поэтому для
исходной сетки x1, x2 ,...xn получим:
y( x) yx1 x x1 yx1, x2 x x1 x x2 yx1, x2 , x3 ... x x1 x x2 x xn 1 yx1, x2 ,...,xn (4)
Последняя формула носит имя Исаака Ньютона.
В дальнейшем при составлении программы нам понадобится
Основное свойство разделённой разности:
n 1
y x1 , x2 ,...,xn , xn 1
yi
n 1
(5)
i 1
x
j 1, j i
i xj
28
2) Предположим справедливость формулы (5) для n произвольных узлов для разделённой
разности порядка n 1 , тогда для разделённой разности порядка n для n 1 узла
x1, x2 ,...,xn , xn1 по определению имеем:
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
n1 n
1 yi n
yi 1 yi xi x1 xi xn1 y n1
xn1 x1 i2 n x x i1 n x x xn1 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
i2
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
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 Интерполяция функций кубическими сплайнами
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 ( xi1 ) 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)
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
n n 1 n
Откуда xn , n , n определяют из начальных условий (12)
1 n 1n
xk k xk 1 k , k 0, n 1 (15)
Формулы (15) называются прогонкой назад
Запишем условие (по Самарскому А.А.)устойчивости численной схемы (11)
Ck Ak Bk Ak 0, 0 1, n 1 (16)
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
34
Рис.1 Сплайн 3-го порядка для функции y( x ) cos(x ) по 10 исходным точкам, каждый
сплайн дополнительно рисуется по 10 точкам.
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
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 n1 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 n2 x n1
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 Сравнение порядков погрешности интегральных
квадратурных формул
f ( x )dx Ci f ( xi ) R f (1)
a i 1
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 , R1 0, Rx 0, R x 2 0,...,R x n 1 0 (2)
41
f ( z ) 1,
ab
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 с шагом
ba
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 ) 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
ba
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
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 1C2 C2 C1
1
2
f ( z )dz
1
2
42
ba
b
f (a ) f (b) f (a ) f (b)
h
f ( x)dx
a
2 2
(6)
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
ba 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 ]
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)
ba
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 :
ch
h3 '' b a 5 f ( 4) (c) 2hf (c) h3 f '' (c) O h5
ch
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 ,из последних двух формул получим:
ch
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
ch
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
( 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 , xm1 ) ( xm1, xm 2 ) ( xn 1, xn ) ( m1 m1 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
51
b
y ( x ) K ( x, s ) y ( s )ds f ( x ) (2)
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 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
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
a
2
2
b
2
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
yk21 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
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
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 1, h) (k 1, h)
m ax . C lim . C
p . p ( k , h) h 0 . p (k , h)
2) Порядок сходимости разностной схемы p по Бахвалову Н.С.[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 узлам.
Наконец, приведем рекорд (на границе машинной точности 1016 )
Литература
1)Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – 6-е изд. –
М.:БИНОМ. Лаборатория знаний.
2)Бахвалов Н.С., Лапин А.В., Чижонков Е.В. Численные методы в задачах и упражнениях:
учебное пособие. – М.:БИНОМ. Лаборатория знаний,2010. – 240 с.
3) Самарский А.А., Вабишевич П.Н. Численные методы обратных задач математической
физики. – М.:Издательство ЛКИ, 2014.- 480 с.
60
Лабораторная работа №9 Решение неявного уравнения теплопроводности методом
прогонки
Метод прогонки
Решается уравнение вида
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)
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
n n 1 n
Откуда xn , n , n определяют из начальных условий (3)
1 n 1n
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)
61
(2) формулы прогонки (5), (6) корректны, т.е. знаменатели формул (5),(6) знакопостоянны
и не обращаются в 0.
Доказательство первой части теоремы проведём по индукции:
1)Для базы индукции k 1 получим
1
B1
, 1
B1
B1
B1
С1 A1 B1 1
C1 A10 C1 A10 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 1k C k 1 Ak 1k 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) получим её корректность, т.к. , n1 1и если n 1 , то
n n1 n
1 n1n 0 и xn корректна (знаменатель больше нуля)
1 n1n
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,...
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
перепишем уравнение в канонической для прогонки форме:
zumn11 2z 1umn1 zumn11 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 z0 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), для чего
разложим узловые значения функций umn11 , umn1 , umn11 относительно узлового значения u mn :
u tt
Упростим формулу (13), учитывая, что z , u t u xx , u tt 2 u xxxx , u txч
h 2
Скомпенсируем слагаемые в правой и левой частях уравнения (13) по степеням малости
63
1 zh 2 1
zh 2 u xx u t u xx z , zh 2 u txx
u tt 2 u tt z 2 1 ,
h 2
2 2h 2
полученное противоречие показывает, что неявная численная схема (10) аппроксимирует
уравнение ut u xx с погрешностью O h 2 (делим уравнение(13) на ).
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);
}
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
Оценим порядок погрешности
Delta80 0.001696 Delta160 0.000232 3
2 2 7,3 2 3 2 12,8 2 4
Delta160 0.000232 Delta320 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 Решение волнового уравнения с помощью явной
разностной схемой
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 m1 zu m1 2um 1 z umn1
n1 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
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 Oh
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
76
Рис.2
Как видно из Рис.2 норма невязки равна, u C 5.2 1015 что близко к нулю для чисел с
двойной точностью (учитывая то, что ошибка занимает 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)
численной схемы при изменении временного и пространственного шага изменяется как
O h 2 O 2 O h 2 2 , т.е. численно подтверждена справедливость формулы(*)
O h , 0 z 1
2 2
78
res[i][1]=res0[i][1]; N=20, p=2, N1=p*N; z=1.01(Рис.5)(норма Чебышева превышает 10100
,хотя решение задачи ограничено по норме u C 1 - формула(6)).
Рис.5
Литература
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). Действительно, если Lu( x, y) - линейный
дифференциальный оператор, то общая дифференциальная задача(2)
Lu 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
Эквивалентна трём простейшим задачам, каждая из которых в системе содержит только
одно уравнение с неоднородной правой частью:
Lu1 F ( x, y ), x, y D Lu 2 0, x, y D Lu 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), учитывая их линейность, получим, что
Lu1 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).
ux, 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
0 x, y
Решаем задачу методом разделения переменных ux, 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
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 sinx, ux, y sinxY y . При этом
автоматически выполняется первое краевое условие задачи 3), решение подставим в
уравнение Пуассона:
sinxY Y '' sinx sinx 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 Ash0 Bch0 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 shx chx sin y
sh
1 ch 1 ch
sh y ch y sin x 1 sh y ch y sin x (7)
sh sh
Формулу (7) – решение краевой задачи для уравнения Пуассона на прямоугольнике
используем в качестве теста при составлении программы.
Для численного решения уравнения Пуассона составим схему. Для аппроксимации
выберем два шаблона максимального порядка симметрии и наименьшего диаметра:
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 xy 3 y 4 120 x 5 x 4 y x 3y 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 xy 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 xy 6 x x y xy 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 xy 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 xy 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 xy 6 x x y xy 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 xy 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 xy 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 u1,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
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 u1,0 1 u1,1 u1,1 u1,1 u1,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
Согласование порядков аппроксимации дифференциального и граничного
операторов.
Введение
91
umn1 umn z(umn 1 umn 1 2umn ), (8)
n 1
Разложим узловые значения u m
n
,u
m1 ,u n
m1 в формуле (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
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
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) и теста (19) напишем программу, например, на языке С.
Нижеследующая программа написана с двойной точностью:
# include stdio.h
# include math .h
int N 100 , N1 N * N ;
intmain(){
int k , j;
double resN 1N1 1, xN 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 ){
resk 0 cos(2.0 * h * double(k ));
xk resk 0* exp(4.0 * dt * double( N1));}
for( j 1; j N1; j )
{
94
for(k 1; k N 1; k )
{
1.0
resk j * resk 1 j 1 resk 1 j 1 4.0 * resk j 1 ;
6.0
}}
1.0
res0 j 48.0 * res1 j 36.0 * res2 j 16.0 * res3 j 3.0 * res4 j ; (20)
25.0
1.0
resN j 48.0 * resN 1 j 36.0 * resN 2 j 16.0 * resN 3 j 3.0 * resN 4 j ; (21)
25.0
Таблица 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
95
2
2
u cos(2mh)e 3 , m 0,12,...,N дважды меняет знак при 0 x . .
N2
m
h = 1.57079632
6794897E- 002, 6.088068189625153E- 008
В пространстве С непрерывных на отрезке 0, функций с нормой Чебышева
x C maxt0, x(t ) норма разности приближенного и точного решений, заданной на
равномерной сетке, равна
delta umN (resolve) umN (axact) max deltamN
2 2 2
C m 0,...N
Из таблицы 2 видно при ( N 200) , что delta C 4 109 в то время как h4 6 108 ,
Другими словами, равномерная норма разности не превышает четвертой степени шага
равномерной сетки 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
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
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
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
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 s0 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 s0 s 0
9
Сj ;
140
68 k 1
4) если j 3 mod6 : S 4 f a h(3 6s)
105 s0
(5.4)
68
Сj ;
105
41 k 1
5) если j 0 mod6 : S5 f a h(6s)
210 s1
41
Сj ;
210
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>
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
1016 , выполнение асимптотики (порядок аппроксимации p 8 ) можно ожидать
при eps 1015 .
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>
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);
104
Лабораторная работа № 14
Аппроксимация тройного интеграла
Учитывая предыдущий опыт построения алгоритма I 2 по I 1 , получим алгоритм
трёхмерной квадратурной формулы для объёмного интеграла I 3 как декартово
произведение трёх одномерных на отрезке квадратурных формул:
(b a) (d c) ( f e)
b d f
I 3 f ( x, y, z )dxdydz27h1h2 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>
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);
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
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
Dx, y xr , x 0 a
свойствами: якобиан замены координат 2 0 во всех точках
Dr , 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 i0 j0
i, j f r1 y j , xi
a
( r1 y j )
2r2 r1 i0 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;
}
113
Лабораторная работа №16
Тройные интегралы в сферической системе координат
r2 2
y 2 y 2
c b a
I 3 f r , , r 2 dr sin dd 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
5 0 0 1
10 5 2 0 2 0
r 7
sin sin
2
r dr sin dd 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
Приложение
Квадратурные формулы в кратных интегралах
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
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
x1 x2 x3 x4 x5 x6 x7
С3 С2 С1 С0 С1 С2 С3
Согласно симметрии и квадратурной формуле (3) ( n0 6 )получим:
1
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
раз.
ba
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
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
с помощью (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
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
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
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)
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
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
n0 3
O H
(n0 3)!
H 0 O H n0 4
С другой стороны, суммирование на n kn0 узлах эквивалентно взятию k интегралов на
ba
интервалах длиной 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 ba 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
1 ( n0 2)
b
1
2
exp(4) 1216 ,
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 1014
k n0 3! 2 17! 4
Видно, что r( f ) хорошо приближает численное значение delta с избытком. Достигнув
двойной точности с помощью(17), мы получим и двойную точность численное значение.
В программе получена двойная точность, т.к. epsilon 8 1016 .
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)
ba 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
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
ba 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 )dxdydz27h1h2 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 )dxdydz125h1h2 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 )dxdydz343h1h2 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
11 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
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
11 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
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
пары чисел:
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 12 49 узлов (соответственно 49 весовых коэффициентов Ci , j , i, j 0, n0 ).
Квадратурная формула для двойного интеграла (аналог (6)) имеет вид:
1 1
1 1 1 1 1 1 1 1
11 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
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
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
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] и этот порядок совпадает с
порядком одномерной формулы.
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
Dx, y xr , x 0 a
свойствами: якобиан замены координат 2 0 во всех точках
Dr , 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 )
2r2 r1 i 0 j 0
Ci , j f r1 jh2 , ih1 (r1 jh2 )
a
(29)
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 *1016 и 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
134
4 r2 r1r2 r1
2 2
a r2 r1 , b , c r2 r1 ,
3
r2 r1
где: r2 ,r1 внешний и внутренний радиусы шарового слоя,
a, b, c стороны параллелепипеда
рассматриваемой области;
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( )drd 0 . Для шара имеем ещё одну особую
точку r1 0 , выполнены первые 2 требования гладкой замены переменных
интегрирования кроме третьего (неоднозначность отображения в точке r 0 ). Что для
интеграла несущественно, так как мера интеграла в сферических координатах в
окрестности указанной точки: dI3 f r, , r 2 dr sindd f 0, , 02 dr sindd 0 .
r2 2
y 2
c b a
y 2
I3 f r , , r 2 dr sin dd 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
3n0 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 dd
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)
Лабораторный практикум по численным методам
139