unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;
type
TForm1 = class(TForm)
Chart1: TChart;
Series1: TLineSeries;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
y0, x0, a, b, h: extended;
implementation
{$R *.dfm}
function fxy(x,y: extended): extended;
begin
fxy:=-(2*x+ y)/(1+cos(y));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x,y : extended;
k1,x1,y1,k2,y2,
k3,y3,x2,k4,dy :extended;
begin
y0 := StrToFloat(Edit1.Text);
x0 := 0;
a := StrToFloat(Edit2.Text);
b := StrToFloat(Edit3.Text);
h := StrToFloat(Edit4.Text);
memo1.Lines.Add('Метод Рунге-Кутта');
x:=x0;
y:=y0;
memo1.Lines.Add(' x='+floattostr(x)+'; y='+floattostr(y));
Chart1.SeriesList[0].AddXY(x,y,'',clblue);
while x<=b do
begin
k1:=h*fxy(x,y);
x1:=x+h/2;
y1:=y+k1/2;
k2:=h*fxy(x1,y1);
y2:=y+k2/2;
k3:=h*fxy(x1,y2);
y3:=y+k3;
x2:=x+h;
k4:=h*fxy(x2,y3);
dy:=(k1+2*k2+2*k3+k4)/6;
y:=y+dy;
x:=x+h;
memo1.Lines.Add(' x='+floattostr(x)+'; y='+floattostr(y));
Chart1.SeriesList[0].AddXY(x,y,'',clblack);
end;