与使用 Matlab 相比,在 Python 中编写数学模型要多做多少工作?

计算科学 matlab Python 职业发展
2021-11-27 03:12:13

如果必须为大学的研究小组编写一个新的动态系统,并且该大学拥有 Matlab 总人数许可证,以便可以在 Matlab 中编码,那么用 Python 编码有什么好处吗?使用 Python 编写代码比使用 Matlab 编写代码要多多少工作?大概是代码行的两倍吧?

例如,在 Matlab 中可以使用ode45求解器 - 但是如何在 Python 中求解 ODE 系统?写出一个数值方法......手动?

总有一天,我将不再是实验室的一员,我要么自己购买 Matlab,要么学习 Python,所以我想知道过渡是怎样的,以及迟早用 Python 编码是否更好。此外,行业雇主似乎喜欢 Python,而不是 Matlab。

3个回答

从 MATLAB 到 Python 确实引入了相当多的语法开销。量化它的一种方法是漂亮的QuantEcon 备忘单,它展示了尝试在 Python 中编写简单的线性代数命令时如何发生许多额外的“东西”。冗长的 NumPy 语法实际上只是它没有被开发为技术计算语言的一种症状,因此与 MATLAB 和 Julia 等语言不同,像线性代数中的科学计算命令并没有得到很好的特殊语法。这是一个小问题,但它确实加起来。

一般来说,您可以执行您在 MATLAB 中所做的操作并将其转换为 Python,但有一些注意事项。Python 中的标准科学库中有很多领域仍未开发。例如,在 SciPy 中您不会找到 DAE,因此没有直接替代ode15i. 此外,基准测试确实表明,从 MATLAB 迁移到 Python 会对非刚性 ODE 产生性能影响,如果不使用odeintLSODA. 这就是 SciPy 微分方程支持的阴暗面出现的地方。odeintLSODA包装器是迄今为止它最有效的方法,但事实证明它们缺少很多功能。如果您搜索solve_ivp 文档页面,例如,您会看到雅可比稀疏处理和许多其他选项在使用这些方法时不可用,这意味着当棘手的问题变得困难时,SciPy 并没有真正的好选择。还有很多其他问题需要指出,比如它的事件处理系统的稳定性等等。所以“它支持”很多(但不是全部)来自 MATLAB 的东西,但在很多情况下,你只能使用该选项,如果您使用缓慢的方法和/或功能容易出现错误

但是您可能还想查看其他替代方案。Octave 和 Scilab 是免费的 MATLAB 替代品,但再次缺少您期望 MATLAB 提供的许多微分方程求解器功能,例如 DAE 上的事件处理。我还发现R 的 deSolve比 SciPy 表现得更好,所以这也值得一看。

但是,您可能首先要考虑的一种选择是 Julia。如上面的基准测试所示,从 MATLAB 切换到 Julia 可以提供大约 100 倍的加速(通常我们在实际场景中看到大约 20-30 倍)。Julia 中的DifferentialEquations.jl 库有一个 MATLAB ODE 套件的功能超集,其中包括 ODE、SDE、DAE、DDE 等的高阶、隐式、自适应等方法。事件处理功能更全面,例如允许在此过程中更改 ODE 的数量,并且库中内置了自动 GPU 加速具有伴随敏感性的参数估计等功能。

如果您想更深入地了解现有技术,我写了一篇博文,详细介绍了这些方法是什么,它们背后的历史,以及它们是如何演变/继续被包装的。

(披露:我是 Julia DifferentialEquations.jl 库的开发人员,因此请随时点击链接,查看文档,并在您自己的计算机上重新运行基准测试以独立验证任何陈述。)

您可以在 Python 中使用一些库,这些库将为您提供 MATLAB 的所有(或至少几乎所有)功能。例如,scipy.integrate.solve_ivp() 支持多种 ODE 集成方法,这些方法与您在 MATLAB 中使用各种 odexxx() 函数可以获得的方法相当。所以不,您不必编写自己的 ODE 积分器。

您是否发现 Python 和各种库与 MATLAB 一样易于使用或得到很好的支持,这是一个不同的问题,而且确实是一个见仁见智的问题。您还谈到了离开大学后可能无法获得 MATLAB 许可证的问题。

学习 Python 可以让您解决许多文本文件解析/处理和操作任务(它是通用语言)。

但是你应该以一种对团队有用的方式编写代码,即使在你离开的情况下也是如此。因此,如果没有其他人将 Python 与库一起使用,那么成为流氓 Python 编码器将是一个坏品味。询问小组领导。也许他们有兴趣让某人探索 Python,有选择权。也许其他人已经这样做了,并且发现了您尚未意识到的缺点。

也许你会在一边自学 Python,当一些 Python 擅长的文件解析任务面对你的团队时,你就会准备好应对它们。