PDA

查看完整版本 : [求助]s函数的输出问题


shevchen7
2008-12-10, 20:12
我用s函数编了个异步电机定子磁链u-I模型,出现系统错误:Index exceeds matrix dimensions.
Error in ==> d:\MATLAB6p5\work\sflux.m
On line 10 ==> sys=mdlOutputs(t,x,u);
不知如何解决,希望各位帮忙,谢谢

function [sys,x0,str,ts] = sflux(t,x,u,flag)

switch flag,
case 0,
[sys,x0,str,ts]=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 [sys,x0,str,ts]=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 = [0 0];
% 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

rongxianliang
2008-12-12, 11:34
首先:
sizes.NumContStates = 0;
如果连续状态的要改为2
其次
sizes.DirFeedthrough = 1要改为0
因为你的输出没有直馈
再次
x0 = [];是不是要改为[0,0]
最后
检查输入是不是四个,输出是不是两个

shevchen7
2008-12-13, 18:54
谢谢2楼,非常感谢