Wellensimulation mit Python

8

Ich möchte eine sich ausbreitende Welle mit Absorption und Reflexion an einigen Körpern im dreidimensionalen Raum simulieren. Ich möchte es mit Python machen. Sollte ich numpy benutzen? Gibt es spezielle Bibliotheken, die ich benutzen sollte?

Wie kann ich die Welle simulieren? Kann ich die Wellengleichung verwenden? Aber was, wenn ich eine Reflexion habe? Gibt es eine bessere Methode? Soll ich es mit Vektoren machen? Aber wenn der Strahl divergiert, wird die Intensität geringer. Schwierig.

Vielen Dank im Voraus.

    
kame 10.02.2011, 11:11
quelle

4 Antworten

10

Wenn Sie eine rechenintensive numerische Simulation in Python durchführen, sollten Sie definitiv NumPy verwenden.

Der allgemeinste Algorithmus zum Simulieren einer elektromagnetischen Welle in beliebig geformten Materialien ist die Methode der finiten Differenzen-Zeitdomäne ( FDTD). Es löst die Wellengleichung zeitgleich auf einem 3-D-Gitter. Es ist jedoch ziemlich kompliziert, sich selbst zu programmieren, und es ist wahrscheinlich besser, ein dediziertes Paket wie Meep .

Es gibt Bücher darüber, wie man eigene FDTD-Simulationen schreibt: hier ist eins , hier ist ein Dokument mit einem Code für 1- D FDTD und Erklärungen zu mehr als einer Dimension, und Googeln " schreiben FDTD " finden Sie mehr von der gleich.

Sie könnten das Problem auch angehen, indem Sie annehmen, dass alle Ihre Wellen ebene Wellen sind, dann könnten Sie Vektoren und die Fresnel-Gleichungen . Oder wenn Sie Gauß'sche Strahlen modellieren möchten, die von flachen oder gekrümmten Oberflächen übertragen und reflektiert werden, können Sie den ABCD-Matrix-Formalismus (auch bekannt als ray) verwenden Übertragungsmatrizen ). Dies berücksichtigt die Divergenz der Strahlen.

    
ptomato 10.02.2011, 11:39
quelle
3

Wenn Sie 3D-benutzerdefinierte PDEs lösen, würde ich zumindest einen Blick auf FiPy empfehlen. Es wird Ihnen die Mühe ersparen, viele Ihrer Matrix-Conditioner und Solver von Grund auf neu zu erstellen. Es verwendet numpy und / oder trilinos. Hier sind einige Beispiele .

    
Paul 10.02.2011 11:30
quelle
0

Ich empfehle Ihnen, mein Projekt GarlicSim als Framework zu verwenden, in dem Sie die Simulation erstellen. Sie werden Ihren Algorithmus wahrscheinlich noch selbst schreiben müssen, wahrscheinlich in Numpy, aber GarlicSim kann Ihnen eine Reihe von Voreinstellungen ersparen und Ihnen ermöglichen, Ihre Simulationsergebnisse auf flexible Weise zu untersuchen, ähnlich wie bei Versionskontrollsystemen.

    
Ram Rachum 10.02.2011 15:31
quelle
-3

Benutze Python nicht. Ich habe versucht, es für rechenintensive Dinge zu verwenden, und es wurde einfach nicht dafür gemacht.

Wenn Sie brauchen, um eine Welle in einem Python-Programm zu simulieren, schreiben Sie den notwendigen Code in C / C ++ und exportieren Sie ihn nach Python.
Hier ist ein Link zur C-API: Ссылка
Seien Sie gewarnt, es ist nicht die einfachste API der Welt:)

    
x10 10.02.2011 11:28
quelle