Kann ich diesem numerischen Tripelintegral von Matlab vertrauen?

15

Computational Science Personen:

Ich habe diese Frage ursprünglich bei Math Stack Exchange gepostet und jemand sagte, dass ich hier möglicherweise "viel bessere" Antworten bekomme:

Ich bin ein Anfänger in numerischen Methoden und Matlab. Ich versuche, die folgende Summe von zwei Dreifachintegralen zu bewerten (es kann offensichtlich einfacher geschrieben werden, aber Sie können es immer noch nicht symbolisch bewerten (?)). Ich habe Probleme, das zum zu bringen, deshalb habe ich es hier widerwillig in Stücke zerbrochen: Ich möchte die Summe von findenLEINTEX

2((1/0,3)-1)2(11/0,31r10r1-r0F1(r0,r1,t)exp((0.3)2t24)dtdr0dr1),

und

2((1/0.3)1)2(11/0.31r1r1r0r1+r0F2(r0,r1,t)exp((0.3)2t24)dtdr0dr1),

wo

F1(r0,r1,t)=t2r03(0.3)32r13π

und

F2(r0,r1,t)=(0,3)3π3/2(r0+r1-t)4(t2+2t(r0+r1)-3(r1-r0)2)2288(43πr03)(43πr13).

BEARBEITEN (2. März 2013): Jemand antwortete, dass Mathematica die Integrale symbolisch ausführen soll. Ich habe gerade versucht, dies zu tun (mit vereinfachten Versionen der Integrale), und Mathematica konnte nur die beiden äußeren der ersten ausführen und kam bei der zweiten ins Stocken. Ich würde mich über Hilfe freuen. Folgendes habe ich getan:

Ich habe versucht zu bewerten

121r20r2r1r13t2exp(t2)r23dtdr1dr2
über

Integriere [r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp (-t ^ 2), {t, 0, r2 - r1}, {r1, 1, r2}, {r2, 1, 2}]

und Mathematica kehrt zurück (Ich hatte Probleme mit LATEX hier, weil das Ergebnis lang ist. Ich habe es in zwei Gleichungen aufgeteilt. Wenn jemand eine gute Möglichkeit kennt, dies anzuzeigen, sag es mir bitte):

12164r22e1r22(2e2r2(25+r2(19+2r2(1+r2)))

e1+r22(32r2(2+r22))+π(11+4r22(9+r22))Erf[1-r2])dr2.

Dann habe ich versucht zu bewerten

121r2r2-r1r2+r1

exp(-t2)(r1+r2-t)4(t2+2t(r1+r2)-3(r2-r1)2)2r13r23dtdrdr2

mit

Integriere [(r1 + r2 - t) ^ 4 * (t ^ 2 + 2 * t * (r1 + r2) - 3 * (r2 - r1) ^ 2) ^ 2 * Exp [-t ^ 2] / r1 ^ 3 / r2 ^ 3, {r2, 1, 2}, {r1, 1, r2}, {t, r2-r1, r2 + r1}]

Gerade jetzt, und Mathematica hat nach ungefähr einer halben Stunde keine Antwort zurückgegeben (aber ich habe im Moment Probleme mit dem Computernetzwerk und sie können schuld sein).

[ENDE DES 2. MÄRZES]

Ich habe den Matlab-Befehl "triplequad" ohne zusätzliche Optionen verwendet. Die variablen Integrationsgrenzen habe ich mit Hilfe von heaviside-Funktionen behandelt, weil ich keine andere Möglichkeit dazu kannte. Matlab hat mir . 0,007164820144202

Ich weiß, dass Matlab eine gute Software ist, aber ich habe gehört, dass es schwierig ist, numerische Dreifachintegrale genau zu machen, und Mathematiker sollten skeptisch sein. Deshalb möchte ich einen Weg finden, um die Richtigkeit dieser Antwort zu überprüfen. Die Integrale geben den erwarteten Wert eines bestimmten Experiments an (wenn jemand möchte, kann ich diese Frage bearbeiten, um das Experiment zu beschreiben): Ich habe das Experiment in Matlab mit entsprechend zufällig generierten Zahlen millionenfach implementiert und die Ergebnisse gemittelt. Ich habe diesen Vorgang viermal wiederholt. Hier sind die Ergebnisse (ich entschuldige mich, wenn ich das Wort "Studie" falsch verwendet habe):

Versuch 1:0,007133292603256

Versuch 2:0,007120455071989

Versuch 3:0,007062595022049

Versuch 4:0,007154940168452

Versuch 5:0,007215000289130

Obwohl für jeden Versuch eine Million Proben verwendet wurden, stimmen die Simulationswerte nur in der ersten signifikanten Stelle überein. Sie sind nicht nahe genug beieinander, um zu bestimmen, ob das numerische Dreifachintegral korrekt ist.

Kann mir also jemand sagen, ob ich dem Ergebnis von "Triplequad" hier vertrauen kann und unter welchen Umständen man ihm überhaupt vertrauen kann?

Ein Vorschlag, den ich bei Math Stack Exchange erhalten habe, war, andere Software wie Mathematica, Octave, Maple und SciPy auszuprobieren. Ist das ein guter Rat? Arbeiten Menschen in Mathematica und Maple tatsächlich numerisch? Octave ist eine Art Matlab-Klon. Kann ich also davon ausgehen, dass er dieselben Integrationsalgorithmen verwendet? Ich habe noch nie von SciPy gehört und würde mich über jede Meinung dazu freuen.


UPDATE: Jemand von Math Stack Exchange hat es in Maple gemacht und . Das ist Übereinstimmung mit drei bedeutenden Figuren. Das ist ein gutes Zeichen.0,007163085468

Ich würde mich auch über Vorschläge freuen, wie Sie einen langen, mehrzeiligen Ausdruck in in Stack Exchange eingeben können . Können Sie hier die "ausgerichtete" Umgebung verwenden? Ich habe es versucht und konnte es nicht zum Laufen bringen.LEINTEX

Stefan Smith
quelle
2
Ihre Simulationsergebnisse stimmen perfekt mit dem von Matlab zurückgegebenen numerischen Wert : Ihr Mittelwert von ist nur Standardfehler weniger als der von Matlab zurückgegebene Wert . FWIW, Mathematica gibt . Sie kann diese Integrale auch symbolisch nach Polynomen und Fehlerfunktionen auswerten. 0,00713726-1.110,00716308537
Whuber
@whuber Danke. Ich könnte schwören, ich habe es symbolisch in Maple versucht und Maple konnte es nicht. Ich werde es in Maple erneut versuchen, und wenn es nicht funktioniert, werde ich es in Mathematica versuchen. Übrigens habe ich ein ähnliches Integral in Maple erstellt und eine große symbolische Antwort erhalten. Es schien eine Summe und Differenz von sehr großen Zahlen zu sein, deren Gesamtsumme ziemlich klein war. Ich vermute Rundungsfehler war wahrscheinlich in der endgültigen Antwort. Sollten Sie in einem Problem wie diesem die symbolische Antwort verwenden oder das Integral nur numerisch ausführen?
Stefan Smith
Symbolische Antworten haben den Vorteil, dass sie Kombinationen von Funktionen darstellen, die (oft) mit beliebiger Genauigkeit effizient berechnet werden können. Auch in der Regel bietet sich die symbolische Lösung bei Variation von Parametern für eine schnelle Neuberechnung an. Aus diesen Gründen lohnt es sich oft, eine symbolische Lösung zu suchen.
Whuber
@whuber: Ich habe in Mathematica versucht, einige im Wesentlichen äquivalente Integrale zu erstellen (einige der Konstanten zu ändern und einige multiplikative Konstanten zu entfernen), und Mathematica konnte nur die beiden äußeren Integrationen des ersten Integrals ausführen und scheint beim zweiten festgefahren zu sein. Ich habe meinen Code und die Ergebnisse oben gepostet.
Stefan Smith
1
Re The March 2 edit: Indem Sie das Dreifachintegral symbolisch auf ein einziges Integral (in der ersten Hälfte Ihrer Integrale) reduzieren, haben Sie viel erreicht. Der Integrand verhält sich sehr gut und kann innerhalb von Sekundenbruchteilen mit extrem hoher Genauigkeit numerisch integriert werden.
Whuber

Antworten:

9

Erstens ist es nicht die Software (oder sollte es zumindest nicht sein), die die Qualität der Lösung eines Problems bestimmt, sondern die Qualität und Angemessenheit des angewendeten Algorithmus. Sie sollten überprüfen, welcher Algorithmus von TripleQuad in Matlab verwendet wird (ich denke, er verwendet eine verschachtelte adaptive Gaußsche Quadratur). Und Sie sollten überprüfen, welche Toleranzen angefordert werden (erforderliche absolute und relative Toleranz). Möglicherweise wird standardmäßig nur eine relative Genauigkeit von angefordert. 10-8

Die Antwort von Maple stammt wahrscheinlich aus der Computer-Algebra, und möglicherweise wurde eine geschlossene Lösung gefunden, die dann unter Verwendung von Gleitkommazahlen mit doppelter Genauigkeit bewertet wurde. Dies hat den Vorteil, dass Sie das Integral nicht durch eine endliche Summation approximieren (und daher Approximationsfehler einführen), sondern das Computer-Algebra-System einen Ausdruck für das Integral findet, der dann ausgewertet werden kann. Bei der Bewertung dieses Ausdrucks ist natürlich Vorsicht geboten (Abrundung).

Wenn Sie dies mit SciPy tun möchten, müssen Sie auch unter Verwendung der zugrunde liegenden Quadpack-Routinen (Piessens et al.) Auf verschachtelte adaptive Gaußsche Quadratur zurückgreifen. In Octave haben Sie den gleichen Ansatz. Und es würde mich nicht überraschen, wenn Matlab Quadpack auch als Quadrature Engine verwendet (da es die Referenz ist).

GertVdE
quelle
@GretVdE: Danke für die Info. Ich habe zuerst versucht, das Integral symbolisch auszuwerten, und Maple konnte es nicht tun (daher war es wahrscheinlich unmöglich, Standardfunktionen zu verwenden). Deshalb habe ich Maple gebeten, es numerisch zu tun. Ich weiß nicht, welchen Algorithmus er verwendet hat.
Stefan Smith
@StefanSmith: Sie können dies herausfinden, indem Sie den Ordner in Maple: einstellen infolevel[`evalf/int`] := 4. Sind Sie sicher, dass Mape keine geschlossene Lösung finden kann? Das Integral scheint nicht zu kompliziert zu sein. Könnten Sie Ihr Ahornblatt irgendwo veröffentlichen?
GertVdE
@StefanSmith: Ich würde den Maple-Code in der obigen Frage posten.
GertVdE
Ich kann Maple momentan nicht dazu bringen, an meinem System zu arbeiten, aber ich habe versucht, äquivalente Integrale in Mathematica zu verwenden, und Mathematica hat nur die inneren beiden des ersten Dreifachintegrals ausgeführt und beim zweiten Dreifachintegral angehalten. Bitte beachten Sie die bearbeitete Frage.
Stefan Smith