用于模拟动态系统的 C++ 替代方案

计算科学 模拟 非线性方程
2021-11-30 13:37:10

我正在寻找 Matlab/Simulink 和 Dymola 的替代品来模拟非线性动态系统。我知道可以在没有大量代码和可以进行固定步长模拟的良好模拟器模板的情况下实现时域行为,但我不想重新发明轮子。

我基本上是在寻找一个模板库,它允许我定义我的系统,将其传递给模拟器并使用其他 C++ 库分析结果。结果将提供一个系统识别代码,该代码将模拟系统调整为实验中收集的数据。后来,我想使用同一套库来为我的真实系统设计一个控制器。

我不想使用 Matlab/Simulink 或 Dymola,因为我在家里无法使用它们,也不想购买它们。Matlab、Simulink、系统识别工具箱和我在这个项目中可能需要的所有其他工具箱对于我一个人来说太贵了。

谷歌搜索显示了一些候选人,但他们似乎并不十分活跃。我发现的最新更新是在 2011 年。这里有没有人真正使用过这样的库并且可以推荐一个?

2个回答

如果您正在寻找功能集大致相当于 MATLAB,但模板化 C++ 的东西,Boost.odeint 可能是您最接近的,ode15s用四阶 Rosenbrock 方法替换 NDF/BDF 方法,没有 DAE解决能力。

Trilinos是由桑迪亚国家实验室编写的大型模板化 C++ 数值库。有了它,你几乎可以做任何你能想到的事情,包括你的动力系统的自动微分以生成雅可比矩阵信息,如果你愿意的话。在可用于非线性动力系统的 C++ 模板库的设计空间中,就特性和学习曲线而言,它可能是另一个极端。

用于动态系统的已建立的模板化 C++ 库并不多。大多数是用 C 或 Fortran 编写的(例如,SUNDIALSErnst Hairer 的代码集)。