Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция№8.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
753.66 Кб
Скачать

Метод Адамса

Пусть в точках сетки …,x3, x2, x1, xn известны приближенные решения …,y3, y2, y1, yn дифференциального уравнения u = f(x,u), тогда известны также значения правой части дифференциального уравнения в точках сетки, т.е. F(xk) = f(xk,yk), k = …,n3, n2, n1, 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 раз больше соответствующей константы в методе Рунге-Кутта той же точности.