Здравствуйте. Помогите пожалуйста. Нужно немного доделать и ,если не сложно, подписать что в какой строке делается. Сама разобраться не могу.
Теория, исходные данные и код в архиве. Заранее большое спасибо.
Код:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, Spin;
type
TForm1 = class(TForm)
Button1: TButton;
Chart1: TChart;
Chart2: TChart;
RadioGroup2: TRadioGroup;
Series1: TLineSeries;
Series2: TLineSeries;
SpinEdit1: TSpinEdit;
Timer1: TTimer;
Chart3: TChart;
Series3: TLineSeries;
CheckBox1: TCheckBox;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure RadioGroup2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const k=1;
var
Form1: TForm1;
mas,mas1:array of array of extended;
hxx,htt,resx,rest:array of extended;
hx,ht:extended;
n,t,nmin,tmin:integer;
implementation
{$R *.dfm}
function f(x1:extended):extended;
begin
result:=0;
end;
procedure obnul(t1,x1:integer);
var i:integer;
begin
setlength(mas,t1+1,x1+1);
hx:=1/x1;
ht:=10/t1;
for i:=0 to x1 do mas[0,i]:=1;
for i:=1 to t1 do mas[i,0]:=exp(10*i*ht);
for i:=1 to t1 do mas[i,x1]:=exp(i*ht);
end;
procedure Yavn;
var i,j:integer;
begin
form1.series2.Clear;
form1.series3.Clear;
if form1.CheckBox1.Checked then
begin
n:=20;
t:=20;
end else
begin;
n:=20;
t:=200;
end;
obnul(t,n);
setlength(mas1,t+1,n+1);
for i:=1 to t do
for j:=1 to n-1 do
mas[i,j]:=mas[i-1,j]+ht*(k*(mas[i-1,j-1]-2*mas[i-1,j]+mas[i-1,j+1])/sqr(hx)+f(j*hx));
for i:=0 to t do
for j:=0 to n do mas1[i,j]:=mas[i,j];
nmin:=n;
tmin:=t;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
series1.Clear;
series2.Clear;
series3.Clear;
yavn;
RadioGroup2Click(Sender);
for i:=1 to high(hxx) do Series2.AddXY(ln(hxx[i]),ln(abs((resx[i]-resx[i-1])/resx[i])));
for i:=1 to high(htt) do Series3.AddXY(ln(htt[i]),ln(abs((rest[i]-rest[i-1])/rest[i])));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
finalize(mas);
finalize(mas1);
finalize(hxx);
finalize(htt);
finalize(resx);
finalize(rest);
end;
procedure TForm1.RadioGroup2Click(Sender: TObject);
var i,r:integer;
begin
hx:=1/nmin;
ht:=10/tmin;
series1.Clear;
case RadioGroup2.ItemIndex of
0:begin
for i:=0 to nmin do
begin
series1.AddXY(i*hx,mas1[round(tmin/2),i]);
end;
end;
1:begin
for i:=0 to tmin do series1.AddXY(i*ht,mas1[i,round(n/2)]);
end;
2:begin
SpinEdit1.MaxValue:=tmin;
SpinEdit1.MinValue:=0;
timer1.Enabled:=true;
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if SpinEdit1.Value<SpinEdit1.MaxValue
then
begin
SpinEdit1.Value:=SpinEdit1.Value+1;
end
else
timer1.Enabled:=false;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
var i,r:integer;
begin
try
series1.Clear;
ht:=10/tmin;
r:=SpinEdit1.Value;
for i:=0 to nmin do series1.AddXY(i*ht,mas1[r,i]);
except showmessage('Неправильно задан слой');
end;
end;
end.