Wave Simulation mit Python
Ich will, um zu simulieren eine ausbreitende Welle mit der absorption und Reflexion von einigen Körpern im dreidimensionalen Raum. Ich möchte es mit python. Sollte ich die numpy? Gibt es einige spezielle Bibliotheken sollte ich verwenden?
Wie kann ich simulieren die Welle? Kann ich die Wellengleichung? Aber was ist, wenn ich ein Spiegelbild?
Gibt es eine bessere Methode? Sollte ich es mit Vektoren? Aber wenn der Strahl divergieren die Intensität wird geringer. Schwierig.
Vielen Dank im Voraus.
- Wählen Sie einen Algorithmus zuerst, dann Fragen Sie bei der Implementierung in Python.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine rechenintensive numerische simulation in Python, sollten Sie definitiv Verwendung NumPy.
Den meisten Allgemeinen Algorithmus zur Simulation einer elektromagnetischen Welle in beliebig geformte Materialien ist die finite-difference time-domain Methode (FDTD). Es löst die Wellengleichung, die eine Zeit-Schritt zu einer Zeit, auf einem 3-D-Gitter. Es ist ziemlich kompliziert, um das Programm selbst, obwohl, und Sie werden wahrscheinlich besser dran mit einem dedizierten Paket wie Meep.
Gibt es Bücher, wie man schreiben Sie Ihre eigenen FDTD-Simulationen: hier ist einer, hier ein Dokument mit dem code für 1-D FDTD und Erklärungen auf mehr als 1 dimension, und Googeln "schreiben FDTD" finden Sie mehr von der gleichen.
Man könnte auch den Ansatz, das problem durch die Annahme, dass alle deine Wellen sind Ebene Wellen, dann könnte man Vektoren verwenden, und die Fresnel-Gleichungen. Oder wenn Sie wollen Modell Gaußsche Strahlen übertragen und reflektiert von flachen oder gewölbten Oberflächen, Sie könnte verwenden Sie die ABCD-matrix-Formalismus (auch bekannt als Strahl-transfer-Matrizen). Dieses berücksichtigt die Divergenz der Strahlen.
Wenn Sie für die Lösung sind 3D custom PDEs, würde ich empfehlen, zumindest einen Blick auf FiPy. Es werde sparen Sie sich die Mühe, das Gebäude viel von Ihrem matrix-Conditioner und Löser von Grund auf. Es verwendet numpy und/oder trilinos. Hier sind einige Beispiele.
Empfehle ich Sie mit meinem Projekt GarlicSim als der Rahmen, in dem Sie bauen die simulation. Sie immer noch müssen, schreiben Sie den Algorithmus selbst, wahrscheinlich in Numpy, aber GarlicSim kann sparen Sie einen Haufen von Bausteinen und ermöglichen es Ihnen, erkunden Sie Ihre Simulationsergebnisse in einer flexiblen Art und Weise, ähnlich zu version control systems.
Nicht die Python verwenden. Ich habe versucht, mit es für sehr teure Sachen, und es war gerade nicht gemacht.
Wenn Sie müssen zu simulieren, die eine Welle in einem Python-Programm, schreiben Sie den erforderlichen code in C/C++ und exportieren Sie es in Python.
Hier ist ein link zu der C-API: http://docs.python.org/c-api/
Seien Sie gewarnt, es ist nicht die einfachste API in die Welt 🙂