我对MATLAB/Simulink R2023b版本进行了实际的测试,经历了仿真结果和理论值偏差超过30%这样大坑的情况。
参数设置检查与模型验证
开启Simulink模型,步入Model Settings菜单。开始的首要步骤,去触动那个名为Solver的选项卡,把其中的Type进行设定,调整为Fixed-step这种状态,针对Solver的选型,要挑选为ode4 (这个ode4是Runge-Kutta类型的),在Fixed-step size这个地方,填进去0.001这个数值。这种参数方面的组合,能够有力地防止,由于变步长算法而导致的仿真结果出现不收敛的情况。
针存在需要避免陷入的坑,有这样一种常见的报错方式,即“Derivative of state ‘1’ in block ‘xxx’ at time 0.0 is not finite”,而其中的核心原因在于,要么是积分步长过大,要么是初始条件并不合理。以下是快速解决办法,在模型当中操作,选中Integrator模块进而插入,双击该模块使其打开,把Initial condition从原本默认的0这一数值调整为实际物理初值后,再同时勾选Limit output,随后设置相关的上下限范围完毕之结果达成的一系列操作过程。
这样就能方便后续对比分析。
有这样一个【新手避坑】情况,不少人会直接于Scope界面处拖拽光标去读数,此时产生的误差是极大的。而正确的做法呈:在MATLAB命令窗口当中输入plot(sim_data.time, sim_data.signals.values),后续通过代码描绘图形来观察数据点的分布情况,进而借此去避免因图形缩放所作成的视觉误判。
两种仿真方案对比与选择
方案A:针对单一情况仿真情况。在Model Settings的Solver选项卡当中,将Start time设定成为0,把Stop time设定成为5这种情况。这样的方式适宜用来快速验证处于单一工作点时的系统响应情况,仿真所需时间比较短,不过没办法全面评价系统动态性能状状。
方案B:针对多工况进行批处理式仿真。在MATLAB脚本里写入循环体:设定i从1取值至5;将参数‘model_name’的‘SimulationCommand’属性值设为‘start’;把sim(‘model_name’)的执行结果赋值给simOut(i)。此方式可获取不同参数情况下的完整响应曲线,不过要额外去编写数据处理代码。
实际项目里头,要是进行快速原型验证的话,推荐方案A,它效率挺高;要是针对最终产品性能评估,那就务必要用方案B。关键参数最优推荐数值是:把Max step size设定成1e – 4,原因在于这个数值能够确保采样点数超出10万个,满足Nyquist采样定理,防止因频率混叠导致的结果失真。
完整报错处理流程
高频率出现的完整报错内容为: “无法对涉及‘model_name/Subsystem1’的代数环路进行求解”。一种一步到位的解决流程如下:第一步,用鼠标双击报错路径里的Subsystem1,从中找寻环路反馈信号。第四步,重新运行仿真,报错不再出现。
在此提醒新手需注意避开相关误区,当插入Unit Delay之后,所产生的输出信号将会出现延迟一个采样周期的情况能呈现。要是并且如果在此种情况或者条件下,系统对于相位是呈现出敏感状态的,那么就能够选用Memory模块来进行替代操作,该模块所产生的延迟仅仅只是一个步长的幅度,相较于对相位所造成的影响而言,它所带来的影响会更小一些。
本办法不适用于全然连续系统的稳态剖析,像热力学仿真里平衡态的收敛判断这种情况。替代的方案:去改用 Simscape 物理网络办法,或者直接于 Simulink 当中开启Continuous 求解器类型,再配合 Variable-step 模式。










