s函数的输出问题
我用s函数编了个异步电机定子磁链u-I模型,出现系统错误:Index exceeds matrix dimensions.Error in ==> d:\MATLAB6p5\work\sflux.m
On line 10==> sys=mdlOutputs(t,x,u);
不知如何解决,希望各位帮忙,谢谢
function = sflux(t,x,u,flag)
switch flag,
case 0,
=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case {2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
% end sfuntmpl
function =mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs = 2;
sizes.NumInputs = 4;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0= [];
str = [];
ts= ;
% end mdlInitializeSizes
% mdlDerivatives
% Return the derivatives for the continuous states.
%=======================================
%输入:u(1)=Uαs,u(2)=Uβs,u(3)=Iαs,u(4)=Iβs
%输出:sys(1)=vαs,sys(2)ψβ
%状态变量:x(1)=ψαs,x(2)=ψβs
% 电机参数:Rs,Pn
function sys=mdlDerivatives(t,x,u)
Rs=0.1165;
sys(1)=u(1)-Rs*u(3);
sys(2)=u(2)-Rs*u(4);
% end mdlDerivatives
%=============================
% mdlOutputs
% Return the block outputs.
%=============================
function sys=mdlOutputs(t,x,u)
sys(1)=x(1);
sys(2)=x(2);
% end mdlOutputs 用sys=;试试 function sys=mdlDerivatives(t,x,u)
Rs=0.1165;
sys(1)=u(1)-Rs*u(3);
sys(2)=u(2)-Rs*u(4);
在这个函数中,因为是连续的系统,所以sys(1)=u(1)-Rs*u(3);sys(2)=u(2)-Rs*u(4);是指它们的导数的值即dx(1)/dt=u(1)-Rs*u(3);dx(2)/dt=u(2)-Rs*u(4);
你在这里没有弄明白S函数里面的东西如果你要做的东西室和时间没关系的式子即
x(1)=u(1)-Rs*u(3);x(2)=u(2)-Rs*u(4);
那么你就直接用
function sys=mdlOutputs(t,x,u)
x(1)=u(1)-Rs*u(3);x(2)=u(2)-Rs*u(4);
sys(1)=x(1);
sys(2)=x(2);
就可以了 就不用调用mdlDerivatives(t,x,u)函数了
建议你再看看关于S函数的书
感觉你还是没弄明白s函数的真谛 function sys=mdlDerivatives(t,x,u)
Rs=0.1165;
sys(1)=u(1)-Rs*u(3);
sys(2)=u(2)-Rs*u(4);
在这个 ...
lfq19851126 发表于 2009-3-9 18:17 http://bbs.simol.cn/images/common/back.gif
有关于PMSM DTC写的扩展卡尔曼滤波器S-function的例子么?传份给我!e-mail:394441579@qq.com
页:
[1]