Come migliorare l'accuratezza di un metodo di differenza finita per trovare l'eigensystem di un ODE lineare singolare


11

Sto tentando di risolvere un'equazione del tipo:

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

Dove ha un polo semplice a , per gli autovalori e gli autovettori più piccoli . Le condizioni al contorno sono: e , e sto solo guardando la funzione sopra .0 N ψ ( 0 ) = 0 ψ ( R ) = 0 ( 0 , R ]f(x)0Nψ(0)=0ψ(R)=0(0,R]

Tuttavia, se faccio un metodo di differenza finita molto semplice, distribuito uniformemente, il più piccolo autovalore è molto impreciso, (a volte esiste un autovalore "falso" che è diversi ordini di grandezza più negativi di quello che conosco dovrebbe essere lì, il reale "primo autovalore" diventa il secondo, ma è ancora scarso).

Cosa influenza l'accuratezza di un tale schema di differenze finite? Suppongo che la singolarità sia ciò che sta causando il problema e che una griglia con spaziature irregolari migliorerebbe significativamente le cose, ci sono documenti che possono indicarmi un buon metodo di differenza finita non uniforme? Ma forse uno schema di differenza di ordine superiore migliorerebbe di più? Come si decide (o è solo "provare entrambi e vedere")

nota: il mio schema delle differenze finite è tridiagonale simmetrica in cui le 3 diagonali sono:

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

Dove è la spaziatura della griglia. E sto risolvendo la matrice usando un risolutore simmetrico diretto (suppongo che l'accuratezza non sia influenzata drasticamente dal risolutore, sbaglio?)Δ


Il medio termine del tuo diverso stencil finito non dovrebbe invece essere ? 1Δ2f(x)
Wolfgang Bangerth,

Risposte:


6

Se si desidera aumentare l'accuratezza di uno schema di differenze finite, è sempre possibile provare ad aumentare il grado dello stencil. Su punti equidistanti, tuttavia, ciò può portare a instabilità numeriche. Per evitare questi problemi e ottenere comunque un'elevata precisione, suggerirei di utilizzare i metodi spettrali .

Se il tuo problema ha i poli fissi, puoi provare a aggirarli dividendo il tuo dominio e risolvendo due problemi accoppiati.

Il sistema Chebfun (disclaimer: di cui sono uno degli sviluppatori), utilizza le tecniche sopra menzionate e potresti dare una rapida occhiata al tuo problema chebguinell'interfaccia. Lo proverei da solo, ma non so quale sia il tuo dominio o .f(x)

Ho allegato uno screenshot della chebguifinestra per calcolare i primi sei autovalori e autovodi di su .u(x)u(x)x=λu[1,1]

Utilizzo di <code> chebgui </code> per calcolare gli autovalori e gli autovodi di una semplice equazione differenziale di secondo ordine.

Aggiornare

Se vuoi risolvere questo problema senza entrare troppo in Chebfun, tutti i dettagli dovrebbero essere nel capitolo 9 del libro di Nick Trefethen " Metodi spettrali in Matlab ".


Ho modificato il mio post originale per chiarire che in realtà non sto guardando il palo, ma molto vicino. Grazie per l'informazione, dovrò controllare chebfun.
Andrew Spott,

3
Votato verso il basso senza commento? Per favore, a beneficio di tutti, potresti indicare come migliorare questa risposta?
Pedro,

0

Un modo per migliorare rapidamente le cose (anche se probabilmente non molto meglio) è considerare la somiglianza tra i metodi di differenza finita di ordine più basso che usi e il metodo degli elementi finiti di ordine più basso. Se calcoli la matrice tri-diagonale che ottieni dall'utilizzo delle funzioni di forma lineare agli elementi finiti in 1d, la discretizzazione delle seconde derivate avrà lo stesso aspetto (fino a un fattore ma otterrai un termine diverso per ciò che viene fuori . Non so come appare nel tuo caso, ma dove ora usi , sarà invece qualcosa come wheref ( x ) ψ ( x ) f ( x ) f ( x i ) x i + 1 x i - 1 f ( x ) φ i ( x ) φ i ( x ) x i f ( x )Δxf(x)ψ(x)f(x)f(xi)xi1xi+1f(x)φi(x)φi(x)è la funzione cappello che raggiunge il picco in . Se è sufficientemente semplice, puoi calcolare esattamente questo integrale e fornirà una matrice più accurata di cui devi trovare l'autovalore.xif(x)

Ovviamente, se fai già elementi finiti, potresti anche investire nell'utilizzo di elementi di ordine superiore che non sono poi così difficili in 1d.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.