Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Метод Рунге-Кутта


Автор: Elena1712 5.12.2011, 08:02
Помогите пожалуйста , реализовать решение дифференциальных уравнений 1 порядка методом Рунге-Кутта 

Код

procedure TForm1.Button1Click(Sender: TObject);
var k1,k2,k3,k4:extended;
t:integer;
begin
Form1.Button4.Click;
Memo1.Clear;

Memo2.Clear;

memo1.Enabled:=true;

memo2.Enabled:=true;

//Проверка возможности ввода начальных условий и инициализация переменных

try

x1:=StrToFloat(Edit1.Text); //инициализация(ввод) x1(начало отрезка)

xc:=StrToFloat(Edit1.Text); //передача начальных условий (х0)в графический модуль

x2:=StrToFloat(Edit2.Text); //инициализация(ввод) x2(конец отрезка)

y:=StrToFloat(Edit3.Text); //инициализация(ввод) Y(x1)

yc:=StrToFloat(Edit3.Text); //передача начальных условий (Y0)в графический модуль

h:=StrToFloat(Edit4.Text); //инициализация(ввод) H -величины шага вычислений

//***********************************
f:=Calculate(Edit5.Text); // Определение каждого символа Парсер)

//определение размера массивов содержащего значения аргумента и функции

line_arr:=round(abs((x2-x1)/h))+1;

//Установка размера динамических массивов zx, zy

SetLength(zx, line_arr);

SetLength(zy, line_arr);

t:=0; // счётчик

while x1<x2

do

begin

zx[t]:=x1;

zy[t]:=y;

k1:=h*f;

if (y+(k1/2))=0 then begin showmessage ('Деление на 0!'+#13+' Измените h'); break;

end;

k2:=h*((y+(k1/2))-(2*(x1+(h/2)))/(y+(k1/2)));

if (y+(k2/2))=0 then begin showmessage ('Деление на 0!'+#13+' Измените h'); break;

end;

k3:=h*((y+(k2/2))-(2*(x1+(h/2)))/(y+(k2/2)));

if (y+k3)=0 then begin showmessage ('Деление на 0!'+#13+' Измените h');break;

end;

k4:=h*(y+k3-2*(x1+(h/2)))/(y+k3);

x1:=x1+h;

y:=y+(1/6)*(k1+2*k2+2*k3+k4);

t:=t+1;

Memo1.Lines.Add('x['+floattostr(t)+']='+floattostr(x1));

Memo2.Lines.Add('y['+floattostr(t)+']='+floattostr(y));

end;

Memo3.Lines.Add(''+floattostr(f));

except

on EConvertError do // невозможно преобразовать строку символов в число

begin

MessageDlg('Некорректные значения переменных',mtError,[mbOk],0);

exit;

end;

end;


end;



Заранее спасибо!

Автор: MetalFan 5.12.2011, 13:18
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: BestCoder1 6.12.2011, 00:19
Могу выполнить
icq: 588002847
email: [email protected]
skype: rfhfcerf

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)