Устойчивость методов полиномиальной аппроксимации
При анализе устойчивости метода полиномиальной аппроксимации обычно обращаются к тестовой задаче Коши
где - комплексный параметр.
Применим алгоритм (22) к решению задач (38), получим
Преобразуем (39) в эквивалентное разностное уравнение
где .
Положив в (40) , получим после сокращения на многочлен степени :
Многочлен (41) будем называть характеристическим многочленом метода полиномиальной аппроксимации (22).
Общее решение разностного уравнения (40) определяется выражением
где - различных корней характеристического многочлена (41), - произвольные постоянные, значения которых находятся из стартовых значений решения. Если характеристический многочлен (41) имеет кратный корень ( - его кратность), то соответствующее слагаемое в формуле (42) общего решения будет иметь вид
Заметим, что если , то при (даже в том случае, когда корень - простой). Если - корень кратности и , то из (43) следует, что при .
Замечание.При значение является простым корнем характеристического многочлена тогда и только тогда, когда .
Теорема(критерий устойчивости методов полиномиальной аппроксимации).
Состоятельный метод полиномиальной аппроксимации (22), удовлетворяющий условию , устойчив (в том смысле, что локальная алгоритмическая ошибка метода и ошибка округления остаются ограниченными при достаточно малой величине шага ) тогда и только тогда, когда все корни многочлена
таковы, что , а те корни, для которых , простые.
Корни многочлена (44) принято называть паразитными.
Замечание.Методы Адамса-Башфорта и Адамса-Мултона устойчивые. Действительно, для этих методов , . Поэтому
.
Здесь все корни многочлена равны нулю и, следовательно, лежат внутри единичного круга.
Обозначим через - решение уравнения
со стартовыми значениями ( ).
Теорема (оценка глобальной погрешности многошагового метода полиномиальной аппроксимации).
Пусть выполнены следующие условия:
1. Правая часть дифференциального уравнения определена непрерывна в области и существует константа , не зависящая от такая, что в области
2. Пусть - точное решение уравнения задачи Коши (1) имеет на отрезке непрерывные производные до порядка , .
3. Метод полиномиальной аппроксимации (22) является состоятельным и .
4. При достаточно малом все корни многочлена
таковы, что , а те корни, для которых , простые.
Тогда для глобальной ошибки метода (22) справедлива оценка
где , , -локальная ошибка округления на -ом шаге, - постоянные, зависящие от коэффициентов формулы (22) и правой части дифференциального уравнения и независящие от , .
Из (45) следует, что глобальная ошибка метода полиномиальной аппроксимации состоит из трех частей:
1) ошибка при вычислении стартовых значений,
2) суммарная алгоритмическая ошибка метода, характеризуемая величиной , убывающая с уменьшением ,
3) ошибка округления, представленная членом , который растет с уменьшением .
Погрешность, очевидно, растет с увеличением длины отрезка, на котором разыскивается решение.
Замечание.Все описанные методы решения задачи Коши (1) переносятся на системы дифференциальных уравнений
где
или
…….
Формулы сохраняются в прежнем виде, нужно только заменить на , на . В оценках погрешности абсолютная величина заменяется на норму вектора.
6. Задание.Найдите на отрезке решение задачи Коши для системы обыкновенных дифференциальных уравнений
с точностью , методами Рунге-Кутта, Адамса-Башфорта четвертого порядка и прогноза-коррекции (используя для прогноза алгоритм (37) и коррекции – метод Адамса-Мултона четвертого порядка).
Варианты заданий.
№ варианта | |||||
0,5 | 1,5 | ||||
-1 | |||||
0,5 | 1,2 | ||||
-1 | |||||
0,7 | -0,5 | ||||
0,2 | |||||
-1 | |||||
№ варианта | |||||
-1 | |||||
1/6 | |||||
1/7 | |||||
0,125 | |||||
1/9 | |||||
0,1 | |||||
1/11 | |||||
1/11 | |||||
1/12 | |||||
1/13 | |||||
1/14 | |||||
1/6 | |||||
1/7 | |||||
0,125 | |||||
1/9 | |||||
0,1 | |||||
1/11 | |||||
1/12 |
Приложение.Для выполнения задания можно использовать следующие процедуры (на языке Паскаль):
1) Процедура rung, реализующая алгоритм метода Рунге-Кутта четвертого порядка (18):
Procedure rung(h:real; var x0:real;var y0:vector; n:integer);
{Входные параметры:
h – шаг интегрирования системы;
x0 – стартовое значение аргумента;
y0 – массив, содержащий значения решения системы в точке x0;
n - размерность системы.
Выходные параметры:
y0 – массив, содержащий значения решения системы в точке x0+h.
Здесь vector - одномерный массив порядка n}
var
i:integer;
begin
f(x0,y0,k1); for i:=1 to n do yt[i]:=y0[i]+0.5*h*k1[i];
f(x0+0.5*h,yt,k2); for i:=1 to n do yt[i]:=y0[i]+0.5*h*k2[i];
f(x0+0.5*h,yt,k3); for i:=1 to n do yt[i]:=y0[i]+h*k3[i];
f(x0+h,yt,k4); x0:=x0+h;
for i:=1 to n do y0[i]:=y0[i]+(h/6)*(k1[i]+2*k2[i]+2*k3[i]+k4[i])
end;
2) Процедура ad , реализующая алгоритм метода Адамса-Башфорта четвертого порядка (см. Таблицу 1):
Procedure ad(h:real;var yt:start;var y0:vector);
{Входные параметры:
h – шаг интегрирования системы;
yt – двумерный массив порядка (n,4)(n-размерность системы),столбцы
которого являются решениями системы в четырех стартовых точках.
Выходные параметры:
y0 – массив, содержащий решение системы в точке, отстоящей на 4h от
первой стартовой.
Здесь start – двумерный массив порядка (n,4), vector - одномерный
массив порядка n, kof – одномерный массив порядка 4.}
var
i,j:integer; kf:kof;
begin
kf[1]:=-9.0/z; kf[2]:=37.0/z; kf[3]:=-59.0/z; kf[4]:=55.0/z;
for i:=1 to n do
for j:=1 to 4 do
y0[i]:=y0[i]+h*yt[j,i]*kf[j]
end;
3) Процедура ad_mult, реализующая алгоритм метода прогноза-коррекции: прогноз - явный метод (37), коррекция - метод Адамса-Мултона четвертого порядка (см. Таблицу 2).
Procedure ad_mult(x0,h,eps:real;ys:start;var yc:vector);
{ {Входные параметры:
x0 – первая стартовая точка решения системы;
h - шаг интегрирования системы;
eps- значение в условии окончания итерационного процесса при
коррекции решения ;
ys – двумерный массив порядка (n,3) (n-размерность системы),
столбцами которого являются решения системы в трех стартовых
точках.
Выходные параметры:
yc - массив, содержащий решение системы в точке, отстоящей на 3h от
первой стартовой.
Здесь start – двумерный массив порядка (n,3), vector - одномерный
массив порядка n, kof – одномерный массив порядка 4.}
var
i,j :word;
yt :start; {
yp,y :vector; {
ka_m :kof;
x :real;
begin
yp:=ys[3];
for j:=1 to 3 do f(x0+j*h,ys[j+1],yt[j]);
ka_m[1]:=1/z; ka_m[2]:=-5/z; ka_m[3]:=19/z; ka_m[4]:=9/z;
for i:=1 to n do yp[i]:=yp[i]+2*h*yt[3,i]; {прогноз}
f(x0+4*h,yp,yt[4]);
yc:=ys[4];
for i:=1 to n do
for j:=1 to 4 do
yc[i]:=yc[i]+h*yt[j,i]*ka_m[j];
while nr(yp,yc)>=eps do
{nr – имя функции,вычисляющей норму разности двух векторов}
begin yp:=yc; y:=ys[4];
f(x0+4*h,yc,yt[4]);
for i:=1 to n do
for j:=1 to 4 do
y[i]:=y[i]+h*yt[j,i]*ka_m[j];
yc:=y
end
end;
function nr(z,z1:vector):real;
{vector - одномерный массив порядка n}
var i :word;
q :real;
begin
q:=0; for i:=1 to n do
if abs(z1[i]-z[i])>=q then q:=abs(z1[i]-z[i]);
nr:=q
end;
Составитель – Трофимов Валерий Павлович
Редактор - Бунина Т.Д.