2 Gnu Octave |
Funktion integrieren | |
Verfahren | |
quad | |
quadv | |
quadl | |
quadgk | |
quadcc | |
Anmerkungen | |
Empirische Daten (Datenpunkte) integrieren | |
trapz / cumtrapz | |
Anmerkungen |
Es stehen mehrere Funktionen für die numerische Integration zur Verfügung:
quad | Gauss-Quadratur Nicht sonderlich genau, wenn Funktion nicht glatt. |
quadv | Adaptive vektorisierte Simpson-Regel Mittlere Genauigkeit bei glatten Funktionen. |
quadl | Adaptive Lobatto-Regel Mittlere Genauigkeit bei glatten Funktionen. Langsamer als quadgk. |
quadgk | Adaptive Gauss-Konrod-Regel Schnellster Algorithmus, wenn Funktion glatt verläuft. Mittlere Genauigkeit bei glatten Operanden, kann mit Schwingungen und unendlichen Intervallgrenzen umgehen. |
quadcc | Adaptive Clenshaw-Curtis-Regeln Robustester Algorithmus, geringe...hohe Genauigkeit bei nicht-glatten...glatten Funktionen, kann mit Diskonitinuitäten, Singularitäten, Schwingungen und unendlichen Intervallen umgehen. Sollte bevorzugt verwendet werden, wenn nicht bekannt ist, ob der Operand glatt ist, Diskontinuitäten, Schwingungen oder Singularitäten aufweist. |
Welche Funktion am besten geeignet ist, hängt von der zu
integrierenden Funktion ab.
quadcc() ist das robusteste Verfahren und kann mit
Singularitäten, Diskontinuitäten, Schwingungen und unendlichen
Intervallgrenzen umgehen.
Für glatte Kurven führt quadgk() am schnellsten zu
Ergebnissen.
[Ergebnis, Fehlercode, Aufrufe, Fehler] = quad(Funktion, Start, Ende [ , Genauigkeit [ , Singularitäten ] ] );
Mit der Funktion quad_options() können Einstellungen für
die Integration mit quad() vorgenommen werden.
Diese Routine benutzt Fortran-Routinen aus der
QUADPACK-Bibliothek.
Die Funktion quad() darf nicht rekuriv verwendet werden,
z.B. um über mehrere Variablen zu integrieren.
Ergebnis | Resultat der Integration |
Fehlercode | 0 bei Erfolg, ansonsten Code für Fehler |
Fehler | Fehler-Abschätzung |
Aufrufe | Anzahl, wie oft Funktionswert berechnet wurde |
Funktion | Zu integrierende Funktion:
|
Start Ende |
Integrations-Intervall, Start- und Endwert dürfen unendlich sein |
Genauigkeit | Geforderte Genauigkeit, Vektor mit zwei
Elementen:
|
Singularitäten | Vektor mit Stellen, an denen die Funktion Singularitäten aufweist |
[Ergebnis, Aufrufe] = quadv(Funktion, Start, Ende [ , Genauigkeit [ , Traceflag [ , Parameter...] ] ] );
Vektorisierte Version von quad().
Das Integrationsintervall wird rekursiv in immer kleinere Intervalle unterteilt, auf jedes Intervall wird die Simpson-Regel angewandt.
Die Funktion quadv() kann rekursiv aufgerufen werden und somit in dblquad() und triplequad() verwendet werden.
Ergebnis | Resultat der Integration |
Aufrufe | Anzahl, wie oft Funktionswert berechnet wurde |
Funktion | Zu integrierende Funktion:
|
Start Ende |
Integrations-Intervall, Start- und Endwert müssen endlich sein |
Genauigkeit | Genauigkeit, bei der die Näherung beendet wird |
Traceflag | veranlasst Trace-Ausgaben (Zwischenwerte) während der Näherung. |
Parameter | Zusätzliche Parameter, die an die Funktion übergeben werden |
Ergebnis = quadl(Funktion, Start, Ende [ , Genauigkeit [ , Traceflag [ , Parameter...] ] ] );
Auch hier wird das Integrationsintervall rekursiv in Teilintervalle zerlegt, für die dann jeweils die Berechnung erfolgt.
Ergebnis | Resultat der Integration |
Funktion | Zu integrierende Funktion:
|
Start Ende |
Integrations-Intervall, Start- und Endwert müssen endlich sein. |
Genauigkeit | Relative Genauigkeit, bei der die Integration beendet wird |
Traceflag | veranlasst Trace-Ausgaben (Zwischenwerte) während der Näherung |
Parameter | Zusätzliche Parameter, die an die Funktion übergeben werden |
[Ergebnis, Fehler] = quadgk(Funktion, Start, Ende [ , Genauigkeit [ , Traceflag] ] ); [Ergebnis, Fehler] = quadgk(Funktion, Start, Ende [ , Property, Wert ...]);
Mit glatten Kurven führt quadgk() schneller zu Ergebnissen als die anderen Verfahren.
Im Property WayPoints (Zeilenvektor) können Punkte angegeben werden, an denen der Kurvenverlauf einen Knick aufweist (die erste Ableitung der Funktion ist hier nicht kontinuierlich). Bei der Zerlegung des Integrationsintervalles werden die Teilintervalle dann so gewählt, dass die Knickpunkte auch Grenzen der Teilintervalle sind. Dies kann die Genauigkeit erhöhen und die Bearbeitung beschleunigen.
Ist einer der Werte in WayPoints oder der Start- oder Endwert komplex, wird ein Konturintegral für den WayPoint-Linienzug bestimmt.
Ergebnis | Resultat der Integration |
Fehler | Fehler-Abschätzung |
Funktion | Zu integrierende Funktion:
|
Start Ende |
Integrations-Intervall, Start- und Endwert dürfen unendlich sein oder weiche Singularitäten an den Enden haben. |
Genauigkeit | Absolute Genauigkeit, bei der die Näherung beendet werden kann |
Traceflag | veranlasst Trace-Ausgaben (Zwischenwerte) während der Näherung |
[Ergebnis, Fehler, Punkte] = quadcc(Funktion, Start, Ende [ , Genauigkeit [ , Singularitäten] ] );
Dieses Verfahren ist sehr robust und kann auch dann verwendet
werden, wenn der Funktionsverlauf Diskontinuitäten, Singularitäten,
Schwingungen und Intervallgrenzen im Unendlichen aufweist.
Die Verwendung von quadcc() wird besonders dann empfohlen,
wenn noch keine tiefergehende Analyse des Funktionsverlaufes
vorgenommen wurde.
Ergebnis | Resultat der Integration |
Fehlercode | 0 bei Erfolg, ansonsten Code für Fehler |
Fehler | Fehler-Abschätzung |
Punkte | Anzahl, wie oft Funktionswert berechnet wurde |
Funktion | Zu integrierende Funktion:
|
Start Ende |
Integrations-Intervall, Start- und Endwert dürfen unendlich sein |
Genauigkeit | Relative Genauigkeit, bei der die Näherung beendet werden kann |
Singularitäten | Vektor mit Stellen, an denen die Funktion im Integrationsintervall Singularitäten oder Diskontinuitäten (Sprünge) in den Ableitungen aufweist |
Wenn die zu integrierende Funktion als Formel gegeben ist, sollten Sie testen, ob Sie mit wxMaxima eine Formel für das unbestimmte Integral ermitteln können. Falls ja, setzen Sie die Intervallgrenzen in die erhaltene Formel ein.
trapz | Trapez-Methode für empirische Daten
(Datenpunkte) Gesamtwert für Integral bilden |
cumtrapz | Trapez-Methode für empirische Daten
(Datenpunkte) Partialsummen für jeden einzelnen Datenpunkt (Integral vom Anfangspunkt bis zum jeweiligen Punkt) |
trapz([x,] y [ , dim]); cumtrapz([x,] y [ , dim]);
Mit trapz() wird der Gesamtwert für das Integral ermittelt, cumtrapz() ermittelt auch Partialsummen (Integrale vom Anfangspunkt bis zu jedem einzelnen Punkt).
Zur Integration werden die Trapezflächen zwischen jeweils benachbarten Punkten berechnet und aufaddiert.
y | Vektor mit den y-Koordinaten der Punkte |
x | Vektor mit den x-Koordinaten der
Punkte. Falls x nicht angegeben ist, wird ein Vektor mit gleichmäßigem Abstand 1 verwendet. |
dim | wählt für mehrdimensionale Objekte den Index der zu integrierenden Daten aus |
Es sollte geprüft werden, ob ein Spline durch die Datenpunkte gelegt werden kann, um dann den Spline zu integrieren.
Im Beispiel werden 5 Punkte mit x in gleichmäßigen Abstand im Intervall von 0 bis π/2 gewonnen, die y-Koordinaten sind die zugehörigen Sinuswerte.
Der theoretische Wert für das Integral ist 1.
Mit der Verwendung von trapz() erhalten wird 0,98712 als
Ergebnis.
Berechnen wir einen Spline und integrieren diesen, erhalten wir
1,0001.
x = linspace(0, pi/2, 5)'; y = sin(x); printf('Datenpunkte\n'); [x y] → ans = → → 0.00000 0.00000 → 0.39270 0.38268 → 0.78540 0.70711 → 1.17810 0.92388 → 1.57080 1.00000 printf('Direkte Verwendung der Messwerte mit trapz\n'); trapz(x, y) → ans = 0.98712 printf('\nInterpolation der Werte, Integration mit quad\n'); global pp1; pp1 = interp1(x, y, "spline", "pp"); function y = fsinint(x) global pp1; y = ppval(pp1, x); endfunction quad(@fsinint, 0, pi/2) → ans = 1.0001