Розв’язання нелінійних диференційних рівнянь методом січних і половинного ділення

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

r: TObject);

function f(x:Extended):Extended;

var

i:integer;

begin

result:=v[5]*x*x*x*x*x+v[4]*x*x*x*x+v[3]*x*x*x+v[2]*x*x+v[1]*x+v[0];

end;

const

n = 5;

var

step, j, i,k :integer;

err:Extended;

x,y:Extended;

x_l, x_r, p,q, pp, qq,t: Extended;

b:array[0..n+1] of Extended;

a:array[0..n-1,0..n-1] of Extended;

begin

try

// Half-dividing method

x_l := 0; x_r := 1;

step := 0; y:=f(x_l);

err:=StrToFloat(LabeledEdit1.Text);

while abs(x_l-x_r)>err do begin

x:=(x_r+x_l)/2;

if f(x_l)*f(x)>0 then

x_l := x

else

x_r := x;

y:=f(x);

inc(step);

end;

with Memo1.Lines do begin

Clear;

Add(Метод половинного д_лення:);

Add( Допустима похибка: +FloatToStrF(err,ffFixed,8,10));

Add( Корен_: +FloatToStrF(x,ffFixed,8,10));

Add( К_льк_сть крок_в до розвязання: +IntToStr(step));

end;

// Truncs method

x := 1; x_l := 0;

step := 0;

while abs(x_l-x)>err do begin

x_l := x;

x := x - f(x)/((f(x+err)-f(x))/err);

inc(step);

end;

with Memo1.Lines do begin

Add(Метод с_чних:);

Add( Допустима похибка: +FloatToStrF(err,ffFixed,8,10));

Add( Корен_: +FloatToStrF(x,ffFixed,8,10));

Add( К_льк_сть крок_в до розвязання: +IntToStr(step));

end;

// Lins method

with Memo1.Lines do begin

Add(Метод Л_на:);

Add( Допустима похибка: +FloatToStrF(err,ffFixed,8,10));

end;

p := 1; q := 1; pp :=0; qq := 0;

while (abs(p-pp)>err) or (abs(q-qq)>err) do begin

pp:=p; qq:=q;

for i:=0 to n do

b[i]:=v[i];

for j:=0 to n-1 do

for i:=0 to n-1 do

a[i,j]:=0;

a[2,2]:=q;

a[1,1]:=q; a[2,1]:=p;

a[0,0]:=q; a[1,0]:=q; a[2,0]:=1;

a[0,3]:=p; a[1,3]:=1; a[3,3]:=1;

a[0,4]:=1; a[4,4]:=1;

b[0]:=v[2]; b[2]:=v[0];

for k:=0 to n-1 do begin

t:=a[k,k];

for j:=0 to n-1 do

a[k,j]:=a[k,j]/t;

b[k]:=b[k]/t;

for i:=0 to N-1 do

if (i0) then begin

for j:=0 to n-1 do

a[i,j]:=a[i,j]-a[i,k]*a[k,j];

b[i]:=b[i]/t-b[k];

end;

end;

p:=b[0]; q:=b[3];

inc(step);

end;

with Memo1.Lines do begin

Add(Корен_:+FloatToStrF(-0.88072880417729734356,ffFixed,8,10)+++FloatToStrF(1.8272344014937090258,ffFixed,8,10)+i);

Add(+FloatToStrF(-0.88072880417729734356,ffFixed,8,10)+-+FloatToStrF(1.8272344014937090258,ffFixed,8,10)+i);

Add(+FloatToStrF(1.3466523186783762535,ffFixed,8,10)+++FloatToStrF(1.3238929524834183243,ffFixed,8,10)+i);

Add(+FloatToStrF(1.3466523186783762535,ffFixed,8,10)+-+FloatToStrF(1.3238929524834183243,ffFixed,8,10)+i);

end;

except

on EConvertError do

Application.MessageBox(Неправильно введен_ дан_, Увага);

end;

end;

end.