
- •Наближені методи розв’язування звичайних диференціальних рівнянь
- •1. Метод степеневих рядів
- •2. Метод послідовних наближень Пікара
- •7.3. Метод Ейлера та його модифікації розв’язування задачі Коші для звичайних диференціальних рівнянь першого порядку
- •7.3.1. Метод Ейлера
- •7.3.2. Виправлений метод Ейлера
- •7.3.3. Удосконалений метод Ейлера (метод середньої точки)
- •7.3.4. Метод Ейлера-Коші (метод Хойна)
- •7.3.5. Удосконалений метод Ейлера-Коші з ітераційною обробкою
- •7.3.6. Уточнений метод Ейлера
- •7.4. Метод Рунге-Кутта та його модифікації розв’язування задачі Коші для звичайного диференціального рівняння першого порядку
- •7.5. Покроковий контроль точності. Метод Рунге-Кутта-Мерсона
- •7.6. Засоби середовища matlab розв’язування задачі Коші для звичайних диференціальних рівнянь першого порядку методами Рунге-Кутта
- •7.7. Багатокрокові методи розв’язування задачі Коші для звичайних диференціальних рівнянь першого порядку
- •7.7.1. Метод Адамса-Бешфорса-Маултона
- •7.7.2. Метод Мілна-Сімпсона
- •7.7.3. Метод Хеммінга
- •7.8. Засоби середовища matlab розв’язування задачі Коші для звичайних диференціальних рівнянь першого порядку з використанням багатокрокових методів
- •7.9. Чисельні методи розв’язування задачі Коші для систем звичайних диференціальних рівнянь першого порядку
- •7.10. Чисельні методи розв’язування задачі Коші для звичайних диференціальних рівнянь вищих порядків
- •7.11. Розв’язування лінійної крайової задачі для звичайного диференціального рівняння другого порядку методом скінченних різниць
7.7. Багатокрокові методи розв’язування задачі Коші для звичайних диференціальних рівнянь першого порядку
Методи Ейлера,
Ейлера-Коші, Рунге-Кутта називаються
однокроковими методами, тому що в них
використовується інформація лише від
однієї попередньої точки для того, щоб
обрахувати наступну. Тобто тільки
початкова точка (x0; y0)
використовується для обчислення
(x1; y1),
і загалом, щоб обрахувати уi+1
необхідне лише уi.
Але після знаходження декількох точок
можна їх використовувати для отримання
більш точних результатів. Наприклад,
для чотирикрокового методу Адамса
(Адамса-Бешфорса)
необхідні точки уi-3,
уi-2,
уi-1,
та уi
для обчислення уi+1.
У цьому методі чотири початкові точки,
(x0, y0),
(x1, y1),
(x2, y2)
та (x3, y3),
отримують заздалегідь за допомогою
якого-небудь однокрокового методу
(наприклад, методу Рунге-Кутта), які далі
можна використовувати для генерації
точок {(xi, yi):
i4}.
Корисною властивістю багатокрокового методу є можливість визначити локальну помилку відсікання (ЛПВ) та включити коригуючий елемент, який підвищує точність відповіді на кожному кроці. Також можна визначити, чи буде довжина кроку достатньо малою, щоб отримати точне значення уi+1, або знайти більший крок, який виключить непотрібні обчислення.
7.7.1. Метод Адамса-Бешфорса-Маултона
Метод прогнозу-корекції Адамса-Бешфорса-Маултона – це багатокроковий метод, виведений із наступної рівності:
|
(7.30) |
Даний метод
використовує наближення поліномом
Лагранжа для підінтегральної функції
f (x, y(x)),
що побудований по точках (xi-3, fi-3),
(xi-2, fi-2),
(xi-1, fi-1)
i (xi, fi).
Тут введене позначення
.
Прогноз Адамса-Бешфорса має вигляд
|
(7.31) |
Обчислений прогноз потребує корекції. Коректор отримується аналогічно. Як тільки значення pi+1 обраховано, його використовують для побудови наступного поліному Лагранжа для функції f (x, y(x)), який будується по точках (xi-2; fi-2), (xi-1; fi-1), (xi; fi) і новій точці (xi+1; fi+1) = (xi+1; f (xi+1,pi+1)). Після отримання поліному шляхом інтегрування на інтервалі [xi; xi+1] отримаємо коректор Адамса-Маултона:
|
(7.32) |
Оцінка помилки і корекція. Залишковий член формули чисельного інтегрування використовується, щоб отримати і прогноз, і коректор порядку О(h5). Локальна помилка відсікання для формул (7.31) та (7.32) має вигляд:
|
(7.33) |
|
(7.34) |
Припустимо, що h мале і y(5) (x) є майже сталою на інтервалі. Тоді можна виключити члени, що містять похідну 5-го порядку у формулах (7.33) та (7.34). В результаті отримаємо:
|
(7.35) |
Переваги методу прогнозу-корекції Адамса-Бешфорса-Маултона у тому, що формула (7.35) дає наближену оцінку помилки, яку отримуємо при обчисленні значень pi+1 i yi+1, не використовуючи у(5)(x).
Коректор (7.32)
використовує наближення
при обчисленні уi+1.
Оскільки уi+1
також є оцінкою для у(xi+1),
її можна використовувати в коректорі
(7.32) для генерування нового наближення
для fi+1,
яке, в свою чергу, буде генерувати нове
значення для уi+1.
Окрім того, якщо продовжити цю ітерацію
в коректорі, вона буде збігатись до
фіксованої точки в (7.32) швидше, ніж
диференціальне рівняння. Якщо необхідно
отримати більшу точність, то така
процедура більш ефективна, ніж зменшення
довжини кроку.
Формулу (7.35) можна
використовувати для визначення, коли
змінювати довжину кроку. Можливо зменшити
довжину кроку до h/2
і збільшити до 2h.
Припустимо ε =
– критерій відносної похибки.
Якщо
|
(7.36) |
Якщо
|
(7.37) |
Якщо прогноз і корекція значень не дають відповідностей у п’ять значущих цифр, то формула (7.36) зменшує довжину кроку. Якщо ж вони зводяться до семи або більше значущих цифр, то по формулі (7.37) довжина кроку збільшується.
Зменшення довжини
кроку потребує чотирьох нових початкових
значень. Для отримання необхідних
значень, які ділять інтервали
і
,
використаємо інтерполяцію функції
f (x,y(x))
поліномом четвертого степеня. Нові
чотири вузлові точки, xi-3/2,
xi-1,
xi-1/2
і xi,
використовуються в наступних обчисленнях.
Інтерполяційна формула, необхідна для отримання нових початкових значень (рис. 7.5) для кроку h/2 має вигляд:
|
(7.38) |
Набагато простіше збільшити довжину кроку, тоді для розрахунків знадобляться сім попередніх точок.
Рис. 7.5. Зменшення довжини кроку до h/2.
Програмна реалізація методу Адамса-Бешфорса-Маултона на мові середовища MATLAB наведена в лістингу 7.2.
Лістинг 7.2.
function [x,y]=adams(y0,a,b,n)
% adams – метод Адамса-Бешфорса-Маултона
% Права частина диференціального рівняння - в функції f(x)
% >> [x,y]=adams(y0,a,b,n)
% Вхідні аргументи:
% y0 – початкове значення;
% a, b – межі інтервалу;
% n – кількість підінтервалів
% Вихідні аргументи:
% x – вектор вузлів, в яких знайдений розв’язок;
% y – вектор зі значеннями функції-розв’язку у вузлах х
if a>=b
error('Неправильні межі (a<b)');
end
h=(b-a)/n;
[x,y]=runge4(y0,a,a+3*h,3);
for i=4:n
p=y(i)+h/24*(-9*f(x(i-3),y(i-3))+37*f(x(i-2),y(i-2))-59*f(x(i-1),y(i-1))+55*f(x(i),y(i)));
x(i+1)=x(i)+h;
y(i+1)=y(i)+h/24*(f(x(i-2),y(i-2))-5*f(x(i-1),y(i-1))+19*f(x(i),y(i))+9*f(x(i+1),p));
end