Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 Численное решение диф.ур..doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
432.13 Кб
Скачать

Метод Рунге — Кутта второго порядка

Рассмотрим метод Рунге — Кутта второго порядка (метод Эйлера — Коши).

В этом методе величины у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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]