Numerische Verfahren als Hilfsmittel in der Mathematik

Die numerische Mathematik beschäftigt sich vorwiegend mit der näherungsweisen Lösung von Problemen, die analytisch/algorithmisch nicht oder nur schwer lösbar sind. Im folgenden sollen einige Verfahren der numerischen Mathematik vorgestellt werden.

Numerisches Lösen von Gleichungen

In der Mathematik bezeichnet als eine Gleichung zwei Terme die durch ein „=“ verbunden sind. Bei einer Gleichung mit einer unbekannten Variable „x“ könnte das so aussehen:

Bringt man nun beide Terme auf eine Seite der Gleichung, so kann man die Lösungen der Gleichung als Nullstellen einer Funktion auffassen.

Die im folgenden vorgestellten numerischen Verfahren können näherungsweise die Nullstellen beliebiger Funktionen berechnen, wenn bestimmte Anfangsbedingungen erfüllt sind.

Bisektionsverfahren

Das Bisektionsverfahren (oder auch Intervallschachtelung) beruht auf dem Zwischenwertsatz der Analysis:

Satz: Zwischen zwei Punkten und einer stetigen Funktion nimmt jeden Funktionswert zwischen und mindestens einmal an.

Wenn also negativ und positiv ist oder umgekehrt, so muss sich zwischen und eine Nullstelle befinden.

Um die Nullstelle zu finden halbiert man nun das Intervall immer weiter und nimmt das Teilintervall, bei dem die Funktionswerte an den Intervallgrenzen unterschiedliche Vorzeichen haben.

Das Verfahren hat auch einige Nachteile:

Es funktioniert nur, wenn sich im Intervall genau eine Nullstelle befindet.

Es ist nicht einfach günstige Startwerte zu finden.

Algorithmis als Wortvorschrift:

In der Wortvorschrift setzen wir für und für .

Eingabe Intervallgrenzen und mit Eingabe minimale Intervallgrenze Solange ist: Wenn sonst Wenn Abbruch der Schleife Ausgabe Nullstelle: m

Leider ist es in Python nur schwer möglich, den Funktionsterm bei der Programmausführung einzugeben. Deshalb wird im Quelltext definiert.

def f(x): return 4-x*x def bisektion(a,b,l): while abs(a-b) > l: m =(a+b)/2 if f(a) * f(m) < 0: b = m else: a = m if f(m) == 0.0: break return m

Aufgabe 14

Schreibe ein Programm (bisektion1.py) , welches nach Eingabe von , und die Nullstelle der Funktion ausgibt. Teste das Programm mit , , und . Finde mit dem GTR weitere Funktionen und geeignete Werten für a und b. Teste das Programm damit.

Aufgabe 15

Erweitere dein Programm (bisektion2.py) so, dass der Iterationsprozess als Wertetabelle dargestellt wird und die Anzahl der Iterationsschritte gezählt wird.

Aufgabe 16

Erweitere dein Programm (bisektion3.py) so, dass man in einem Menü wählen kann, zwischen der Ausgabe einer Wertetabelle und der Berechnung der Nullstelle. Mit Hilfe der Wertetabelle soll es möglich sein, günstige Werte für und zu finden.

Aufgabe 17

Berechne mit dem Programm aus Aufgabe 16 die Nullstellen der folgenden Funktionen:

(eine Nullstelle)

(vier Nullstellen)

(eine Nullstelle)

Hinweise:

Die Funktion nennt man natürliche Expnentialfunktion, die Funktion natürliche Logarithmusfunktion. In Python kann man die Funktion auf folgende Weise erzeugen:

import numpy def f(x): return numpy.exp(x) #e^x natürliche Exponentialfunktion def f(x): return numpy.log(x) #ln x natürliche Logarithmusfunktion

Schreibe alle Funktionen in die Lösungsdatei der Aufgabe 16 und lasse die unbenutzten Funktionen auskommentiert.

Regula Falsi

Man könnte nun annehmen das beim Bisektionsverfahren die Nullstelle näher bei der Intervallgrenze liegt, deren Absolutbetrag kleiner ist. Diese Idee macht man sich beim Verfahren Regula Falsi zu nutze.

Man legt eine Gerade durch Randpunkte des Intervalls. Die Stelle , an der die Gerade die x-Achse schneidet ist die neue obere bzw. untere Intervallgrenze. Berechnung von $x_f$: Gerade $g: y = mx + n$ durch $P_1(x_1,f(x_1))$ und $P_2(x_2,f(x_2))$: Einsetzen von :

Berechnung der Nullstelle $x_f$:

Algorithmis als Wortvorschrift:

In der Wortvorschrift setzen wir für und für .

Eingabe Intervallgrenzen und mit Eingabe minimale Intervallgrenze Solange ist: Wenn sonst Wenn Abbruch der Schleife Ausgabe Nullstelle:

Aufgabe 18

Löse die Aufgaben 14 bis 16 entsprechend für Regula Falsi.

Aufgabe 19

Vergleiche mit Hilfe der Programme bisektion02.py und regulafalsi02.py die Anzahl der Iterationschritte für entsprechende Funktionsbeispiele.

Aufgabe 20

Löse die Aufgabe 17 entsprechend mit Regula Falsi.

Näherungsweise Bestimmung der Quadratwurzel - Heron-Verfahren

Das Heron-Verfahren ist ein Verfahren zur näherungsweisen Berechnung der Quadratwurzel einer reellen Zahl. Es wird dem griechischen Mathematiker Heron von Alexandria zugeschrieben, aber wahrscheinlich war es bereits den alten Babyloniern bekannt. Man kann es deshalb auch babylonisches Wurzelziehen nennen.

Idee des Verfahrens

Angenommen, wir wollen die Quadratwurzel der Zahl 5 berechnen, können wir uns diese Wurzel als Kantenlänge eines Quadrats mit der Fläche vorstellen. Auch ein Rechteck mit den Kantenlängen und hat den Flächeninhalt 5.

Wir wollen nun die Kantenlängen des Rechtecks immer weiter anpassen, bis ein Quadrat mit dem Flächeninhalt 5 entsteht.

1. Schritt:

Zunächst berechnen wir eine neue Kantenlänge als arithmetisches Mittel der beiden anderen Kantenlängen:

Dann berechnen wir die zweite Kantenlänge, indem wir den Flächeninhalt (die Zahl von der wir die Wurzel ermitteln wollen durch die neue Kantenlänge dividieren:

Es entsteht das folgende Rechteck:

Dieses Vorgehen setzen wir jetzt immer weiter fort, bis die Seitenlängen des Rechtecks nahezu gleich sind:

2. Schritt:

3. Schritt:

4. Schritt:

Wie man sieht, hat man bereits nach vier Schritten einen guten Näherungswert für die Quadratwurzel von 5.

Aufgabe 21

Berechne mit dem vorgestellten Verfahren die Wurzel von 7 auf drei Nachkommastellen genau!

Aufgabe 22

Erstelle mit einem Tabellenkalkulationsprogramm eine Tabelle, die die Wurzel einer Zahl mit dem Heron-Verfahren berechnet.

Algorithmus des Heron-Verfahrens

Das vorgestellte Verfahren kann man als Algorithmus formulieren:

Gib die Zahl und die Genauigkeit ein! Weise x den Wert 1 und y den Wert der Zahl zu! Wiederhole, bis der Unterschied von x und y kleiner als die Genauigkeit ist: x ergibt sich als arithmetisches Mittel von x und y y ergibt sich als Quotient aus der Zahl und x Gib x aus!

Aufgabe 23

Erstelle das Struktogramm für den Algorithmus uns setze ihn in einem Pythonprogramm um!

Aufgabe 24

Erweitere dein Pythonprogramm so, dass die Zwischenschritte und die Anzahl der Zwischenschritte mit ausgegeben werden.

Näherungsweise Bestimmung von π mit Mitteln der Wahrscheinlichkeitsrechnung

Buffonsches Nadelproblem

Beim Buffonschen Nadelproblem, welches nach Comte de Buffon benannt ist, wird erklärt wie man einen Näherungswert für die Zahl π durch werfen von Nadeln (oder Streichhölzern) auf eine Fläche mit waagerechten Linien ermitteln kann. Der mathematische Hintergrund des Verfahrens wird hier beschrieben.

Der Versuch

Für den Versuch benötigt man viele Stäbchen (Nadeln, Steichhölzer) der Länge d. Zunächst zeichnet man auf ein Blatt Papier parallele Linien, die den Abstand 2d haben. Danach wirft man die Streichhölzer zufällig auf das Blatt Papier.

Nun zählt man die Stäbchen, die die Linie kreuzen. Der Quotient aus der Anzahl aller Stäbchen und der Anzahl der Stäbchen, die die Linie kreuzen ergibt einen Näherungswert für π.

Dieser Näherungswert wird umso besser, je häufiger der Versuch durchgeführt wird.

Aufgabe 25

Führe den Versuch mit einer Schachtel Streichhölzer mindestens zehnmal durch. Erfasse deine Messwerte in einem Tabellenkalkulationsprogramm!

Monte-Carlo-Methode

Leider lässt sich das Verfahren von Buffon nicht mit dem Computer simulieren, deshalb wollen wir noch ein weiteres Verfahren zu Bestimmung von π kennenlernen.

Wir betrachten ein Quadrat mit der Kantenlänge 2 und einen Kreis mit dem Radius 1 um den Koordinatenursprung:

Für den Flächeninhalt des Quadrats gilt:

Für den Flächeninhalt des Kreises gilt:

Setzt man die beiden Flächeninhalte ins Verhältnis, so ergibt sich:

Um nun einen Näherungswert für π zu ermitteln erzeugt man Punkte mit zufälligen Koordinaten, die im Bereich von -1 bis 1 liegen. Danach zählt man die Punkte die innerhalb des Kreises liegen und dividiert sie durch die Gesamtzahl der Punkte. So erhält man einen Näherungswert für , den man nur noch mit 4 multiplizieren muss.

Das folgende Pythonprogramm ermittelt nach Eingabe der Anzahl der Punkte einen Näherungswert für :

# Modul random importieren import random # Zufallszahlengenerator initialisieren random.seed() # erzeugt eine Koordinate im Bereich von -1 bis 1 def koordinate(): # random.random() erzeugt Zufallszahl im Bereich von 0 bis 1 test = random.random() if test > 0.5: return random.random() else: return random.random() while True: print() print("Monte Carlo") print("***********") print() p = int(input("Anzahl Punkte: ")) t = 0 for i in range(p): x = koordinate() y = koordinate() if (x**2+y**2)**(1/2) < 1: t += 1 print("Näherungswert für pi:",4*t/p) print() if input("Nochmal? (J/N) ") == "N": break