粒子跟踪代码 - MATLAB 与 C++

计算科学 matlab 模拟 C++
2021-12-18 01:11:47

首先是一些背景,我是一名数学家,接受过很少的正式编程培训。我对 MATLAB 最满意,并且已经使用它很长时间了。我的第二个选择是 C++。但在这两种语言中,我编写的最长最复杂的代码可能在一百到两百行之间。

我将很快开始编写一些代码来跟踪各种电磁场配置中的带电粒子,首先是 2D,然后是 3D。这引发了我和朋友的争论,我应该用 MATLAB 还是 C++ 来写这个。

我向这个社区提出的问题,在 MATLAB 上用 C++ 进行这样的计算到底有什么好处(如果有的话)?考虑 MATLAB 中可用的所有函数/工具箱

1.我可以在 MATLAB 中用一行代码完成在 C++ 中可能需要几十个的事情(我知道的老经典论点)

2.例如,我不必实现任何 ODE 求解器(如 RK45)。我需要的所有这些东西都已经过有效的测试和实现,所以我可以少做一件事来编码/调试/担心。

3.插值程序也是如此,2D-3D插值变得非常混乱,在MATLAB中超级超级简单

4. 可视化也是如此。一旦我有了数据,就很容易看。

5.其中很大一部分可以向量化,因此我认为 MATLAB 代码会非常高效。没有太多的循环或任何东西。

6.我只需要小规模的共享内存并行化(在 C++ 中我会使用 OpenMP),并且 MATLAB 已经有一个很好的易于使用的并行工具箱。

7.MATLAB 脚本可以从命令行运行,并且我们的本地超级计算机已经安装了它(具有足够多的许可证),所以我实际上可以在我们的超级计算机上运行我的 MATLAB 脚本。只需调用多个实例,如有必要,每个实例都有 6-8 个线程。

那么我应该使用 C++ 而不是 MATLAB 有什么真正的理由吗?我将是唯一一个开发,然后是唯一一个使用它的人。我肯定会在接下来的一两年内使用它,之后我还不知道。所有“真正的”程序员都告诉我,所有“真正的”编程都应该用“真正的”编程语言(即 FORTRAN 或 C)来完成。但是今天,至少对于数学/科学计算问题,它似乎非常陈旧和过时。有没有我没有考虑过的真正原因,还是只是历史上的非理性偏见?

1个回答

你的问题在这个网站的话题边缘摇摇欲坠,但这是我的 ha'pennyworth

就个人而言(请参阅,这是一个观点,这就是您的问题接近题外话的地方),作为一个真正的程序员写作(Fortran,Matlab,Mathematica,当我必须使用 C 时,当枪指着我的头时使用 C++)我不能指责您坚持使用 Matlab 的原因。

如果任何真正的程序员嘲笑您选择的 Matlab,为什么,只是回应好吧,当然,如果需要的话,我可以用 C++ 编写性能关键部分并将它们编译成 MEX 文件

我的另一个观点是,实际上很难用 C++ 编写性能关键的计算内核,它们 (a) 比 Matlab 内在函数更快,(b) 更可靠/稳健/准确。Mathworks 在优化许多基本功能的执行方面付出了很多努力。Matlab 函数经常调用定制版本的 BLAS(或类似版本),它是 C++(或其他语言)编译的产物。

最后,在 Matlab 的支持点列表中添加另一个项目:

8 自 R2013a 以来,Matlab 的核心工具箱现在包含一个单元测试框架