2011-02-10 28 views
8

Voglio simulare un'onda di propagazione con assorbimento e riflessione su alcuni corpi nello spazio tridimensionale. Voglio farlo con Python. Dovrei usare Numpy? Ci sono alcune librerie speciali che dovrei usare?Simulazione Wave con Python

Come posso simulare l'onda? Posso usare l'equazione delle onde? Ma cosa succede se ho un riflesso? Esiste un metodo migliore? Dovrei farlo con i vettori? Ma quando il raggio diverge, l'intensità si abbassa. Difficile.

Grazie in anticipo.

+8

Prima selezionare un algoritmo, quindi chiedere informazioni sull'implementazione in Python. –

risposta

9

Se si esegue una simulazione numerica intensiva computazionalmente in Python, è necessario utilizzare con NumPy.

L'algoritmo più generale per simulare un'onda elettromagnetica in materiali di forma arbitraria è il finite-difference time domain method (FDTD). Risolve l'equazione delle onde, un passo temporale alla volta, su un reticolo tridimensionale. È piuttosto complicato programmare te stesso, tuttavia, e probabilmente stai meglio usando un pacchetto dedicato come Meep.

Non ci sono libri su come scrivere i propri simulazioni FDTD: here's one, here's un documento con un po 'di codice per 1-D FDTD e spiegazioni su più di 1 dimensione, e usare Google "writing FDTD" troverà più dello stesso.

Si potrebbe anche affrontare il problema assumendo che tutte le onde siano onde piane, quindi è possibile utilizzare i vettori e lo Fresnel equations. Oppure, se si desidera modellare i fasci gaussiani trasmessi e riflessi da superfici piane o curve, è possibile utilizzare il formalismo a matrice ABCD (noto anche come ray transfer matrices). Questo tiene conto della divergenza delle travi.

+0

Ciao ptomato, roba difficile ma penso che leggerò su FDTD all'inizio. Grazie! – kame

+1

Sembra difficile eseguire Meep su Windows. :( – kame

+0

@kame - Lo so, è molto sfortunato, ma è l'unica soluzione open source di cui sono a conoscenza - altrimenti puoi scrivere il tuo (vedi modifica alla risposta) o usare un costoso programma commerciale (RSoft, Lumerical, ecc.) – ptomato

-3

Non utilizzare Python. Ho provato a usarlo per cose computazionalmente costose e non è stato creato per quello.

Se necessità per simulare un'onda in un programma Python, scrivere il codice necessario in C/C++ e esportarlo in Python.
Ecco un link per l'API C: http://docs.python.org/c-api/
attenzione, non è l'API più facile del mondo :)

+8

NumPy è perfettamente adatto per cose computazionalmente costose. – ptomato

+0

Ok, penso di non doverlo fare necessariamente in python:/ – kame

+7

-1 perché Python ha ampiamente utilizzato librerie scientifiche come numpy/scipy. Dai un'occhiata anche ad altri modi per ottimizzare il codice Python come cython, psyco. Infine, utilizza algoritmi efficienti;) –

3

Se si sta risolvendo PDE personalizzati 3D, consiglio almeno un'occhiata a FiPy. Ti farà risparmiare la fatica di costruire molti condizionatori e risolutori matrix da zero. Usa numpy e/o trilinos. Ecco alcuni examples.

0

Si consiglia di utilizzare il mio progetto GarlicSim come framework in cui si costruisce la simulazione. Avrai comunque bisogno di scrivere il tuo algoritmo da solo, probabilmente in Numpy, ma GarlicSim potrebbe farti risparmiare un po 'di informazioni e permetterti di esplorare i tuoi risultati di simulazione in modo flessibile, simile ai sistemi di controllo delle versioni.