matlab switch字符串,m函数中SWITCH 表达式必须为标量或字符串常量问题

function [sys,x0,str,ts,simStateCompliance]=EKF(t,x,u,L,R1,J,Ke,H,Q,R,I,B,P)

global  F Z M P K w sita;

switch flag

case 0

[sys,x0,str,ts,simStateCompliance] = mdlInitializeSizes;

case 1

sys = mdlDerivatives(t,x,u);

case 2

sys = mdlUpdate(t,x,u);

case 3

sys = mdlOutputs(t,x,u);

case 4

sys=mdlGetTimeOfNextVarHit(t,x,u);

case 9

sys=mdlTerminate(t,x,u);

sys = []; % do nothing

otherwise

error(['unhandled flag = ',num2str(flag)]);

end

function [sys,x0,str,ts,simStateCompliance] = mdlInitializeSizes(t,x,u,L,R1,Ke,H,Q,R,B,P)

sizes = simsizes;

sizes.NumContStates  = 0;

sizes.NumDiscStates  = 1;

sizes.NumOutputs     = 1;

sizes.NumInputs      = 4;

sizes.DirFeedthrough = 1;

sizes.NumSampleTimes = 1;

sys = simsizes(sizes);

str = [];

x0=[];

ts = [0.0001 0];

simStateCompliance = 'UnknownSimState';

Tc=0.0001;

function sys=mdlUpdate(t,x,u)

x=[u(1);u(2);w];

u=[u(3);u(4)];

sita=w*dt;

F = [-R1/L 0 Ke*sin(sita);0 -R1/L -Ke*cos(sita);0 0 0];

M = I+F*Tc;

t=t-Tc;

x=M*x+B*Tc*u;

P = M*P*M'+Q;         %预报tk时刻的误差的协方差阵P(k|k-1)

sys=x;

function sys = mdlOutputs(t,x,u)

K = P*H'*((H*P*H'+R)^-1);       %计算Kalman滤波器增益K(k)

P = (I-K*H)*P;                  %给出tk时刻的误差协方差的最优估计p(k|k)

x = x+K*([u(1);u(2)]-H*x);

sys = [w];

function sys=mdlGetTimeOfNextVarHit(t,x,u)

sampleTime = 0.0001;

sys = t + sampleTime;

function sys=mdlTerminate(t,x,u);

sys = [];

上述程序在运行时出现“SWITCH 表达式必须为标量或字符串常”的问题,不知哪里出了问题,请求大神指点一下,谢谢!

4mzwzkqwAAAABJRU5ErkJggg==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值