In generale, ti consigliamo di utilizzare un metodo implicito per le equazioni paraboliche (la parte di diffusione) - gli schemi espliciti per la PDE parabolica devono avere un tempo molto breve per essere stabili. Al contrario, per la parte iperbolica (consigli) vorrai un metodo esplicito in quanto è più economico e non interrompe la simmetria del sistema lineare che devi risolvere usando uno schema implicito per la diffusione. In tal caso, si desidera evitare differenze centrate come passare a differenze unilaterali per motivi di stabilità.(uj+1−uj−1)/2Δt(uj−uj−1)/Δt
Suggerirei di guardare il libro di Randy Leveque o il libro di Dale Durran per "Analisi della stabilità di von Neumann". È un approccio generale per accertare la stabilità del tuo schema di discretizzazione, a condizione che tu abbia periodiche condizioni al contorno. (C'è anche un buon articolo wiki qui .)
L'idea di base è assumere che la tua approssimazione discreta possa essere scritta una somma di onde piane , dove è il numero d'onda e la frequenza. Accumuli un'onda piana nella tua approssimazione alla PDE e preghi che non esploda. Possiamo riscrivere l'onda piana come e vogliamo assicurarci che .ei(kjΔx−ωnΔt)kωξneikjΔx|ξ|≤1
A titolo illustrativo, considerare l'equazione di diffusione ordinaria con la differenziazione completamente implicita:
un+1j−unjΔt=Dun+1j−1−2un+1j+un+1j+1Δx2
Se sostituiamo in un'onda piana, quindi dividiamo per ed , otteniamo l'equazioneξneikjΔx
ξ−1Δt=De−ikΔx−2+eikΔxΔx2ξ
Puliscilo un po 'ora e otteniamo:
ξ=11+2DΔtΔx2(1−coskΔx) .
Questo è sempre meno di uno, quindi sei in chiaro. Prova ad applicare questo per lo schema esplicito e centrato per l'equazione di avanzamento:
un+1j−unjΔt=vunj−1−unj+12Δx
e vedere cosa si ottiene. (Questa volta avrà una parte immaginaria.) Lo troverai , che è un periodo triste. Da qui la mia ammonizione di non usarla. Se riesci a farlo, non dovresti avere molti problemi a trovare uno schema stabile per l'equazione completa di diffusione-avanzamento.ξ|ξ|2>1
Detto questo, utilizzerei uno schema completamente implicito per la parte di diffusione. Cambia la differenza nella parte di in se e se e scegli un timestep in modo che . (Questa è la condizione di Courant-Friedrichs-Lewy .) È solo accurata al primo ordine, quindi potresti voler cercare schemi di discretizzazione di ordine superiore se ciò ti riguarda.uj−uj−1v>0uj−uj+1v<0VΔt/Δx≤1