Показать сообщение отдельно
Старый 31.03.2013, 20:55   #1 (permalink)
Natalia91169
Новичок
 
Регистрация: 05.12.2012
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Метод Рунге-Кутта 2-го порядка, Паскаль

Есть решение задачи Коши для обыкновенного дифференциального уравнения 1-го порядка с помощью метода Рунге-Кутты 4-го порядка

А что надо изменить, если нужен рунге-кутта 2 порядка?

Помогите пожалуйста.

Program R_K;
Uses crt;
Var
a, b, x0, y0, x1, y1, x2, y2, eps, p, u01, u02, u11, u2, h, g, m, k1, k2, k3, k4: real;
i: integer;
Function f(x,y:real):real;
begin
f:=y/x;
end;
Function u1(x,y,h:real):real;
begin
k1:=f(x,y);
k2:=f(x+h/2,y+h*k1/2);
k3:=f(x+h/2,y+h*k2/2);
k4:=f(x+h,y+h*k3);
u1:=u01+ h*(k1+2*k2+2*k3+k4)/6;
end;
Begin
ClrScr;
writeln(' Vvedite a,b ');
readln(x0, b);
writeln('Vvedite y0');
readln(y0);
writeln('Vvedite h, E ');
readln(h, eps);
writeln('X':10,'Y':17,'h':19,'P':20);
u01:=y0;
u02:=y0;
x1:=x0;
x2:=x0;
y1:=y0;
y2:=y0;
While x2<b do
begin
u11:=u1(x1,y1,h);
u01:=u11;
y1:=u11;
x1:=x1+h;
m:=h/2;
u2:=u1(x2,y2,m);
u02:=u2;
y2:=u2;
x2:=x2+m;
u2:=u1(x2,y2,m);
u02:=u2;
g:=y2;
y2:=u2;
x2:=x2+m;
P:=abs(u11-u2);
if (p>eps) then
h:=h/2;
end;
x1:=x0;
u11:=0;
u01:=y0;
y1:=y0;
u02:=y0;
y2:=y0;
x2:=x0;
u2:=0;
While x1<b do
begin
u11:=u1(x1,y1,h);
u01:=u11;
y1:=u11;
m:=h/2;
u2:=u1(x2,y2,m);
u02:=u2;
y2:=u2;
x2:=x2+m;
u2:=u1(x2,y2,m);
u02:=u2;
y2:=u2;
x2:=x2+m;
P:=abs(u11-u2);
writeln((x1):15:13,' ',u11:15:13,' ',h:15:13,' ',p:15:13);
x1:=x1+h;
end;
readln;
End.
Natalia91169 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070