Численное решение обыкновенных дифференциальных
уравнений
Метод Эйлера. Метод Эйлера-Коши. Метод
Рунге-Кутта. Метод Адамса.
Рассмотрим задачу Коши:
|
y¢=¦(x,y); y(x0)=y0. |
(1) |
Задача
(1) при определенных ограничениях, наложенных на функцию ¦(x,y) (в дальнейшем мы будем предполагать, что эти
ограничения выполняются), имеет единственное решение.
При
численном решении задачи (1) требуется определить значение неизвестной функции
y(x) в некоторой точке x*.
Для
решения поставленной задачи интервал [x0,x*] разбивается на n частей с точками
разбиения x0, x1,…, xn=x* (xi-xi-1=hi). Затем по приближенным формулам находят
последовательно y1=y(x1), y2=y(x2), …, yn=y(xn).
Большинство
приближенных формул вычисления yi=y(xi) получаются следующим образом. Переписав
уравнение (1) в форме дифференциалов dy=¦(x,y)×dx и проинтегрировав его в пределах от
xi-1 до xi, получим:

или
|
|
(2) |
Это и есть исходное соотношение для различных методов.
Сами методы в дальнейшем различаются то тем дополнительным предположениям,
которые принимаются для приближенного вычисления приращения
|
|
(3) |
В методе
Эйлера интеграл
вычисляется с помощью
формулы левых прямоугольников:
|
|
(4) |
|
|
(5) |
Погрешность
приближенной формулы (4), а следовательно, и формулы (5) на одном шаге есть
|
|
(6) |
В этом
случае говорят, что погрешность метода на одном шаге имеет порядок hi2.
В методе Эйлера-Коши сначала определяют
вспомогательные величины
|
|
|
а затем интеграл
вычисляют с помощью
формулы трапеций. Тогда приближенная формула для вычисления yi принимает следующий
вид:
|
|
(7) |
Погрешность
этой формулы на одном шаге имеет порядок hi3.
В методе
Рунге-Кутта сначала последовательно вычисляются вспомогательные величины
;
;
;
,
а
затем приближенно принимается, что
|
|
(8) |
Погрешность этой формулы на одном шаге имеет порядок
hi5.
В методе
Адамса для вычисления Dyi-1 функция f(x,y) приближенно заменяется интерполяционным полиномом
третьей степени, построенным по четырем предыдущим точкам xi-4, xi-3,
xi-2, xi-1. Таким образом, чтобы
построить решение задачи Коши в точке
x = x4, необходимо по начальному значению y0 = y(x0) предварительно
вычислить его в точках x1, x2, x3 каким-либо другим методом (наиболее часто для
этой цели используется метод Рунге-Кутта). Точки x0, x1, x2, x3 обычно
называются разгонными точками.
Итак,
если hi постоянны и равны h, то, заменяя f(x,y) вторым интерполяционным
полиномом Ньютона, имеем:

и
тогда
|
|
(9) |
Погрешность
этой формулы на одном шаге имеет порядок h5.
Типовые задачи.
|
Задача 1. |
Решить
дифференциальное уравнение |
Решение. По исходным начальным данным x0=1 и y0=2,70
вычисляем
. Далее, следуя формуле (4), имеем Dy0=-0,169. Таким образом, по формуле (5) получаем y1=2,70–0,169=2,53.
Дальнейшие
вычисления выполняем аналогично, принимая за исходные значения x1,y1; x2,y2 и
так далее. Результаты вычислений представлены в следующей таблице.
|
i |
xi |
yi |
y'i = f(xi,yi) |
Dyi = hf(xi,yi) |
|
0 |
1,000 |
2,70 |
–1,35 |
–0,169 |
|
1 |
1,125 |
2,53 |
–1,41 |
–0,176 |
|
2 |
1,250 |
2,35 |
–1,41 |
–0,176 |
|
3 |
1,375 |
2,17 |
–1,38 |
–0,172 |
|
4 |
1,500 |
2,00 |
|
|
|
Задача 2. |
Решить
методом Эйлера-Коши уравнение |
Решение. По исходным начальным данным
x0 = 1 и y0 = 2,70 вычисляется y'0=–1,35. Затем вычисляются вспомогательные
величины
и
. Наконец, по формуле (7) вычисляется y1=2,70–0,35=2,35.
Принимая
теперь за исходные данные x1=1,25 и y1=2,35, дальнейшие вычисления выполняем
аналогично вышеприведенным, а их результаты представим в виде следующей
таблицы:
|
i |
xi |
yi |
y'i=fi |
hfi |
|
|
|
Dyi-1 |
|
0 |
1,00 |
2,70 |
–1,35 |
–0,338 |
|
|
|
|
|
1 |
1,25 |
2,35 |
–1,41 |
–0,352 |
2,36 |
–1,42 |
–0,355 |
–0,346 |
|
2 |
1,50 |
2,01 |
–1,34 |
–0,355 |
2,00 |
–1,33 |
–0,332 |
–0,342 |
|
3 |
1,75 |
1,69 |
–1,21 |
–0,302 |
1,68 |
–1,20 |
–0,300 |
–0,318 |
|
4 |
2,00 |
1,41 |
|
|
1,39 |
–1,04 |
–0,260 |
–0,281 |
|
Задача 3. |
Решить методом Рунге-Кутта уравнение |
Решение.
;
;
;
.
По
формуле (8) имеем:
.
Вычисление
y2 = y(2,0) аналогично вычислению y1, а
результат его представлен в следующей таблице:
|
i |
x |
Y |
f(x,y) |
k1,2k2,2k3,k4 |
Dy |
|
0 |
1,00 1,25 1,25 1,50 |
2,70 2,36 2,34 2,00 |
–1,35 –1,42 –1,40 –1,33 |
–0,675 –1,42 –1,40 –0,665 |
–0,693 |
|
1 |
1,50 1,75 1,75 2,00 |
2,01 1,68 1,71 1,40 |
–1,34 –1,20 –1,22 –1,05 |
–0,670 –1,20 –1,22 –0,525 |
–0,602 |
|
2 |
2,00 |
1,41 |
|
|
|
|
Задача 4. |
Решить методом Адамса уравнение |
Решение. Примем в качестве разгонных
точек значения x0 = 1,00;
x1 = 1,25; x2 = 1,50; x3 = 1,75.
Используя в качестве значений yi и fi (i=0,1,2,3) значения, полученные в задаче
2, вычислим конечные разности Df2 = 0,13; D2f1 = 0,06; D3f0 = –0,07.
Теперь по формуле (9) при h = 0,25 и i =
4 получим y4 = 1,40.
Далее вычисляется f4 = –1,05 и конечные
разности Df4 = 0,16; D2f2 = 0,03; D3f1 = –0,03, а затем опять по формуле (9) при i=5
вычисляется y5=1,16 и т.д.
Весь
процесс решения удобно представить в виде следующей таблицы:
|
i |
xi |
yi |
fi |
Dfi |
D2fi |
D3fi |
|
0 1 2 3 4 5 |
1,00 1,25 1,50 1,75 2,00 2,25 |
2,70 2,35 2,01 1,69 1,40 1,16 |
–1,35 –1,41 –1,34 –1,21 –1,05 |
–0,6 0,07 0,13 0,16 |
0,13 0,06 0,03 |
–0,07 –0,03 |
Задача Ж.
Решить
уравнение y' = f(x,y) на интервале [x0,x*] с начальным условием y(x0)=y0,
принимая h = 0,1 ,
а) методом Эйлера;
б) методом Рунге-Кутта:
|
y' = x2+y; |
[0; 0,2]; |
y0 = 1. |
|
|
y' = 2x2+y; |
[0; 0,2]; |
y0 = 1. |
|
|
y' = 2x+y; |
[0; 0,2]; |
y0 = 1. |
|
|
y' = x+2y; |
[0; 0,2]; |
y0 = 1. |
|
|
y' = x2–y; |
[1; 1,2]; |
y0 = 0. |
|
|
y' = x–2y; |
[1; 1,2]; |
y0 = 0. |
|
|
y' = 2(x+y); |
[1; 1,2]; |
y0 = 0. |
|
|
y' = 2x–3y; |
[1; 1,2]; |
y0 = 0. |
|
|
y' = 2x+3y; |
[0; 0,2]; |
y0 = 1. |
|
|
y' = x+3y; |
[0; 0,2]; |
y0 = 1. |
|
|
y' = 4x+y; |
[0; 0,2]; |
y0 = 1. |
|
|
y' = 3x–y; |
[0; 0,2]; |
y0 = 1. |
|
|
y' = 4x–y; |
[0; 0,2]; |
y0 = 1. |
|
в) методом Адамса, вычислив y1 ,y2 ,y3 методом
Эйлера-Коши:
|
y' = 1+xy; |
[1; 1,5]; |
y0 = 1. |
|
y' = x+y; |
[0; 0,5]; |
y0 = 1. |
|
y' = 2x+y; |
[0; 0,5]; |
y0 = 1. |
|
y' = 3x+y; |
[0; 0,5]; |
y0 = 1. |
|
y' = 4x+y; |
[0; 0,5]; |
y0 = 1. |
|
|
[0; 0,5]; |
y0 = 1. |
|
y' = y–2x; |
[0; 0,5]; |
y0 = 1. |
|
y' = y–3x; |
[0; 0,5]; |
y0 = 1. |
|
y' = x+y2; |
[0; 0,5]; |
y0 = 1. |
|
y' = x–y2; |
[1; 1,5]; |
y0 = 0. |
|
y' = x–2y2; |
[1; 1,5]; |
y0 = 0. |
|
y' = 2x–y2; |
[1; 1,5]; |
y0 = 0. |