Розв’язання нелінійних диференційних рівнянь методом січних і половинного ділення
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
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.