2009-06-03 42 views
4

我使用许多不同的模型和模拟。一些较旧的模型和模拟是用FORTRAN编写的。其中一些模型已被转换为C++,但目前的趋势是使用MATLAB/SIMULINK创建这些模型。从计算机科学的角度来看,我一直觉得MATLAB/SIMULINK不是一个好的解决方案。你用什么语言来创建模型和模拟,为什么?建模与仿真编程语言

+0

我真的好奇你为什么觉得MATLAB/SIMULINK不是很好的建模解决方案。你有没有具体的原因,你为什么不喜欢他们/不觉得他们适用于你的模型? – gnovice 2009-06-03 17:09:36

+0

这可能只是我见过的应用程序,但它们运行速度非常慢,并没有充分利用可用的计算机资源。 – SchwartzE 2009-06-03 17:11:45

回答

4

我也使用了很多遗留代码,大部分遗留代码都在Fortran中。我真的不介意使用Fortran - 所有现代编译器都允许使用大于旧的和愚蠢的6个字符限制的变量名称。另外,使用Fortran 95,如果您觉得您对现有代码库的修改会受益,则甚至可以执行OOP。

另外,Fortran有非常好的代码编辑器,对于更专门化的脚本语言并不总是如此。

C++有内存考虑的巨大缺点。现在我已经编程C/C++ 20多年了,我仍然忘记删除对象并正确填写析构函数。

最后,如果您要使用Windows,那么Fortran.NET编译器(我认为来自Lahey-Fujitsu?)如果您想将Fortran移动到托管环境。

祝你好运!

7

我总是尝试使用最好的建模和模拟工具(或库,如果你喜欢)提供的语言为我完成这项工作。

而这个问题只能通过考虑你想要实现的模型的来解答。连续(例如ODE),离散(例如StateCharts,Petri网)或组合(即可以用Simulink + StateFlow实现的混合模型)?每种模型都有各种工具。

另一个重要方面是您正在使用的。 Simulink拥有相当广泛的电子工程,金融或计算生物学库(尽管其中大多数都包含在其他软件包中) - 如果您在其中一个领域工作,那么可能没有更好的(即完整的,有效的)组件库。其他商业模拟软件包也是如此,例如AnyLogic,Arena等。也可能有一些开源模拟工具,这取决于您的建模问题。

最后,您可能更喜欢特定的编程语言而不是另一种语言,并且您可能还有其他要求,例如,对于

  • 优化(模型参数)
  • 验证
  • 产出分析(统计图表,统计检验)
  • 支持并行和分布式仿真支持
  • 模型检测
  • .. 。

所以我目前正在使用Java与众所周知的优势 - 相当快速,良好的多线程支持,相对简单易用等等。但是,如果“相当快”速度不够快,那么可能就没有其他选择,只能进入一个抽象层次:-)

1

粒子物理学已经转向C++和python。这不是普遍的,如果不是ROOT的无处不在,可能甚至不会接近。

Root对cint的使用意味着当你用一个新想法时,你需要为内存管理而烦恼,它的运行编译的容量允许你有速度,混合模式的能力是非常有用的,绑定对于Python和其他RAD语言而言,它具有很大的灵活性。

在一个非常真实的意义上,这归结为roland's point的认可。

4

SIMULA当然!! :-)

2

我从MATLAB中得到的是它能够让我快速对算法进行原型设计。通过绘制数据并使用内置的统计函数,我可以真正感受到数据。当尝试新的东西时,我可以做一些快速和肮脏的事情来获得一些初步结果,然后返回并清理一些事情来优化我的结果。使用编译语言,为了让仿真运行,还需要做很多工作。使用MATLAB,我花了更多时间思考真正的问题,而不是编译,链接,内存管理等。

但是,有很多问题,MATLAB只是没有足够的解决方案。对于大型数据集,使用用户定义的数据结构的编译语言几乎是必要的。

0

您可以使用s-funcuin块将fortran(c,C++)与matlab连接起来。