Всем доброго дня!
В общих словах последовательность действий я представляю так: Произвести линейный расчет методом эйлера. (это получилось)
Значения элементов массива при i=n, необходимо записать в переменную((строки98-99), и затем произвести расчет заново, используя значения этих переменных, и вывести решения на график.
Что-то у меня это не выходит. При повторном расчете решение на график не выводится
Что я делаю не так?
Код:
procedure TForm1.EilerSolve(Task: TKoshiTask; Solve: TSolve);
var
I,k: Integer;
h:real;
X1N,X2N:real;
begin
Solve.N := Task.N;
Solve.X1[0] :=Task.X10;
Solve.X2[0]:= Task.X20;
Solve.Y1[0]:=Task.Y10;//tASK. УСТАНОВИТЬ НАЧАЛЬНЫЕ ЗНАЧЕНИЯ
Solve.Y2[0] :=Task.Y20;
h:=(Task.t1-Task.t)/Solve.N;
for I := 1 to Task.N do
begin
Solve.X1[I]:=Solve.X1[I - 1]+h*solve.Y1[I - 1];
Solve.Y1[I]:=Solve.Y1[I - 1]+h*(-task.R11*solve.X1[I - 1]-Task.R12*Solve.X2[I - 1])/Task.Inr;
Solve.X2[I]:=Solve.X2[I - 1]+h*solve.Y2[I - 1];
Solve.Y2[I]:=Solve.Y2[I - 1]+h*(-task.R21*solve.X1[I - 1]-Task.R22*Solve.X2[I - 1])/Task.m;
task.t:=task.t+h;
{ ListBox1.Items.Add(FormatFloat('x1(0.###)= ',task.t)+FormatFloat('0.### ',Solve.X1[I]));
ListBox2.Items.Add(FormatFloat('x2(0.###)= ',task.t)+FormatFloat('0.###',Solve.X2[I]));
Series1.AddXY(task.t,Solve.X1[I]);
Series2.AddXY(task.t,Solve.X2[I]);}
end;
Solve.X1[task.N]:=X1N;
Solve.X2[task.N]:=X2N ;
for k := 1 to Task.N do
Solve.X1[k]:=Solve.X1[k - 1]+h*solve.Y1[k - 1];
Solve.Y1[k]:=Solve.Y1[k - 1]+h*(- ((-task.R11/20*X1N)*sqr(Solve.X1[k-1])
+task.R11*Solve.X1[k-1])- ((-task.R12/20*X2N)*sqr(Solve.X2[k]) +task.R12*Solve.X2[k]))/Task.Inr;
Solve.X2[k]:=Solve.X2[k - 1]+h*solve.Y2[k - 1];
Solve.Y2[k]:=Solve.Y2[k - 1]+h*(- ((-task.R21/20*X1N)*sqr(Solve.X1[k-1])
+task.R21*Solve.X1[k-1])- ((-task.R22/20*X2N)*sqr(Solve.X2[k]) +task.R22*Solve.X2[k]))/Task.m;
task.t:=task.t+h;
ListBox1.Items.Add(FormatFloat('x1(0.##)= ',task.t)+FormatFloat('0.## ',Solve.X1[k]));
ListBox2.Items.Add(FormatFloat('x2(0.##)= ',task.t)+FormatFloat('0.##',Solve.X2[k]));
Series1.AddXY(task.t,Solve.X1[k]);
Series2.AddXY(task.t,Solve.X2[k]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FTask.N := StrToInt(self.EditN.Text);
FTask.R11:=StrToInt(self.Edit1.Text);
FTask.R12:=StrToInt(self.Edit2.Text);
FTask.R21:=StrToInt(self.Edit3.Text);
FTask.R22:=StrToInt(self.Edit4.Text);
FTask.t:=StrToInt(self.Edit5.Text);
FTask.t1:=StrToInt(self.Edit6.Text);
FTask.Inr:=StrToInt(self.Edit7.Text);
FTask.m:=StrToInt(self.Edit8.Text);
FTask.X10:=StrToInt(self.Edit9.Text);
FTask.X20:=StrToInt(self.Edit10.Text);
FTask.Y10:=StrToInt(self.Edit11.Text);
FTask.Y20:=StrToInt(self.Edit12.Text);
Series1.Clear; ListBox1.Clear;
Series2.Clear; ListBox2.Clear;
EilerSolve (FTask,FSolve);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FSolve := TSolve.Create;
FTask := TKoshiTask.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FSolve.Destroy;
FTask.Destroy;
end;
end.
На всякий случай прикладываю исходники
Первое и главное - не читаете общие правила форума и правила разделов, куда пишете:
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор
П.7 правил - и тема улетает к студентам.