Wie können Sie die Genauigkeit einer Finite-Differenzen-Methode verbessern, um das Eigensystem einer singulären linearen ODE zu finden?

11

Ich versuche eine Gleichung vom Typ zu lösen:

(2x2f(x))ψ(x)=λψ(x)

Wobei einen einfachen Pol bei 0 hat , für die kleinsten N Eigenwerte und Eigenvektoren. Die Randbedingungen sind: ψ ( 0 ) = 0 und ψ ( R ) = 0 , und ich betrachte nur die Funktion über ( 0 , R ] .f(x)0Nψ(0)=0ψ(R)=0(0,R]

Wenn ich jedoch eine sehr einfache, gleichmäßig verteilte Finite-Differenzen-Methode mache, ist der kleinste Eigenwert sehr ungenau (manchmal gibt es einen "falschen" Eigenwert, der mehrere Größenordnungen negativer ist als der, von dem ich weiß, dass er dort sein sollte, der reale "erster Eigenwert" wird zum zweiten, ist aber immer noch schlecht).

Was beeinflusst die Genauigkeit eines solchen Finite-Differenzen-Schemas? Ich gehe davon aus, dass die Singularität das Problem verursacht und dass ein ungleichmäßig verteiltes Gitter die Dinge erheblich verbessern würde. Gibt es Papiere, die mich auf eine gute ungleichmäßige Finite-Differenzen-Methode hinweisen können? Aber vielleicht würde ein Differenzschema höherer Ordnung es mehr verbessern? Wie entscheidest du dich (oder ist es nur "versuche beides und sieh")

Anmerkung: Mein Finite-Differenzen-Schema ist symmetrisch tridiagonal, wobei die 3 Diagonalen sind:

(12Δ2,1Δ2f(x),12Δ2)

Wobei der Gitterabstand ist. Und ich löse die Matrix mit einem direkten symmetrischen Löser (ich gehe davon aus, dass die Genauigkeit durch den Löser nicht drastisch beeinflusst wird, irre ich mich?)Δ

Andrew Spott
quelle
Sollte der mittlere Term Ihrer endlichen Schablone nicht 1 sein ?stattdessen? 1Δ2f(x)
Wolfgang Bangerth

Antworten:

6

Wenn Sie die Genauigkeit eines Finite-Differenzen-Schemas erhöhen möchten, können Sie jederzeit versuchen, den Grad Ihrer Schablone zu erhöhen. In äquidistanten Punkten kann dies jedoch zu numerischen Instabilitäten führen. Um diese Probleme zu vermeiden und dennoch eine hohe Genauigkeit zu erzielen, würde ich die Verwendung von Spektralmethoden vorschlagen .

Wenn Ihr Problem feste Pole hat, können Sie versuchen, diese zu umgehen, indem Sie Ihre Domain aufteilen und zwei gekoppelte Probleme lösen.

chebguif(x)

chebguiu(x)u(x)x=λu[1,1]

Verwenden von <code> chebgui </ code> zum Berechnen der Eigenwerte und Eigenmodi einer einfachen Differentialgleichung zweiter Ordnung.

Aktualisieren

Wenn Sie dieses Problem lösen möchten, ohne sich zu sehr mit Chebfun zu befassen, finden Sie alle Details in Kapitel 9 von Nick Trefethens Buch " Spectral Methods in Matlab ".

Pedro
quelle
Ich habe meinen ursprünglichen Beitrag bearbeitet, um zu verdeutlichen, dass ich nicht wirklich auf die Stange schaue, sondern nur ganz in der Nähe. Danke für die Information, ich muss chebfun auschecken.
Andrew Spott
3
Ohne Kommentar abgewählt? Könnten Sie bitte zum Wohle aller darauf hinweisen, wie diese Antwort verbessert werden könnte?
Pedro
0

Δxf(x)ψ(x)f(x)f(xi)xi1xi+1f(x)φi(x)φi(x)xif(x)

Wenn Sie bereits finite Elemente ausführen, können Sie natürlich auch in Elemente höherer Ordnung investieren, die in 1d auch nicht viel schwieriger sind.

Wolfgang Bangerth
quelle