Федеральное государственное бюджетное учреждение высшего профессионального образования
«Владимирский государственный университет имени Александра
Григорьевича и Николая Григорьевича Столетовых»
Кафедра КТ РЭС
Лабораторная работа №9
Выполнил: ст. гр. РЭ-111
Фамилия И.О.: Курбатов А.В.
Проверил: доц.
Г. Владимир 2011г.
1.Цель работы: решение на ЭВМ системы обыкновенных дифференциальных уравне-
ний методом Рунге-Кутта.
2.
3. procedure TForm1.Button1Click(Sender: TObject);
var k1,k2,k3,k4:extended;
t:integer;
begin
Form1.Button4.Click;
Memo1.Clear;
Memo2.Clear;
memo1.Enabled:=true;
memo2.Enabled:=true;
try
x1:=StrToFloat(Edit1.Text);
xc:=StrToFloat(Edit1.Text);
x2:=StrToFloat(Edit2.Text);
y:=StrToFloat(Edit3.Text);
yc:=StrToFloat(Edit3.Text);
h:=StrToFloat(Edit4.Text); //***********************************
f:=Calculate(Edit5.Text);
line_arr:=round(abs((x2-x1)/h))+1;
SetLength(zx, line_arr);
SetLength(zy, line_arr);
t:=0;
while x1<x2
do
begin
zx[t]:=x1;
zy[t]:=y;
k1:=h*f;
if (y+(k1/2))=0 then begin showmessage h'); break;
end;
k2:=h*((y+(k1/2))-(2*(x1+(h/2)))/(y+(k1/2)));
if (y+(k2/2))=0 then begin showmessage ('Деление на 0!'+#13+' Измените h'); break;
end;
k3:=h*((y+(k2/2))-(2*(x1+(h/2)))/(y+(k2/2)));
if (y+k3)=0 then begin showmessage ('Деление на 0!'+#13+' Измените h');break;
|
|
end;
k4:=h*(y+k3-2*(x1+(h/2)))/(y+k3);
x1:=x1+h;
y:=y+(1/6)*(k1+2*k2+2*k3+k4);
t:=t+1;
Memo1.Lines.Add('x['+floattostr(t)+']='+floattostr(x1));
Memo2.Lines.Add('y['+floattostr(t)+']='+floattostr(y));
end;
Memo3.Lines.Add(''+floattostr(f));
except
on EConvertError do begin
MessageDlg('Некорректные значения переменных',mtError,[mbOk],0);
exit;
end;
end;
end;
4. Полученные результаты:
X | 0.0000001 | 0.00000002 | 0.00000003 | 0.00000004 | 0.00000005 | 0.00000006 | 0.00000007 | 0.00000009 | |
Y1 | 0.001 | 0.000995 | 0.0009801 | 0.0009556 | 0.0009216 | 0.0008786 | 0.0008271 | 0.0007675 | 0.0007007 |
Y2 | -995.842 | -1.977000 | -2933000 | -3855000 | -4735000 | -5563000 | -6331000 | -7032000 |