
- •Лекция №8 Обыкновенные дифференциальные уравнения Постановка задачи Коши
- •Метод Пикара
- •Метод малого параметра
- •Метод ломаных
- •Метод Рунге-Кутта
- •Метод Адамса
- •Решатели дифференциальных уравнений в matlab
- •Постановка краевой задачи
- •Метод стрельбы
- •Краевая задача. Разностный метод
- •Краевая задача в среде matlab
Метод Адамса
Пусть в точках сетки …,xn 3, xn 2, xn 1, xn известны приближенные решения …,yn 3, yn 2, yn 1, yn дифференциального уравнения u = f(x,u), тогда известны также значения правой части дифференциального уравнения в точках сетки, т.е. F(xk) = f(xk,yk), k = …,n3, n2, n1, n. Наличие значений правой части позволяет аппроксимировать ее интерполяционным полиномом. Запишем интерполяционный полином в форме Ньютона
(37)
Ограничимся в дальнейшем лишь теми членами в (37), которые представлены до символа троеточия. Данные члены уже обеспечивают четвертой порядок точности.
Для вычисления значения решения в следующей точке xn +1, запишем исходное дифференциальное уравнение в интегральной форме:
. (38)
Подставим в (38) интерполяционный полином (37), тогда, после соответствующего интегрирования, получим схему Адамса переменного шага
(39)
где
.
Если в (39) отбросить последнее слагаемое,
то схема будет иметь третий порядок
точности, если два последних, то схема
будет иметь второй порядок и т.д.
Часто схема Адамса
используется на равномерной сетке. В
этом случае вместо разделенных разностей,
входящих в формулу Ньютона (37), привлекают
конечные разности
.
С учетом последней формулы схему Адамса
(39) на равномерной сетке можно представить
в виде:
. (40)
Чтобы начать расчет по схеме Адамса (39) или (40) надо знать не только начальное значение y(x0), но также значения в точках x1, x2, x3. Эти дополнительные значения необходимо найти каким-либо иным методом, например, Рунге-Кутта. Привлекательным свойством метода Адамса является то, что в отличие, например, от методов Рунге-Кутта, значение функции f(x,u) вычисляется один раз на одном шаге. Это может оказаться важным для случая, когда вычисление функции f(x,u) довольно трудоемко.
Протестируем метод
Адамса на примере решения уравнения u
= xu
на отрезке [0,1], где в качестве начального
значения выбирается u(0)
= 1. Решение данной задачи известно: u(x)
= exp(0.5x2).
Нас будет интересовать точность численной
оценки в точке xN
= 1, где 0 = x0
< x1
< … < xN
= 1 — некоторая равномерная сетка на
отрезке [0,1]. В силу построения схемы
Адамса, точность численной оценки
решения должна удовлетворять соотношению
,
т.е. величина M(1)
не должна зависеть от h
при h
0. Проверим это, построив зависимость
величины
от шага сетки. На листинге_№9 приведен
соответствующий код программы, которая
осуществляет численное решение
дифференциального уравнения методом
Адамса.
Листинг_№9
%Программа решения дифференциального уравнения
%методом Адамса
%очищаем рабочее пространство
clear all
%определяем правую часть дифференциального
%уравнения u'=f(x,u)
f=@(x,u)x*u;
%определяем набор сеток
Mesh=10:50:10000;
%организуем цикл расчета методом Адамса для
%различных сеток
for k=1:length(Mesh)
N=Mesh(k); h=1.0/(N-1);
%определяем начальное данное
y(1)=1;
%находим методом Рунге-Кутта четвертого
%порядка значения функции в трех последующих
%точках, т.е. в точках x(2), x(3), x(4)
for n=1:3
x(n)=(n-1)*h;
k1=f(x(n),y(n));
k2=f(x(n)+0.5*h,y(n)+0.5*h*k1);
k3=f(x(n)+0.5*h,y(n)+0.5*h*k2);
k4=f(x(n)+h,y(n)+h*k3);
y(n+1)=y(n)+(h/6)*(k1+2*k2+2*k3+k4);
x(n+1)=x(n)+h;
end
%вычисляем значения правой части в первых четырех
%точках сетки
for n=1:4
F(n)=f(x(n),y(n));
end
%организуем вычисления последующих значений искомой
%функции методом Адамса
for n=4:(N-1)
y(n+1)=y(n)+h*F(n)+0.5*h*(F(n)-F(n-1))+...
(5.0/12)*h*(F(n)-2*F(n-1)+F(n-2))+...
(3.0/8)*h*(F(n)-3*F(n-1)+3*F(n-2)-F(n-3));
x(n+1)=x(n)+h;
F(n+1)=f(x(n+1),y(n+1));
end
%находим константу M в оценке погрешности
%приближенного решения |y(N)-u(x(N))|<=Mh^4,
%она не должна зависеть от h
M(k)=abs(y(N)-exp(0.5))/h^4;
step(k)=h;
end
%рисуем зависимость константы M от шага сетки h
%(в графическом окне MATLAB по осям абсцисс и
%ординат переходим в логарифмическую систему
%координат)
plot(step,M);
Рис.7. Изучение погрешности метода Адамса
На рис.7 приведен итоговый график работы кода программы листинга_№9. На этом графике изображена зависимость константы M(1) от шага сетки. Как и для метода Рунге-Кутта четвертого порядка, при шаге сетки меньше 103 величина M(1) начинает быстро расти, что обусловлено ограниченность мантиссы чисел типа double в MATLAB приблизительно 15-ю значащими цифрами. Есть еще одна особенность метода Адамса по сравнению с методом Рунге-Кутта. Если сравнить рис.5,б и рис.7, то обнаруживается, что константа M(1) в методе Адамса в 103 раз больше соответствующей константы в методе Рунге-Кутта той же точности.