dh-Materialien
Maple   
Übungen

Intervallhalbierung

> restart;

Es soll eine Nullstelle der folgenden Funktion bestimmt werden:

> f:= x -> x^3 + x^2 - 2*x - 1;  

> plot(f(x), x = -3..2.5,
    size =[350, 350],
    font = [Courier, 10],
    labelfont = [Courier, 12, italic],
    labels = ["x", "f(x)"]);

Halbierung des Intervalls [l, r], und zwar so, dass die Vorzeichen von f(l) und f(m)  bzw. von f(m) und f(r) verschieden voneinander sind:

> IH:= proc (l, r)
  local m;
  m:= (l + r)/2;
  if signum(f(l))*signum(f(m)) = -1 then
    RETURN ([l, m])
  else
    RETURN ([m, r]);
  fi:
end:

Definition des Startintervalls:

> J[neu]:= [-2.0, -1]:

Sukzessive Intervallhalbierung liefert eine Intervallschachtelung:

> while ((J[neu][2] - J[neu][1]) > 10E-7) do
  J[alt]:= J[neu]:
  J[neu]:= IH(J[alt][1], J[alt][2]):
  printf("%s%f%s%f%s\n", "[", J[neu][1], ", ", J[neu][2], "]");
od:
   
  [-2.000000, -1.500000]
  [-2.000000, -1.750000]
  [-1.875000, -1.750000]
  [-1.812500, -1.750000]
  [-1.812500, -1.781250]
  [-1.812500, -1.796875]
  [-1.804688, -1.796875]
  [-1.804688, -1.800781]
  [-1.802734, -1.800781]
  [-1.802734, -1.801758]
  [-1.802246, -1.801758]
  [-1.802002, -1.801758]
  [-1.802002, -1.801880]
  [-1.801941, -1.801880]
  [-1.801941, -1.801910]
  [-1.801941, -1.801926]
  [-1.801941, -1.801933]
  [-1.801941, -1.801937]
  [-1.801939, -1.801937]
  [-1.801938, -1.801937]