Sto cercando di risolvere l'equazione di avanzamento ma ho una strana oscillazione che appare nella soluzione quando l'onda si riflette dai confini. Se qualcuno avesse già visto questo artefatto, sarei interessato a conoscere la causa e come evitarlo!
Questa è una gif animata, aperta in una finestra separata per visualizzare l'animazione (verrà riprodotta solo una volta o meno una volta memorizzata nella cache!)
Si noti che la propagazione sembra altamente stabile fino a quando l'onda inizia a riflettere dal primo confine. Cosa pensi possa succedere qui? Ho trascorso alcuni giorni a controllare due volte il mio codice e non riesco a trovare alcun errore. È strano perché sembrano esserci due soluzioni di propagazione: una positiva e una negativa; dopo il riflesso dal primo confine. Le soluzioni sembrano viaggiare lungo punti mesh adiacenti.
Seguono i dettagli di implementazione.
L'equazione di avanzamento,
dove è la velocità di propagazione.
Crank-Nicolson è una discretizzazione stabile incondizionatamente (pdf link) per l'equazione di avanzamento a condizione che stia lentamente cambiando nello spazio (contiene solo componenti a basse frequenze quando Fourier si trasforma).
La discretizzazione che ho applicato è,
Mettere le incognite sul lato destro consente di scrivere questo in forma lineare,
dove (per prendere la media temporale ponderata uniformemente tra il punto presente e futuro) e .
Questo insieme di equazioni ha la forma di matrice , dove,
I vettori e sono noti e sconosciuti della quantità per cui vogliamo risolvere.
Applico quindi le condizioni al contorno di Neumann chiuse sui confini sinistro e destro. Per confini chiusi intendo su entrambe le interfacce. Per limiti chiusi si scopre che (non mostrerò il mio lavoro qui) dobbiamo solo risolvere l'equazione della matrice sopra. Come sottolineato da @DavidKetcheson, le equazioni di matrice sopra descrivono effettivamente le condizioni al contorno di Dirichlet . Per le condizioni al contorno di Neumann,
Aggiornare
Il comportamento sembra abbastanza indipendente dalla scelta delle costanti che uso, ma questi sono i valori per la trama che vedi sopra:
- = 2
- dx = 0,2
- dt = 0.005
- = 2 (Gaussian hwhm)
- = 0,5
Aggiornamento II
Una simulazione con coefficiente di diffusione diverso da zero, (vedi commenti sotto), l'oscillazione scompare, ma l'onda non riflette più !? Non capisco perché?