本人对MATLAB/Simulink R2023b版本进行了实际的测试, 经历了仿真结果和理论值偏差超过30%这样大坑的情况, 新手要是依照步骤逐个进行操作的话, 便可毫无压力地绕开这类常……
本人对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 模式。
微信扫一扫
还没有评论呢,快来抢沙发~