2011-02-10 214 views
8

我想模擬三維空間中某些物體吸收和反射的傳播波。我想用python來做。我應該使用numpy嗎?我應該使用一些特殊的圖書館嗎?使用Python進行波浪模擬

如何模擬波?我可以使用波動方程嗎?但是如果我有反思呢? 有沒有更好的方法?我應該使用矢量嗎?但是當射線發散時,強度變得更低。難。

在此先感謝。

+8

先選擇算法,然後詢問Python中的實現。 – 2011-02-10 11:21:10

回答

9

如果您在Python中進行任何計算密集型數值模擬,您應該使用NumPy來確定的確實

在任意形狀的材料中模擬電磁波的最一般的算法是finite-difference time domain method(FDTD)。它一次一個地在三維網格上求解波動方程。但是,編寫自己的程序相當複雜,而且您最好使用專用包(如Meep)。

有關於如何編寫自己的FDTD仿真書:here's onehere's帶1-d FDTD一些代碼和解釋就超過1種尺寸文檔,谷歌搜索「writing FDTD」會找到你更多相同的。

你也可以通過假設你所有的波都是平面波來解決問題,然後你可以使用矢量和Fresnel equations。或者,如果您想要建模從平面或曲面傳輸和反射的高斯光束,則可以使用ABCD矩陣形式(也稱爲ray transfer matrices)。這考慮了光束的發散。

-3

請勿使用Python。我試過用它來計算昂貴的東西,它只是沒有做到這一點。

如果需要來模擬一個Python程序一揮手,用C/C++必要的代碼,並將其導出到Python。
這裏的C API鏈接:http://docs.python.org/c-api/
被警告,這是不是世界:)

+8

NumPy非常適合計算成本昂貴的事情。 – ptomato 2011-02-10 11:32:05

+0

好吧,我想我不必在python中執行它:/ – kame 2011-02-10 11:34:15

3

如果您正在解決3D定製的偏微分方程,我建議至少看看FiPy最簡單的API。它將爲您節省從零開始構建大量矩陣調節器和求解器的麻煩。它使用numpy和/或trilinos。這裏有一些examples

0

我建議您使用我的項目GarlicSim作爲構建仿真的框架。您仍然需要自己編寫算法,可能在Numpy中,但GarlicSim可以爲您節省大量樣板,並允許您以靈活的方式探索仿真結果,類似於版本控制系統。