【问题标题】:Wave Simulation with Python使用 Python 进行波浪模拟
【发布时间】:2011-06-24 18:54:56
【问题描述】:

我想在三维空间中的某些物体上模拟具有吸收和反射的传播波。我想用python来做。我应该使用 numpy 吗?我应该使用一些特殊的库吗?

如何模拟波浪?我可以使用波动方程吗?但是,如果我有反思呢? 有没有更好的方法?我应该用向量来做吗?但是当光线发散时,强度会降低。很难。

提前致谢。

【问题讨论】:

  • 先选择一个算法,然后询问在Python中的实现。

标签: python numpy simulation physics wave


【解决方案1】:

如果您在 Python 中进行任何计算密集型数值模拟,您应该绝对使用 NumPy。

在任意形状的材料中模拟电磁波的最通用算法是finite-difference time domain method (FDTD)。它在 3-D 晶格上求解波动方程,一次一个时间步长。不过,自己编程相当复杂,最好使用专用包,例如Meep

有一些关于如何编写自己的 FDTD 模拟的书籍:here's onehere's 包含一维 FDTD 的一些代码和一维以上解释的文档,谷歌搜索“writing FDTD”会找到你更多相同。

您还可以通过假设所有波都是平面波来解决问题,然后您可以使用矢量和Fresnel equations。或者,如果您想模拟从平面或曲面传输和反射的高斯光束,您可以使用 ABCD 矩阵形式(也称为ray transfer matrices)。这考虑了光束的发散。

【讨论】:

  • 嗨 ptomato,很难的东西,但我想我会首先阅读有关 FDTD 的信息。谢谢!
  • 在 Windows 上运行 Meep 似乎很困难。 :(
  • @kame - 我知道。这是非常不幸的。但是,它是我知道的唯一开源解决方案 - 否则您可以自己编写(请参阅答案的编辑)或使用昂贵的商业程序(RSoft、Lumerical 等)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果您正在求解 3D 自定义 PDE,我建议您至少查看一下 FiPy。它将为您省去从头开始构建大量矩阵调节器和求解器的麻烦。它使用 numpy 和/或 trilinos。这里有一些examples

    【讨论】:

      【解决方案4】:

      不要使用 Python。我已经尝试将它用于计算昂贵的东西,但它并不是为此而生的。

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

      【讨论】:

      • NumPy 非常适合计算昂贵的东西。
      • 好的,我想我不必在 python 中这样做:/
      • -1 因为 Python 已广泛使用 numpy/scipy 等科学库。还可以查看其他优化 python 代码的方法,例如 cython、psyco。最后,使用高效的算法;)
      • @Andrea Spadaccini 不要忘记编织! :-D(虽然它在 scipy 内部,但值得明确提及)
      • 好吧,对于 PDE 来说,NumPy 和 C/Fortran 等之间只会存在一个数量级的差异。还没有人举出反例,但如果你有反例,请随时给我看。
      猜你喜欢
      • 2015-05-06
      • 1970-01-01
      • 2013-07-25
      • 2021-02-10
      • 2022-01-23
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多