Nullstellensuche durch Intervallschachtelung
Programm zur Bestimmung der Nullstelle einer Funktion f im Intervall
durch Intervallschachtelung.
program Intervallschachtelung(input, output);
{Nullstellensuche der Funktion f=cos(x)-x im Intervall [xu, xo] durch
Intervallschachtelung}
var
xu, xo: double; {Intervallgrenzen}
eps: double; {Genauigkeit}
fehler: double;
xneu: double;
function f(x: double): double; begin
f := cos(x) - x
end; {f}
procedure init; begin
writeln('Exemplarische Darstellung einer Nullstellensuche durch ');
writeln('Intervallschachtelung 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 {Intervallschachtelung}
init;
fehler := abs(xo - xu)/2;
while fehler > eps do begin
xneu := (xo + xu)/2;
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;
fehler := 0.5*fehler
end {if}
end; {while}
xneu := (xo + xu)/2.0;
result
end. {Intervallschachtelung}