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