Die Webseiten der Fachschaft Informatik am ERG Saalfeld


Intervallhalbierungsverfahren

Es wird eine Lösung der Gleichung  0 = x^5 - 5x^4 - 13x^3 + 65x^2 - 36x - 170  mit dem Intervallhalbierungsverfahren gesucht
 

Algorithmus

Wir wählen uns ein Intervall, wobei eine Grenze einen negativen y-Wert und die andere Grenze einen positiven y-Wert hat. Hier wird gewählt x1 = -10 (y1 auf jeden Fall negativ) und x2 = 10 (y2 positiv). Das Intervall wird halbiert und zu diesem x3 wird der Funktionswert y3 gebildet. Ist y3 negativ, dann können wir statt y1 nun y3 und damit auch statt x1 nun x3 nehmen. Ist y3 positiv, dann können wir statt x2 nun x3 nehmen. Dadurch hat sich das Intervall halbiert. Das Verfahren wird nun solange fortgesetzt, bis die gewünschte Genauigkeit erreicht ist (hier 3 Stellen nach dem Komma).
 

Programm

#!/usr/bin/perl
use strict;
use warnings;

# Variablen
my ($x1, $x2, $x3, $y1, $y2, $y3);

# die "Startwerte" x1 und x2 initialisieren
$x1 = -10;
$x2 = 10;

# solange die Differenz groesser ist als 0.001
while ($x2 - $x1 > 0.001) {

  # berechne y1 und y2
  $y1 = $x1**5 - 5 * $x1**4 - 13 * $x1**3 + 65 * $x1**2 + 36 * $x1 - 170;
  $y2 = $x2**5 - 5 * $x2**4 - 13 * $x2**3 + 65 * $x2**2 + 36 * $x2 - 170;

  # unser x3 ist der Mittelwert (deswegen ja Intervallhalbierungsverfahren)
  $x3 = ($x1 + $x2) / 2;

  # wir bestimmen dazu y3
  $y3 = $x3**5 - 5 * $x3**4 - 13 * $x3**3 + 65 * $x3**2 + 36 * $x3 - 170;

  # bei uns ist der y-Wert auf der rechten Grenze des Intervalls positiv
  # wenn das neue y < 0 ist
  if ($y3 < 0 ) {
    # dann ersetzen wir die linke Grenze
    $x1 = $x3;
  }
  # sonst
  else {
    # ersetzen wir die rechte Grenze
    $x2 = $x3;
  }
}

# wir geben die linke Grenze aus
print $x1, "\n";

__END__

 

Der Aufruf sah bei mir so aus:

 

Aufgaben

  1. Bringen Sie das Programm zum Laufen.
  2. Zeichnen Sie zu diesem Programm ein Struktogramm.
  3. Ergänzen Sie das Programm um eine Überschrift (unterstrichen, danach Leerzeile).
  4. Geben Sie für den Nutzer auch die Gleichung aus (einfach als String ausgeben).
  5. Geben Sie die beiden Grenzen des Intervalls aus, indem das Ergebnis liegt (x1 = ..., x2 = ...).
  6. Machen Sie die Ausgabe als Nullstelle deutlich (Nullstelle: ...).
  7. Ändern Sie das Programm so, dass die Genauigkeit auf 7 Stellen nach dem Komma erhöht wird.
  8. Schreiben Sie ein (kleines) Programm, welches eine Wertetabelle für diese Funktion im Intervall von -10 bis 10 in Einer-Schritten ausgibt.
  9. Die Funktion hat 5 Nullstellen, alle im Intervall von -10 bis 10. Geben Sie für jede dieser Nullstellen ein spezielles Intervall an.
  10. Ermitteln Sie alle 5 Nullstellen mit Hilfe dieses Programms.
  11. Zum Vergleich werden die ermittelten Nullstellen von 2 Schülern angesagt:
    • Schüler 1:  -3.040039,  -1.000976,  1.851806, ...
    • Schüler 2:  -3.040039,  -1.930664,  1.851806, ...
    Erklären Sie, warum die Lösung von Schüler 1 falsch ist bzw. die von Schüler 2 richtig.
  12. Der Schüler 1 glaubt Ihnen nicht. Erstellen Sie zum Nachweis eine Wertetabelle für das Intervall -2 bis -1 in 0.1er Schritten.
  13. Ändern Sie das gegebene Programm so ab, dass die beiden Grenzen des Intervalls als Parameter übergeben werden.
  14. Ändern Sie das Programm so ab, dass das Programm selbst erkennt, ob die linke Intervallgrenze der negative bzw. positive y-Wert ist und entsprechend zuordnet...

 

zurück


© ERG Saalfeld   -   Hans-Dietrich Kirmse   10.01.2015