
Метод Рунге — Кутта второго порядка
Рассмотрим метод Рунге — Кутта второго порядка (метод Эйлера — Коши).
В этом методе величины уi+1 вычисляются по следующим формулам (рис. 7):
yi+1 = yi+ yi; yi = yi1 + yi2,
yi1
=
f(xi,
yi),
yi2
=
f(xi
+ h, yi
+ hf(xi,
yi).
Тогда
yi+1
= yi
+ h
Обозначим
Рис. 7. Метод Эйлера — Коши
тогда
yi+1
= y1
+ h
Геометрически это означает, что определяется направление интегральной кривой в исходной точке (хi уi) и во вспомогательной точке (хi+1, у*i+1), а в качестве окончательного выберем среднее из этих направлений.
Пример 4. Решить методом Эйлера дифференциальное уравнение y'=cosy+3x методом Рунге — Кутта второго порядка (начальное условие у(0)= 1,3 на отрезке [0; 1]).
Программа_____________________________________________________
Program Rumge; {Метод Рунге — Кутта 2-го порядка}
Uses Crt;
var z,x,y,a,b,h:real;
function f(x,y:real):real;
begin
f:= cos(y)+3*x;
end;
begin
ClrScr;
writeln('Введите у, a, b, h'); readln(y,a,b,h); x:=a;
repeat
writeln(x:0:3,' *,y:0:3); z:=y+h*y*(l-x);
y:=y+h*(f(x,y)+f(x+h,z))/2; x:=x+h;
until x>b+0.1;
readkey;
end.
Метод Рунге — Кутта 4-го порядка
В вычислительной практике наиболее часто используется метод Рунге — Кутта четвертого порядка. В этом методе величины ум вычисляются по следующим формулам:
yi+1 = yi+ yi;
yi = h(k1 + 2k2 +2k3 + k4)/6, где i = 0,1,…;
k1 =f(xi, yi);
k2 = f(xi + h/2, yi +hk1/2);
k3 = f(xi + h/2, yi +hk2/2);
k4 = f(xi + h, yi +hk3);
Пример 5. Пусть дано дифференциальное уравнение у' = у - х с начальным условием у(0) =1,5.
Найти с точностью
= 0,01 решение этого уравнения методом
Рунге — Кутта при х=
1,5.
Решение
Пусть h = 0,25.
Весь отрезок интегрирования [0; 1,5] разобьем на шесть частей точками:
х0 = 0, х4 = 1;
x1 = 0,25; х5 = 1,25;
х2 = 0,5; х6=1,5.
х3 = 0,75;
Из начальных условий имеем х0 = 0; у0 = 1,5.
Найдем первое приближение
y1
= y0+
y0,
где
y0
=
(k1
+2k2
+2k3
+ k4).
Используя формулы метода Рунге — Кутта, получаем
k1 =(y0 – x0)h = 1,5 * 0,25 = 0,375;
k2
= [(y0
+
)
– (x0
+
)]h
= [(1,5 + 0,187) – 0,125] * 0,25 = 0,39;
k3
= [(y0
+
)
– (x0
+
)]h
= 0,392;
k4 = [(y0 +k3) – (x0 +h)]h = 0,41.
Следовательно
y0 = (0,375 + 2 * 0,39 + 2 * 0,392 + 0,41) = 0,392.
Отсюда
y1 = 1,5 + 0,392 =1,892 и т. д.
Пример 6. Проинтегрировать дифференциальное уравнение
методом Рунге — Кутта на отрезке [0; 2] и выдать на печать значение функции в каждой двадцатой точке. В качестве шага интегрирования можно взять h= 0,005, в качестве начальных условий — у(0) = 1.
Программа_____________________________________________________
F(X,Y) — подпрограмма-функция (правая часть уравнения)
Program Dif;
Uses Crt;
Const H= 0.005;
Var X,Y:Real;
Fl,F2,F3,F4:real;
I,N:lnteger;
Begin
ClrScr;
X:=0; Y:=l; N:=20;
Forl:=l TON DO
Begin X:=X+H;
F1:=H*F(X,Y);
F2:=H*F(X+H/2.,Y+Fl/2.);
F3:=H*F(X+H/2.,Y+F2/2.);
F4:=H*F(X+H,Y+F3);
Y:=Y+( F1 +2* F2+2* F3+F4)/6;
End;
Writeln('Y=' Y:8:3)
Readkey;
End.
Замечание. Метод Рунге—Кутта для решения дифференциального уравнения вида
сводится к последовательному вычислению следующих равенств
xi+1 = xi+h;
k1 =hF(xi, yi);
k2 = hF(xi + h/2, yi +hk1/2);
k3 = hF(xi + h/2, yi +hk2/2);
k4 = hF(xi + h, yi +hk3);
yi+1 =yi +1/6(k1 + 2k2 +2k3 + k4), где i = 1,…n.
Пример 7. Решить дифференциальное уравнение
у(0) = 1,3 на отрезке [0; 1] методом Рунге — Кутта 4-го порядка.
Программа________________________________________________
Program Runge; {Метод Рунге - Кутта 4-го порядка}
var kl ,k2,k3,k4,x,y,a,b,h,d:real;
function f(x,y:real):real;
begin
f:= cos(y)+3*x;
end;
begin
writeln('Введите у, a, b, h'); readln(y,a,b,h);
x:=a;
repeat
writeln(x:0:3,' ',y:0:3);
kl:=f(x,y);
k2:=f(x+h/2,y+h*kl/2);
k3:=f(x+h/2,y+h*k2/2);
k4:=f(x+h,y+h*k3);
d:=(kl+2*k2+2*k3+k4)/6;
y:=y+d; x:—x+h;
until x>b+0.1;
readln;
end.