Сам метод Эйлера у меня есть, я понимаю как прога работает, потому что сама ее делала. Но что значит с краевой задачей? У меня по условию есть хим. реакция:А превращается в Р которое превращается в S.Все эти реакции обратимые. Программа считает концентрацию каждого из веществ в задаваемые промежутки времени. А с краевой задачей это как? Задавать от балды конц. Р и считать все для начального промежутка времени, а потом сверяться, угадали мы конц или нет. Если нет,то осуществлять пересчет. Если не правильно думаю,поправьте пожалуйста.
unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Math, TeEngine, Series, ExtCtrls, TeeProcs,
Chart;
type
TForm11 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
StringGrid1: TStringGrid;
Label9: TLabel;
Edit9: TEdit;
Label10: TLabel;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Button1: TButton;
Edit13: TEdit;
Label14: TLabel;
Chart1: TChart;
Series1: TLineSeries;
Button2: TButton;
Series2: TLineSeries;
Series3: TLineSeries;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form11: TForm11;
a,s,p:real;
implementation
{$R *.dfm}
function RSA(ca,cp:real):real;
Var k1,k3,n1,n3:real;
begin
k1:=strtofloat(form11.Edit1.text);
k3:=strtofloat(form11.edit3.text);
n1:=strtofloat(form11.Edit5.text);
result:=-k1*power(ca,n1)+k3*power(cp,n3);
end;
function RSS(cp,cs:real):real;
Var k2,n2,k4,n4:real;
begin
k2:=strtofloat(form11.Edit2.text);
n2:=strtofloat(form11.Edit6.text);
k4:=strtofloat(form11.Edit4.text);
n4:=strtofloat(form11.Edit8.text);
result:=k2*power(cp,n2)-k4*power(cs,n4);
end;
function RSP(ca,cp,cs:real):real;
Var k1,n1,k3,n3,k4,n4,k2,n2:real;
begin
k1:=strtofloat(form11.Edit1.text);
n1:=strtofloat(form11.Edit5.text);
k3:=strtofloat(form11.Edit3.text);
n3:=strtofloat(form11.Edit7.text);
k4:=strtofloat(form11.Edit4.text);
n4:=strtofloat(form11.Edit8.text);
k2:=strtofloat(form11.Edit2.text);
n2:=strtofloat(form11.Edit6.text);
result:=k1*power(ca,n1)-k3*power(cp,n3)-k2*power(cp,n2)+k4*power(cs,n4);
end;
procedure TForm11.Button1Click(Sender: TObject);
Var ss,a1,s1,dt,endt,t:real;
i:integer;
begin
a:=strtofloat(edit10.Text);
p:=strtofloat(edit11.Text);
s:=strtofloat(edit12.Text);
dt:=strtofloat(edit9.Text);
endt:=strtofloat(edit13.Text);
ss:=a+p+s;
i:=0;
while t<endt do
begin
t:=t+dt;
a1:=a+dt*RSA(a,p);
s1:=s+dt*RSS(p,s);
p:=ss-a1-s1;
a:=a1;
s:=s1;
Inc(i);
Stringgrid1.FixedCols:=0;
Stringgrid1.ColCount:=4;
Stringgrid1.RowCount:=100;
Stringgrid1.Cells[0,0]:='t';
Stringgrid1.Cells[1,0]:='a';
Stringgrid1.Cells[2,0]:='p';
Stringgrid1.Cells[3,0]:='s';
Stringgrid1.Cells[0,i]:=floattostr(t);
Stringgrid1.Cells[1,i]:=floattostr(a);
Stringgrid1.Cells[2,i]:=floattostr(p);
Stringgrid1.Cells[3,i]:=floattostr(s);
Chart1.SeriesList[0].AddXY(t,a,'',clblue);
Chart1.SeriesList[1].AddXY(t,p,'',clgreen);
Chart1.SeriesList[2].AddXY(t,s,'',clyellow);
end;
end;
procedure TForm11.Button2Click(Sender: TObject);
begin
Chart1.SeriesList[0].Clear;
Chart1.SeriesList[1].Clear;
Chart1.SeriesList[2].Clear;
end;
end.