tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
|
|
@ -0,0 +1,51 @@
|
|||
type TFunc = function (x : Float) : Float;
|
||||
|
||||
function f(x : Float) : Float;
|
||||
begin
|
||||
Result := x*x*x-3.0*x*x +2.0*x;
|
||||
end;
|
||||
|
||||
const e = 1.0e-12;
|
||||
|
||||
function Secant(xA, xB : Float; f : TFunc) : Float;
|
||||
const
|
||||
limit = 50;
|
||||
var
|
||||
fA, fB : Float;
|
||||
d : Float;
|
||||
i : Integer;
|
||||
begin
|
||||
fA := f(xA);
|
||||
for i := 0 to limit do begin
|
||||
fB := f(xB);
|
||||
d := (xB-xA)/(fB-fA)*fB;
|
||||
if Abs(d) < e then
|
||||
Exit(xB);
|
||||
xA := xB;
|
||||
fA := fB;
|
||||
xB -= d;
|
||||
end;
|
||||
PrintLn(Format('Function is not converging near (%7.4f,%7.4f).', [xA, xB]));
|
||||
Result := -99.0;
|
||||
end;
|
||||
|
||||
const fstep = 1.0e-2;
|
||||
|
||||
var x := -1.032; // just so we use secant method
|
||||
var xx, value : Float;
|
||||
var s := f(x)>0.0;
|
||||
|
||||
while (x < 3.0) do begin
|
||||
value := f(x);
|
||||
if Abs(value)<e then begin
|
||||
PrintLn(Format("Root found at x= %12.9f", [x]));
|
||||
s := (f(x+0.0001)>0.0);
|
||||
end else if (value>0.0) <> s then begin
|
||||
xx := Secant(x-fstep, x, f);
|
||||
if xx <> -99.0 then // -99 meaning secand method failed
|
||||
PrintLn(Format('Root found at x = %12.9f', [xx]))
|
||||
else PrintLn(Format('Root found near x= %7.4f', [xx]));
|
||||
s := (f(x+0.0001)>0.0);
|
||||
end;
|
||||
x += fstep;
|
||||
end;
|
||||
Loading…
Add table
Add a link
Reference in a new issue