1. Possiamo rilevare numericamente la rigidità semplicemente applicando metodi espliciti?
Supponiamo di avere un problema con il valore iniziale per alcuni ODE su . Prendi un grande passo e un metodo Euler esplicito, esegui i tuoi calcoli con un passo costante e ottieni questi punti:τ = 1 τ[0,10]τ=1 τ
Si stima l'errore e sembra essere grande. Bene, allora prendi
e ottieniτ=0.1
La stima dell'errore è ora accettabile. Stepsize è piccolo relativamente a .[ 0 , 10 ] ⋆τ=0.1[0,10]⋆
Quindi, il problema è rigido? La risposta è NO ! Per riprodurre correttamente le oscillazioni della soluzione è necessario un piccolo passo in avanti .
Il problema che abbiamo risolto è
y′(t)=−2cosπt,y(0)=1.
Ora prendi un altro ODE sullo stesso intervallo, ed Euler esplicito ti dà quasi la stessa soluzione numerica:τ=1
Prendi e ora la soluzione numerica èτ=0.1
La stima dell'errore ora è piccola. Stepsize è piccolo relativamente a .[ 0 , 10 ] ⋆τ=0.1[0,10]⋆
Questo problema è rigido? SÌ ! Abbiamo fatto molti piccoli passi per riprodurre la soluzione che sta cambiando molto lentamente. Questo è irrazionale! L'entità del passo temporale qui è limitata dalle proprietà di stabilità di Eulero esplicito .
Questo problema è
y′(t)=−2y(t)+sint/2,y(0)=1.
⋆ Nota che il numero di dimensioni del gradino può essere molto maggiore se prendiamo un intervallo di integrazione più lungo.
Conclusione: le informazioni sui timestep e sugli errori corrispondenti non sono sufficienti per rilevare la rigidità. Dovresti anche guardare la soluzione ottenuta. Se varia lentamente e la dimensione è molto piccola, è molto probabile che il problema sia rigido. Se la soluzione oscilla rapidamente e ti fidi della tua tecnica di stima degli errori, questo problema non è rigido.
2. Come determinare la dimensione massima che consente di integrare il problema rigido con il metodo esplicito?
Se si utilizza un risolutore esplicito black-box con controllo automatico dei passi, non è necessario eseguire alcuna operazione: il software prenderà le misure necessarie in modo adattivo.
Supponiamo che tu voglia ottenere la soluzione manualmente con un passo costante, o semplicemente stimare quante ore dovresti aspettare fino a quando il tuo metodo esplicito non risolverà il problema. Quindi dovresti conoscere lo spettro della tua matrice Jacobi. Supponiamo che sia reale e si trovi in (nel tuo esempio ).Λ = - 1000[Λ,0]Λ=−1000
Quindi dovresti calcolare l' intervallo di stabilità reale ( dominio di stabilità in casi complessi) del tuo metodo esplicito. Non è troppo difficile, devi solo consultare un libro di testo su questo argomento. Nel caso di Eulero esplicito questo intervallo è . Ora, se vuoi che la tua soluzione non esploda, dovresti prendere tale che risieda nell'intervallo di stabilità, cioè nel nostro caso
τ Λ τ τ ≤ 2[−2,0]τΛτ
τ≤2|Λ|.
Se vuoi maggiore coerenza, dovresti prendere
poiché permolto probabilmente la tua soluzione produrrà oscillazioni innaturali (ma sbiadite).1/| Λ| <τ≤2/| Λ|
τ≤1|Λ|,
1/|Λ|<τ≤2/|Λ|
Naturalmente tale analisi è applicabile principalmente per problemi lineari con spettro noto. Per problemi più pratici dovremmo fare affidamento su metodi numerici di rilevamento della rigidità (vedere riferimenti e commenti in altre risposte).