MATLAB/Simulink中的S函数报错

关于MATLAB/Simulink中的S函数报错: Output returned by S-function 'xxx' in 'xxx' during flag=3 call must be a real vector of length x


S函数在系统仿真时经常用到,它可以实现难以用simulink模块搭建出来的功能,即以代码的方式实现所需功能。最近笔者考虑将带可变参数的传递函数用S-function来实现,遇到以下报错:

程序报错信息
根据报错信息,问题出在‘mdlOutputs’子程序中,原因可能是
① 输出为非实数 ② 输出的长度和初始设置不统一

针对这两个问题,容易发现解决,可参考其他帖子。
笔者检查后发现并不是这两个问题,而是变参数计算的程序位置放错造成的,这是由于对S函数运行过程欠缺理解。

S函数仿真步骤
根据上图S函数仿真步骤,仿真在初始化mdlInitializeSizes(flag=0)后,会通过初始参数计算第一步输出mdlOutputs(flag=3),而并不是定势思维地先更新状态(flag=1或2)。而笔者程序中变参数的计算部分我放在了状态更新子程序mdlDerivatives中,造成计算输出时无法获得参数,计算失败而报错。当把参数更新放到mdlOutputs中,发现问题解决。

所以,当你遇到此问题,并排除已知的两个问题后仍未解决,可考虑是否因为输出计算时参数未知而造成出错。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值