Ing Mathematik: Numerische Berechnung bestimmter Integrale
Gesucht ist . Mittels Quadraturverfahren kann man dieses Integral numerisch lösen.
Rechteckformel
[Bearbeiten]Die Fläche unter der Kurve zwischen ist näherungsweise das rot eingefärbte Rechteck. Als Formel geschrieben:
.
Das ist nicht sehr genau. Besser ist es, das Rechteck in mehrere kleinere Rechtecke aufzusplitten (= summierte Rechteckregel).
.
Python-Programm für eine Parabel:
import numpy as np def funktion(x): return x**2 def rechteckregel(a, b, n): I = 0. h = (b-a) / n for i in np.arange(0, n): xi = a + i*h I += h * funktion(xi + h/2) return I A1 = rechteckregel(-1, 1, 10) A2 = rechteckregel(-1, 1, 100) A3 = rechteckregel(-1, 1, 1000) print("A1 = ", A1) print("A2 = ", A2) print("A3 = ", A3)
Ausgabe:
A1 = 0.6600000000000001 A2 = 0.6665999999999999 A3 = 0.6666659999999996
Man sieht, dass die Folge nur sehr langsam konvergiert. Es sind für die praktsche Anwendung bessere Verfahren notwendig.
Python-Programm für die eingefärbte Fläche unter der Parabel:
import numpy as np import matplotlib.pyplot as plt x = np.arange(-1., 1.01, 0.01) y = x**2 plt.plot(x, y, color='black') plt.fill_between(x, y, where=y>=0) plt.show()
Ausgabe:
Siehe auch Knorrenschild: Seite 128f
Trapezformel
[Bearbeiten]Wiederum wird die rot eingefärbte Fläche berechnet.
Es sei wiederum mit
.
Python-Programm für eine Parabel:
import numpy as np def funktion(x): return x**2 def trapezregel(a, b, n): h = (b-a) / n I = 0. for i in np.arange(1, n): xi = a + i*h I += h * funktion(xi) I += h * (funktion(a)+ funktion(b))/2. return I A1 = trapezregel(-1, 1, 1) A2 = trapezregel(-1, 1, 100) A3 = trapezregel(-1, 1, 1000) print("A1 = ", A1) print("A2 = ", A2) print("A3 = ", A3)
Ausgabe:
A1 = 2.0 A2 = 0.6668000000000002 A3 = 0.6666679999999993
Siehe auch Knorrenschild: Seite 127ff, Hanke-Bourgeois: Seite 317ff und Burg, Haf, Wille, Meister: Seite 331f
Simpsonformel
[Bearbeiten]Bei der Verwendung der Simpson-Regel muss die Funktion im gegebenen Intervall vierfach stetig differenzierbar sein. Die Funktion wird durch ein Polynom zweiter Ordnung angenähert.
Es ergibt sich folgende Formel:
.
mit wie oben (siehe z.B. Rechteck- oder Trapez-Verfahren). sei gerade.
Python-Programm:
import numpy as np def funktion(x): return x**2 def simpson(a, b, n): if n%2 == 0: h = (b-a) / n I = 0. for i in np.arange(0, n+1): xi = a + i*h if i % 2 == 0: if i == 0 or i == n: I += h / 3. * funktion(xi) else: I += h / 3. * 2 * funktion(xi) else: I += h / 3. * 4 * funktion(xi) return I else: print ("Abbruch: n nicht gerade!") return A1 = simpson(-1, 1, 2) A2 = simpson(-1, 1, 10) A3 = simpson(-1, 1, 100) print("A1 = ", A1) print("A2 = ", A2) print("A3 = ", A3)
Ausgabe:
A1 = 0.6666666666666666 A2 = 0.6666666666666667 A3 = 0.6666666666666667
Siehe auch Simpsonregel, Burg, Haf, Wille, Meister: Seite 332f, Knorrenschild: Seite 130 und Hanke-Bourgeois: Seite 326ff.
Romberg-Verfahren
[Bearbeiten]Das Romberg-Verfahren wurde von W. Romberg um 1955 entwickelt. Es ist eine Verbesserung der Trapezregel durch Extrapolation. Das SciPy-Paket beinhaltet eine romberg
-Funktion. Diese ist allerdings als deprecated markiert und soll nicht mehr verwendet werden. Stattdessen gibt es die Methode quad
, die nachfolgend auch kurz beschrieben wird.
Siehe Romberg-Integration, Knorrenschild: Seite 140ff, Hanke-Bourgeois: Seite 332ff.
Allgemeine Quadratur mit Python und SciPy
[Bearbeiten]Python und insbesondere das Python-Paket SciPy bieten natürlich wieder eine vorgefertigte Möglichkeit der numerischen Integration. Und zwar die Funktion quad
. Auch Mehrfachintegrale lassen sich lösen. Dafür gibt es die z.B. die Funktion dblquad
. Dies sei hier aber nicht vertieft. Siehe ggf. die SciPy-Dokumentation [1].
Python:
from scipy import integrate y = lambda x: x**2 I, err = integrate.quad(y, -1, 1) print(I)
Ausgabe:
0.6666666666666666
Gedruckte Werke (auszugsweise)
[Bearbeiten]- Burg, Haf, Wille, Meister: Höhere Mathematik für Ingenieure, Band I: Analysis. 9. Auflage, Vieweg+Teubner, 2011, ISBN 978-3-8348-1218-6
- Hanke-Bourgeois: Grundlagen der Numerischen Mathematik und des Wissenschaftlichen Rechnens. 3. Aufl., Vieweg+Teubner, 2009, ISBN 978-3-8348-0708-3
- Knorrenschild: Numerische Mathematik, Eine beispielorientierte Einführung. 6. Aufl., Hanser, 2017, ISBN 978-3-446-45161-2