Лабы / 5
.docxЗадание:
Вариант |
Метод |
Нач. условия |
Шаг () или кол-во узлов (); конечное значение аргумента () |
Уравнение |
Точность решения |
3 |
Рунге-Кутта |
___ |
Код:
var
Form7: TForm7;
k1,k2,k3,k4,y0,y,h,x,x0,xk:real;
f1:textfile;
implementation
{$R *.dfm}
Function f(x,y:real):real;
begin
//xy'+2x*x-e^(-x)=0
f:=-2*x+1/x*exp(-x); //f=y' диф
//f:=x;
end;
Procedure proizv(var x,y:real; h:real);
var
k1,k2,k3,k4:real;
begin
k1:=f(x,y);
k2:=f(x+(h/2),y+k1*(h/2));
k3:=f(x+(h/2),y+k2*(h/2));
k4:=f(x+h,y+k3*h);
y:=y+(h/6)*(k1+2*(k2+k3)+k4);
x:=x+h;
end;
Procedure TForm7.Button1Click(Sender: TObject);
Procedure graf(x,y:real);
begin
series1.addxy(x,y);
end;
begin
assignfile(f1,'F:\a.txt');
rewrite(f1);
//x0:=0; //на 0 не делится
//y0:=1;
//xk:=1;
x0:=1;
y0:=1;
xk:=2;
h:=0.1;
y:=y0;
x:=x0;
memo1.lines.add('x y');
writeln(f1,'x y');;
graf(x,y);
writeln(f1,floattostrF(x,ffFixed,5,6):8,' | ',floattostrF(y,ffFixed,5,6):8);
memo1.lines.add(floattostrF(x,ffFixed,1,6)+' | '+(floattostrF(y,ffFixed,1,6)));
while abs(xk-x)>0.001 do begin
proizv(x,y,h);
writeln(f1,floattostrF(x,ffFixed,5,6):8,' | ',floattostrF(y,ffFixed,5,6):8);
memo1.lines.add(floattostrF(x,ffFixed,5,6)+' | '+(floattostrF(y,ffFixed,5,6)));
graf(x,y);
end;
closefile(f1);
end;
end.
Результат:
Блок схема:
Начало Ввод
Вывод
graf(x,y);
abs(xk-x)>0.001 proizv(x,y,h);
graf(x,y);
Вывод
Конец
Procedure proizv(var x,y:real; h:real);
Конец
Function f(x,y:real):real;
f:=-2*x+1/x*exp(-x); Конец
Procedure graf(x,y:real);
series1.addxy(x,y);
Конец