提高仿真速度
有几个因素可能会减慢仿真速度。请检查您的模型是否存在以下情况。
该模型包括 Interpreted MATLAB Function 模块。当模型中包含 Interpreted MATLAB Function 模块时,每个时间步都会调用 MATLAB® 执行引擎,从而导致仿真速度大大降低。尽可能使用 Math Function 模块。
模型中包含 MATLAB 文件 S-Function。MATLAB 文件 S-Function 也会在每个时间步调用 MATLAB 执行引擎。请考虑将 S-Function 转换为子系统或 C-MEX 文件 S-Function。
模型中包含 Memory 模块。使用 Memory 模块会导致变阶求解器(
ode15s
和ode113
)在每个时间步都重置回 1 阶。最大步长太小。如果您更改了最大步长,请尝试使用默认值 (
auto
) 再次运行仿真。准确性要求太高。默认的相对容差(0.1% 精度)通常就已足够。对于状态会变为零的模型,如果绝对容差参数太小,仿真可能会围绕接近零的状态值执行太多步。请参阅Maximum order中有关此错误的讨论。
时间太长。缩短时间间隔。
您的模型表示刚性的系统,但您使用的是非刚性求解器。尝试使用
ode15s
。有关详细信息,请参阅刚性系统。您的模型使用的采样时间不是互为倍数。混合不是互为倍数的采样时间会导致求解器采用足够小的步长,以确保计算所有采样时间的采样时间命中点。
模型包含代数环。代数环的解在每个时间步迭代计算。因此,它们大大降低了性能。有关详细信息,请参阅代数环概念。
您可以检查模型模块的以下情况:
模型将 Random Number 模块馈送给 Integrator 模块。对于连续系统,请使用 Sources 库中的 Band-Limited White Noise 模块。
模型中包含的波形查看器显示太多数据点。尝试调整可能影响性能的查看器属性设置。有关详细信息,请参阅 Scope Viewer。
您需要对模型进行迭代仿真。您可以在迭代之间更改可调参数,但不要对模型进行结构性更改。每次迭代都需要重新编译模型,因此增加了整体仿真时间。请使用快速重启执行迭代仿真。在此工作流中,模型仅编译一次,而且迭代仿真仅限于单个编译阶段。有关详细信息,请参阅How Fast Restart Improves Iterative Simulations。