在老电脑上 算一个模型就发散 但是同样的文件直接复制给16a就能收敛 而且我一秒算41步 老电脑上第一步的数据都是对的 但是从地42步开始就不对劲了 我感觉可能是循环读取出问题了 会是版本更新语言命令也稍微变化一点吗
可以尝试在高版本的 Matlab 中将 Simulink 文件导出为低版本的格式,以便在低版本的 Matlab 中打开。具体操作方法是在高版本 Matlab 中,选择 File->Export Model to->Previous Version,并选择要转换的版本[1]。
此外,可以在低版本的 Matlab 中设置"取消不加载新版本模型",以便在低版本中正常打开、编辑和运行高版本创建的 Simulink 文件。操作方法如下[2]:
打开低版本的 MATLAB 软件;
进入到 Simulink 环境;
新创建一个空的 Simulink 模型;
进入 Simulink 的参数选择 "SimuLink Preferences",操作如下:File->SimuLink Preferences;
进入 Model File 属性框;
在 Model File 属性中,取消勾选"禁止旧版本加载新版本创建的模型文件"。
不过,需要注意的是,如果新版本中存在新的仿真模块,低版本可能无法正确显示这些模块[3]。在这种情况下,最好的解决方案可能是尝试升级到较新的 Matlab 版本,以避免兼容性问题导致仿真结果不一致。
首先,鄙人无法指出该问题的原因。可能是您定位的循环读取问题,也可能是其他的问题,因为simulink中的影响因素非常多。您还可以确认一下两者的求解算法是否相同,即Solver的设置,定步长、变步长,ode45、ode23、ode113等算法,其敛散性可能存在差异。
其次,matlab不同版本的语法确实存在细微的不同,例如结构体的“.”索引,字符数组和字符串 的 双引号和单引号 创建,这些在14年之前可能是不存在的。相比旧版本,新版本除了会添加新的函数,还会适当的删去部分指令。
以上,
希望能对您有所帮助。
答案:根据参考资料,Simulink模型在不同版本中收敛性差异有可能是由于版本更新后语言命令发生变化导致,也有可能是由于步长、算法问题导致。同时,如果在老电脑上,每秒只能运行41步,且从第42步开始出现错误,可能跟步长设置有关。可以尝试减小步长或更改Solver Options来尝试解决。如果以上方法都不行,可以考虑添加或修改饱和模块等来优化模型。总之,需要具体分析具体问题,结合参考资料进行调试和优化。
代码示例: 减小步长:在Simulation->Configuration Parameters->Solver options中将Fixed-step size的值缩小。 更改Solver Options:在Simulation->Configuration Parameters->Solver type中选择不同的算法。 添加饱和模块:在Simulink模型中添加饱和模块来限制输出范围。例如,可以在Simulink库中搜索saturate模块并添加到需要限制输出范围的信号上。