Nullstellensuche mit der Regula falsi
Programm zur Bestimmung der Nullstelle einer Funktion f im Intervall
mit der Regula falsi.
program RegulaFalsi(input, output);
{Nullstellensuche der Funktion f=cos(x)-x im Intervall [xu,xo]
mittels Regula Falsi}
var
xu, xo: double; {Intervallgrenzen}
eps: double; {Genauigkeit}
fehler: double;
xneu, xdum: double;
function f(x: double): double; begin
f := cos(x) - x
end; {function}
procedure init; begin
writeln('Exemplarische Darstellung einer Nullstellensuche mittels ');
writeln('Regula Falsi anhand der Funktion f=cosinus(x)-x');
writeln;
writeln('Geben Sie bitte die Grenzen des Intervalls an, in dem gesucht werden soll.');
writeln('Vorsicht, (cos(xunten)-xunten)*(cos(xoben)-xoben) muss negativ sein!');
readln(xu, xo);
while (f(xu)*f(xo)) > 0 do begin
writeln('Zwischen diesen Grenzen liegt keine Nullstelle. Versuchen Sie es noch einmal.');
readln(xu, xo)
end; {while}
writeln('Wie genau soll die Nullstelle bestimmt werden?');
readln(eps);
while eps <= 0 do begin
writeln('Nur positive Genauigkeiten machen Sinn. Versuchen Sie es noch einmal.');
readln(eps)
end; {while}
end; {init}
procedure result; begin
writeln('Die Nullstelle liegt bei ', xneu:1:7, '.')
end; {result}
begin {Regula Falsi}
init;
fehler := abs(xo - xu);
xneu := xu;
xdum := xo;
while fehler > eps do begin
xneu := xu - f(xu)*(xu - xo)/(f(xu) - f(xo));
fehler := abs(xneu - xdum);
if f(xneu) = 0.0 then begin
result;
halt
end; {if}
if f(xneu)*f(xu) < 0 then begin
xo := xneu
end else begin {if}
xu := xneu
end; {if}
xdum := xneu
end; {while}
result;
end. {Regula Falsi}