我使用许多不同的模型和模拟。一些较旧的模型和模拟是用 FORTRAN 编写的。其中一些模型已转换为 C++,但当前趋势是使用 MATLAB/SIMULINK 创建这些模型。从计算机科学的角度来看,我一直觉得 MATLAB/SIMULINK 不是一个好的解决方案。您使用什么语言来创建模型和模拟,为什么?
6 回答
我总是会尝试使用最好的建模和仿真工具(或库,如果你愿意)提供的语言来为我完成这项工作。
而这个问题真的只能通过考虑你想要实现什么样的模型来回答。连续(例如 ODE)、离散(例如 StateCharts、Petri 网)或组合(即混合模型,可以使用 Simulink+StateFlow 实现)?每种模型都有各种工具。
另一个重要方面是您工作的领域。Simulink 为电气工程、金融或计算生物学提供了相当广泛的库(不过,它们中的大多数都包含在附加软件包中) - 如果您在这些领域之一工作,可能根本没有更好(即完整、有效)的组件库. 其他商业仿真包也是如此,例如AnyLogic、Arena等。可能还会有一些开源仿真工具,具体取决于您的建模问题。
最后,您可能更喜欢一种特定的编程语言而不是另一种,并且您可能有其他要求,例如支持
- 优化(模型参数)
- 验证
- 输出分析(统计、绘图、统计检验)
- 支持并行和分布式仿真
- 模型检查
- ...
所以我目前正在使用具有众所周知的优势的 Java——相当快、对多线程的良好支持、相对简单的使用等。但如果“相当快”还不够快,可能别无选择,只能下降一级抽象:-)
我还使用大量遗留代码,其中大部分是 Fortran 代码。我真的不介意使用 Fortran - 所有现代编译器都允许变量名大于旧的和愚蠢的 6 个字符限制。此外,使用 Fortran 95,如果您认为对现有代码库的修改会受益,您甚至可以执行 OOP。
此外,Fortran 有非常好的代码编辑器,但对于更专业的脚本语言并不总是如此。
C++ 在内存考虑方面有很大的缺点。我已经编写 C/C++ 20 多年了,但我仍然忘记删除对象并正确填写析构函数。
最后一点,如果您使用的是 Windows,如果您想将 Fortran 迁移到托管环境,则可以使用 Fortran.NET 编译器(我认为来自 Lahey-Fujitsu?)。
祝你好运!
当然是模拟!!:-)
我从 MATLAB 中得到的是它能够让我快速原型化算法。通过绘制数据并使用内置的统计功能,我真的可以很好地了解数据。当尝试新事物时,我可以做一些快速而肮脏的事情以获得一些初步结果,然后回去清理东西以改进我的结果。使用编译语言,为了让模拟运行,我还有很多工作要做。使用 MATLAB,我花更多的时间思考真正的问题,而不是编译、链接、内存管理等。
但是,MATLAB 无法解决许多问题。对于大型数据集,具有用户定义数据结构的编译语言几乎肯定是必要的。
粒子物理学已经转向 C++ 和 python。这不是普遍的,如果不是因为ROOT的普遍存在,可能甚至不会接近。
Root 对 cint 的使用意味着当你在琢磨一个新想法时,你需要费心管理内存,它的运行编译能力让你有速度,混合模式的能力非常有帮助,以及 python 和其他的绑定RAD 语言具有很大的灵活性。
从非常真实的意义上说,这归结为对罗兰观点的认可。
您可以使用 s-funcuin 块将 fortran(c,c++) 与 matlab 链接。