2

背景:

我继承了离散事件仿真 MATLAB 模型,并希望自动化并加快其执行速度。我想要一个类似于调用 system('modelName.exe ...') 的解决方案,而不是调用 sim(modelName) 并让 MATLAB 运行解释代码。我这样做的动机来自最初的测试,这些测试表明速度提高了近 1000%。我已经设法使用带有快速模拟目标的实时研讨会来生成具有静态内存分配的 exe。问题是模型中有嵌入式 MATLAB 功能块,每次运行时参数的大小和形状都会有所不同。即使不是数千次,也会有数百次运行。

根据 MathWorks 文档:

嵌入式 MATLAB 功能块不支持动态内存分配:

“您不能在 Embedded MATLAB Function 块中为可变大小数据使用动态内存分配。使用有界而不是无界的可变大小数据。”

问题:

这种限制的潜在解决方法是什么?

想法:

  • 使用足够大的静态变量大小,并另外传递 int 变量/可调参数以显式窗口化要覆盖的数据部分。
  • S函数?
  • 我今天要实现的内容:每次调用模拟以动态生成静态代码时,以编程方式重新编译模拟。
  • 将所有内容移植到真正/现代的编程语言,例如 python 或 c++。

关键词: MATLAB 动态内存分配 嵌入式离散事件仿真 Real-Time Workshop Simulink SimEvents 可调参数

4

2 回答 2

2

几年后继续……我们使用了我在那天实现了一年左右的动态静态重新编译,然后另一个统计开发人员用 C++ 重写了它。每次运行都使用最大可能的内存根本不会浪费计算资源。

于 2013-10-07T10:09:18.483 回答
0

您应该查看此网络研讨会: http: //www.mathworks.com/company/events/webinars/wbnr43180.html。它解释了一个类似于您最初想法的自动解决方案。

于 2011-01-11T12:17:56.767 回答