用Python进行波形模拟

10

我想模拟三维空间中一些物体上的吸收和反射的传播波。 我想使用Python完成。 我应该使用numpy吗? 是否有一些特殊的库可以使用?

如何模拟波? 我可以使用波动方程吗? 但是如果有反射怎么办? 有没有更好的方法? 我应该使用向量吗? 但当光线分散时,强度会降低。 很困难。

提前致谢。


8
先选择一个算法,然后再咨询如何在Python中实现。 - Paulo Scardine
4个回答

14
如果您在Python中进行任何计算密集型的数值模拟,您应该绝对使用NumPy。
模拟任意形状材料中电磁波的最一般算法是有限差分时域方法(FDTD)。它逐个时间步骤地在3D晶格上解决波动方程。虽然它很复杂,但你可能最好使用一个专用软件包,如Meep
有关如何编写自己的FDTD模拟的书籍:这里有一本, 这里有一份1-D FDTD代码和超过1个维度的解释文档,并且在谷歌搜索"writing FDTD"将找到更多类似内容。
你也可以通过假设所有的波都是平面波来解决问题,使用向量和菲涅耳方程。或者,如果你想模拟从平面或曲面反射和折射高斯光束,你可以使用ABCD矩阵形式(也称为射线传输矩阵)。这将考虑到光束的发散性。

嗨ptomato,这是一些困难的东西,但我想我会先了解一下FDTD。谢谢! - kame
1
在Windows上运行Meep似乎很困难。 :( - kame
@kame - 我知道。这非常不幸。然而,这是我所知道的唯一开源解决方案 - 否则你可以编写自己的程序(请参见答案的编辑)或使用昂贵的商业软件(RSoft、Lumerical等)。 - ptomato

3
如果您正在解决3D自定义偏微分方程,我建议您至少看一下FiPy。它可以节省您从头开始构建许多矩阵条件器和求解器的麻烦。它使用numpy和/或trilinos。这里有一些示例

0

我建议您使用我的项目GarlicSim作为构建模拟的框架。您仍然需要自己编写算法,可能是在Numpy中进行,但GarlicSim可以帮助您节省大量样板代码,并允许您以灵活的方式探索模拟结果,类似于版本控制系统。


-5

不要使用Python。我曾尝试将其用于计算密集型任务,但它并不适合这种情况。

如果你必须在Python程序中模拟波形,请使用C/C++编写必要的代码,并将其导出到Python。
这里是C API的链接:http://docs.python.org/c-api/
请注意,这并不是世界上最简单的API :)


9
NumPy非常适合计算密集型任务。 - ptomato
好的,我想我不一定非得用Python:/ - kame
8
-1是因为Python有广泛使用的科学库,如numpy/scipy。还可以看看其他优化Python代码的方法,比如cython、psyco。最后,使用高效的算法即可;) - Andrea Spadaccini
2
@Andrea Spadaccini,别忘了Weave!:-D(它虽然在scipy中,但值得明确提到) - fortran
对于偏微分方程,NumPy和C / Fortran等之间将简单地保持数量级差异。目前尚未有人展示出反例,但如果您有,请随时向我展示。 - Vladimir F Героям слава

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接