У розбіжності рішення явним методом Ейлера, якщо , можна переконатися, запрограмувавши цей метод у пакеті Mathematical
ln[]:= u[0] = 1;
t[0] = 0;
m = 4;
;
Do [{t[n] = t[0] + *n;
f[n] = t[n]^2 – 15*u[n]^2; u[n+1] = u[n] + *f[n]} ];
Do [Print [“n = “, n , “t [“, n, ”] = ”, t[n], “u[“, n, ”] = “, u[n]], {n,0,m} ];
Отримані результати:
n = 0 t[0] = 0 u[0] = 1
n = 1 t[1] = 0.1 u[1] = -0.5
n = 2 t[2] = 0.2 u[2] = -0.874
n = 3 t[3] = 0.3 u[3] = -2.01581
n = 4 t[4] = 0.4 u[4] = -8.10207
Далі скористаємось формулою неявного методу Ейлера (10.8) і запишемо:
а потім послідовно сформуємо і розв'яжемо відповідні нелінійні алгебраїчні рівняння:
Необхідну послідовність обчислень у пакеті Mathematica можна записати в такий спосіб:
ln[]:= f[t_,r_,u_]:= Block[{x},
w = FindRoot[r*15*x^2 + x – u – r*t^2 =0, {x,u}];
y = x/.w[[1]]] ;
t = 0; u = 1;
; m = 4;
Do [Print [“n = “, n , “t = ”, t, “u = “, u];
t = t + ; u1 = u; u = f[t, , u1], {n, 0, m}];
Отримані результати:
n = 0 t = 0 u = 1
n = 1 t = 0.1 u = 0.548962
n = 2 t = 0.2 u = 0.359308
n = 3 t = 0.3 u = 0.263868
n = 4 t = 0.4 u = 0.212276
10.3. Неявнілінійнібагатокроковіметоди
Серед лінійних багатокрокових методів, описаних у розділі 9, можна виділити кілька класів неявних методів, побудованих на сітці з постійним кроком.
10.3.1.НеявнібагатокроковіметодиАдамса-Мултона
Для повноти викладу тут наводяться також методи Адамса-Мултона:
♦ неявний метод першого порядку:
який збігається з неявним методом трапецій (10.9);
♦ неявний метод другого порядку:
(10.14)
де , і = 0,1,2 — оцінки правої частини розв'язуваного диференціального рівняння в моменти часу , ,;
♦ неявний метод третього порядку:
(10.15)
який (за тієї ж точності) значно простіше реалізувати, ніж неявний метод Рун-ге-Кутта четвертого порядку (10.12), оскільки лише один член праворуч від залежить від шуканого значення
10.3.2.НеявнібагатокроковіметодиРакитського
На відміну від методів Рунге-Кутта методи Ракитського не вимагають багаторазового оцінювання значення похідної:
♦ метод другого порядку:
(10.16)
♦ метод четвертого порядку:
(10.17)
Приклад 10.2
Розв'яжемо неявним методом Ракитського другого порядку (10.16) рівняння: (див. приклад 10.1). Знайдемо значення y(0,4) із кроком .
Тоді модифікована програма для пакета Mathematica набуде такого вигляду:
ln[]:= u[0] = 1; t[0] = 0; m = 4; ;
Do [{t[n] = t[0] + *n; f[n] = t[n+1] + – 15*((u[n+1]+u[n])/2)^2;
u[n] = u[n+1] - u[n] - *f[n]; 0[n] = u[n] /. U[n + 1 x[n];
w = NSolve[0[n] = 0, x[n]; u[n+1] = x[n] /. w[[2]];
Print [“n = “, n , “t [“, n, ”] = ”, t[n], “u[“, n, ”] = “, u[n]], {n,0,m} ];
Отримані результати:
n = 0 t[0] = 0 u[0] = 1
n = 1 t[1] = 0.1 u[1] = 0.334458
n = 2 t[2] = 0.2 u[2] = 0.223827
n = 3 t[3] = 0.3 u[3] = 0.176099
n = 4 t[4] = 0.4 u[4] = 0.155192
10.3.3. НеявнібагатокроковіметодиГіра
На відміну від неявних методів Адамса-Мултона неявні методи Гіра (диференціювання назад) використовують множину попередніх значень функції й лише одну оцінку похідної в поточній точці базуються вони на застосуванні інтерполяційного полінома Лежандра. За постійного кроку обчислень отримуємо:
♦ метод другого порядку:
(10.18)
♦ метод третього порядку:
(10.19)
♦ метод четвертого порядку:
(10.20)
Однак із практичної точки зору важливими є, насамперед, неявні методи зі змінним кроком обчислень, які дозволяють реалізувати основну перевагу неявних методів, що полягає в можливості зміни кроку т в широких межах.
Приклад 10.3
Розв'яжемо неявним методом Гіра другого порядку (10.18) рівняння: , яке було розв'язане раніше, в прикладі 10.1, неявним методом Ейлера. Неявний метод Гіра називають також методом Шихмана. Потрібно, як і раніше, з кроком знайти значення y(0,4).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.