【问题标题】:Modeling and Simulation Programming Language [closed]建模和仿真编程语言
【发布时间】:2010-10-31 01:23:42
【问题描述】:

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

【问题讨论】:

  • 我真的很好奇为什么你觉得 MATLAB/SIMULINK 不是好的建模解决方案。您是否有具体原因不喜欢它们/觉得它们不适用于您的模型?
  • 这可能只是我看到的应用程序,但它们都运行得非常慢,并且没有充分利用可用的计算机资源。
  • 我对 Matlab/Simulink 模型最大的不满是我没有见过一个多线程模型。处理器并没有真正变得更快,只是更多了。如果一个模拟不能很好地处理多个线程,那么它在编写之后就不会变得更快。
  • @SchwartzE:较新版本的 MATLAB 现在具有可在多核机器和集群上使用的并行功能,体现在并行计算工具箱中:mathworks.com/products/parallel-computing。我还没有用它做任何大型或复杂的模拟/计算,但我玩过的东西看起来很有希望。

标签: matlab model fortran simulation simulink


【解决方案1】:

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

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

另一个重要方面是您工作的。 Simulink 为电气工程、金融或计算生物学提供了相当广泛的库(不过,它们中的大多数都包含在附加软件包中) - 如果您在这些领域之一工作,可能根本没有更好(即完整、有效)的组件库.其他商业仿真包也是如此,例如AnyLogicArena 等。可能还有一些开源仿真工具,具体取决于您的建模问题。

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

  • 优化(模型参数)
  • 验证
  • 输出分析(统计、绘图、统计检验)
  • 支持并行和分布式仿真
  • 模型检查
  • ...

所以我目前正在使用 Java,它具有众所周知的优势——相当快、对多线程的良好支持、相对简单的使用等。但如果“相当快”还不够快,则可能别无选择但是下降了一层抽象:-)

【讨论】:

    【解决方案2】:

    我还使用大量遗留代码,其中大部分是在 Fortran 中。我真的不介意使用 Fortran - 所有现代编译器都允许变量名大于旧的和愚蠢的 6 个字符限制。此外,使用 Fortran 95,如果您认为对现有代码库的修改会受益,您甚至可以进行 OOP。

    此外,Fortran 也有非常好的代码编辑器,但对于更专业的脚本语言而言,情况并非总是如此。

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

    最后一点,如果您使用的是 Windows,如果您想将 Fortran 迁移到托管环境,则可以使用 Fortran.NET 编译器(我认为来自 Lahey-Fujitsu?)。

    祝你好运!

    【讨论】:

      【解决方案3】:

      当然是模拟!! :-)

      【讨论】:

      • +1 当我阅读这个问题时,我正在考虑是否发布一个答案,或者只是一个带有指向 [SIMULA][1] [1] 的评论:en.wikipedia.org/wiki/Simula
      【解决方案4】:

      我从 MATLAB 中得到的好处是它能够让我快速构建算法原型。通过绘制数据并使用内置的统计功能,我真的可以很好地了解数据。当尝试新事物时,我可以做一些快速而肮脏的事情来获得一些初步结果,然后回去清理东西以改进我的结果。使用编译语言,为了让模拟运行,我要做的还有很多。使用 MATLAB,我花更多时间思考真正的问题,而不是编译、链接、内存管理等。

      但是,MATLAB 无法解决许多问题。对于大型数据集,具有用户定义数据结构的编译语言几乎肯定是必要的。

      【讨论】:

        【解决方案5】:

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

        Root 对 cint 的使用意味着当你在寻找新想法时需要费心管理内存,它的运行编译能力让你有速度,混合模式的能力非常有用,并且绑定python 和其他 RAD 语言具有很大的灵活性。

        实际上,这归结为对roland's point的认可。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2014-07-24
            • 1970-01-01
            • 2014-04-25
            • 2012-07-17
            • 2011-06-21
            • 2014-12-07
            • 2014-09-01
            • 1970-01-01
            • 2010-09-12
            相关资源
            最近更新 更多