пятница, 14 декабря 2012 г.

[Информатика]Численные методы

Найти корень уравнения f(x)=0 на отрезке [a,b] с точностью 0.001.

Метод половинного деления

uses crt;
function F(x:real):real;
begin
F:=sqrt(x)-x;
end;

var a,b,c,x,e:real;
begin
clrscr;
writeln('sqrt(x)-x');
writeln('функция имеет 1 корень на интервале (0,5;2)');
a:=0.5;
b:=2;
e:=0.001;
repeat
c:=(a+b)/2;
if F(a)*F(c)<=0 then b:=c
else a:=c;
until b-a<e;
x:=(a+b)/2;
write('x=',x:0:4);
readln
end.

Метод хорд

uses crt;

function F(x: real): real;
begin
F := sqrt(x)-x;
end;

function Chord(a, b, e: real; var i: integer): real; { Метод хорд }
var
x, x1: real;
begin
i := 0;
repeat
x := (F(b) * a - F(a) * b) / (F(b) - F(a));
if F(a) * F(x) > 0 then
a := x
else
b := x;
i := i + 1;
x1 := (F(b) * a - F(a) * b) / (F(b) - F(a));
until abs(x1 - x) < e;
Chord := x;
end;

var
a, b, eps, x: real;
i: integer;

begin
a := 0.5;
b := 2;
eps := 0.001;
x := Chord(a, b, eps, i);
writeln('X chord=', x:0:5);
readln;

end.