Numerische Integration der kompakt unterstützten Funktion in ein Dreieck

10

Wie der Titel schon sagt, versuche ich, das Integral einer kompakt unterstützten Funktion (Wendlands Quintpolynom) auf einem Dreieck zu berechnen. Beachten Sie, dass sich das Zentrum der Funktion irgendwo im 3D-Raum befindet. Ich integriere diese Funktion in ein beliebiges, aber kleines Dreieck ( ). Ich verwende derzeit die von Dunavant, 1985, beschriebene Integration (p = 19).area<(radius/4)22

Es scheint jedoch, dass diese Quadraturregeln nicht für kompakt unterstützte Probleme geeignet sind. Dies wird durch die Tatsache unterstützt, dass meine (normalisierten) Ergebnisse dazwischen liegen , wenn ich (also eine Funktion, die 1 innerhalb des Kreises mit Radius 1 ist) in eine Ebene integriere, die mit Dreiecken diskretisiert wird 1,001 und 0,897.f(r)=[r1]

Meine Frage ist also, ob es für diese Art von Problem eine spezielle Quadraturregel gibt. Würde eine zusammengesetzte Integrationsregel niedrigerer Ordnung besser funktionieren?

Leider ist diese Routine in meinem Code sehr wichtig, daher ist Präzision von entscheidender Bedeutung. Andererseits muss ich diese Integration "ein paar Mal" für einen einzelnen Zeitschritt durchführen, damit der Rechenaufwand nicht zu hoch ist. Parallelisierung ist kein Problem, da ich die Integration selbst seriell ausführen werde.

Vielen Dank im Voraus für Ihre Antworten.

EDIT: Wendlands quintisches Polynom ist gegeben durch mitα=21W(q)=[q2]αh3(1q2)4(2q+1)α=2116πq=rr0hr0R3

EDIT2: Wenn das zweidimensionale Dreieck ist, dann möchte ich mit berechnen. . So in wird nie kleiner als 0. Hinweis sein , dass das Integral ein Oberflächenintegral über eine Oberfläche in 2-DΔΔω(r)drω(r)=W(rr0h)qWR3

EDIT3: Ich habe eine analytische Lösung für das 1-D (Line) -Problem. Möglicherweise ist auch eine Berechnung für 2-D (Dreieck) möglich.

Azrael3000
quelle
Können Sie uns ein paar Details zu der Funktion geben, die Sie integrieren möchten? Ist es nur ein Polynom? Oder ein stückweises Polynom?
Pedro
Bearbeitet wie gewünscht.
Azrael3000

Antworten:

4

Da die Funktion innerhalb von glatt ist , aber nicht von festem Grad (dh in der Ebene), würde ich vorschlagen , in beiden Dimensionen ein einfaches adaptives Schema zu verwenden, z. B. die Trapezregel nach Rombergs Methode .q2

Das heißt, wenn Ihr Dreieck durch die Eckpunkte , und ist und Sie eine Routine haben, die entlang der Linie von bis integriert ist , können Sie Folgendes tun (in Matlab-Notation):xyzR3romb(f,a,b)fab

int = romb( @(xi) romb( W , xi , y+(z-y)*(xi-x)./(z-x) ) , x , z );

In romb, keine feste Anzahl von Punkten, verwendet aber die Tabelle weiter wachsen , bis die Differenz zwischen zwei aufeinanderfolgenden Diagonalen unterhalb Ihrer geforderte Toleranz ist. Da Ihre Funktion reibungslos funktioniert, sollte dies eine gute Fehlerschätzung sein.

Wenn Teile des Dreiecks außerhalb der Domäne von , können Sie versuchen, die Integrationsgrenzen im obigen Code entsprechend anzupassen.W(q)

Dies ist möglicherweise nicht die rechnerisch effizienteste Methode zur Lösung Ihres Problems, aber die Adaptivität bietet Ihnen viel mehr Robustheit als eine Regel mit festem Grad.

Pedro
quelle
Die Funktion ist überall smmoth außer . Die Nachbarschaft dieses Punktes verursacht die Probleme. q=0
Arnold Neumaier
Ich zerlege mich in zwei 1-D-Probleme, keine schlechte Idee. Weil es eine Sache gibt, die ich dir nicht gesagt habe. Ich habe eine analytische Lösung in 1-D, damit ich das innere Grab durch eine analytische Funktion ersetzen kann. Ich werde das schon
versuchen
@ArnoldNeumaier, tut mir leid, ich sehe nicht, wie das möglich ist. Könntest du erklären?
Pedro
glatt als Funktion von , aber ist eine nicht glatte Funktion von , und die Integration ist über , soweit ich die Frage verstanden habe. Die zusammengesetzte Funktion ist somit eine nicht glatte Funktion von . qqrrr
Arnold Neumaier
1
@Pedro Ich habe es implementiert und es funktioniert wie ein Zauber. Wir haben heute auch eine analytische Lösung gefunden. Dies gilt jedoch nur für einen Sonderfall, mit dem der allgemeine Fall rekonstruiert werden kann. Das heißt, wir müssen eine Domänenzerlegung durchführen. Da der Romberg in ungefähr 4 Schritten konvergiert, denke ich, dass er aus diesem Grund schneller sein wird als die Verwendung der analytischen Formel. Und laut Wikipedia können wir mit rationalen Polynomen immer noch besser abschneiden als Romberg. Sie finden Ihren Namen in den Bestätigungen meiner nächsten Arbeit :) Prost.
Azrael3000
2

Für einen guten Überblick über Kubaturregeln siehe "R. Cools, Eine Enzyklopädie der Kubaturformeln J. Complexity, 19: 445-453, 2003". Die Verwendung einer festen Regel kann Ihnen den Vorteil bieten, dass einige Regeln Polynome genau integrieren (wie dies die Gaußsche Quadratur in einer Dimension tut).

Cools ist auch einer der Hauptautoren von CUBPACK , einem Softwarepaket für numerische Kubatur.

GertVdE
quelle
Ich denke, das Problem hier ist, dass die Funktion ein Polynom von , aber eine nichtlineare Funktion in den Raumkoordinaten ist. Die Funktion ist bis zum Rand der Basisfunktion glatt, jedoch nicht polynomisch, außer entlang der Achsen. qq
Pedro
Das ist richtig Pedro.
Azrael3000
ah ok. mein Fehler. Es tut uns leid.
GertVdE
2

Integrationsregeln setzen voraus, dass die Funktion lokal durch ein Polynom niedrigen Grades gut angenähert ist. Ihr Problem hat nichts mit kompakter Unterstützung zu tun. Kompakt unterstützte radiale Basisfunktionen sind an der Stützgrenze glatt, und Quadraturregeln bis zur Größenordnung der Glätte können problemlos verwendet werden. (Regeln höherer Ordnung helfen nicht; daher sollten Sie wahrscheinlich keine Regel verwenden, die Polynome des Grades 5 genau integriert.)

In Ihrem Fall ergibt sich die Ungenauigkeit aus der Tatsache, dass die Annahme einer guten Polynomnäherung in Ihrem Fall für Dreiecke in der Nähe von fehlschlägt , selbst wenn sie kein enthalten .r0r0

W ist glatt als Funktion von , aber ist eine nicht glatte Funktion von mit einem Gradienten, der in der Grenze unendlich wird . Die Integration ist über und die zusammengesetzte Funktion ist eine nicht glatte Funktion von .qqrrr0rr

Wenn das Dreieck nicht enthält , ist die Funktion aber dies hilft nicht, da die höhere Ableitung sehr schnell nahe an wächst und der Fehler einer Methode höherer Ordnung proportional zu einer Ableitung hoher Ordnung ist, daher sehr groß !r0Cinfr0

Die einfache Abhilfe besteht darin, jedes Dreieck T in eine Anzahl N_T von Unterdreiecken aufzuteilen. Sie können weit weg von und nahe . Sie können offline herausfinden, wie groß muss, damit Dreiecke mit einem bestimmten Durchmesser und Abstand von eine gewünschte Genauigkeit erreichen. Darüber hinaus sollten Sie nur Formeln niedriger Ordnung in der Nähe von .NT=1r0NT1r0NTr0r0

Wenn Sie über ein Dreieck integrieren, aber dreidimensional ist, befindet sich das Dreieck anscheinend in .r0R3

Eine schnellere Abhilfe würde daher das Integral für als Funktion der Dreieckskoordinaten tabellieren (normalisiert durch Drehen in eine zweidimensionale Ebene, so dass ein Scheitelpunkt auf der Achse liegt, und so reflektieren, dass eine Sekunde Scheitelpunkt liegt darüber). Diese Tabelle muss ausreichend detailliert sein, um eine lineare oder quadratische Interpolation genau genug zu machen. Sie können jedoch die zuerst beschriebene langsame Methode verwenden, um diese Tabelle zu erstellen.r0=0xyx

Eine andere Möglichkeit, das Problem zu beseitigen, besteht darin, eine kompakt unterstützte radiale Basisfunktion zu verwenden, die ein Polynom in anstelle von . Dies ist überall reibungslos und einfach zu integrieren.q2q

Arnold Neumaier
quelle
Ich denke, es gibt ein kleines Missverständnis. Ich habe die Beschreibung meiner Frage aktualisiert. Tatsächlich kann im Integral niemals kleiner als 0 sein. Und ist nicht notwendigerweise im Dreieck enthalten. qr0
Azrael3000
Ihr Neuzugang macht für mich keinen Sinn. Wenn ist, muss dies auch . Oder integrieren Sie über ein 2D-Dreieck in ? - Ich habe nicht angenommen, dass im Dreieck ist. Ich habe meiner Antwort gleich etwas mehr Details hinzugefügt. r0R3rR3r0
Arnold Neumaier
Ja, es ist richtig, dass ich über ein 2D-Dreieck in . R3
Azrael3000