sunnyfighter
2010-02-28, 16:55
给这个分段函数编写了S函数的M文件,怎么调试总报错呢,各位高手帮忙看下,
分段函数:
f(x)=1 (x<m)
f(x)=(n-x+m)/n (m<x<n)
f(x)=0 x>m+n
其中m,n为常数。
M文件:
function [sys,x0,str,ts] = system(t,x,u,flag)
switch flag,
case 0
[sys,x0,str,ts] = mdlInitializeSizes;
case 3
sys=mdlOutput(t,x,u);
case {1,2,4,9}
sys=[];
otherwise
error(['Unhandled flag=',num2str(flag)]);
end;
function [sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates=0;
sizes.NumDiscStates=0;
size.NumOutputs=1;
size.NumInputs=1;
size.DirFeedthrough=1;
size.NumSampleTimes=1;
sys=simsizes(sizes);
x0=[];
str=[0];
ts =[0 0];
function sys=mdlOutputs(t,x,u)
if x0<0.5
sys=1
elseif x0>1.5
sys=0
else
sys=(1-x0+0.5)/1
end
分段函数:
f(x)=1 (x<m)
f(x)=(n-x+m)/n (m<x<n)
f(x)=0 x>m+n
其中m,n为常数。
M文件:
function [sys,x0,str,ts] = system(t,x,u,flag)
switch flag,
case 0
[sys,x0,str,ts] = mdlInitializeSizes;
case 3
sys=mdlOutput(t,x,u);
case {1,2,4,9}
sys=[];
otherwise
error(['Unhandled flag=',num2str(flag)]);
end;
function [sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates=0;
sizes.NumDiscStates=0;
size.NumOutputs=1;
size.NumInputs=1;
size.DirFeedthrough=1;
size.NumSampleTimes=1;
sys=simsizes(sizes);
x0=[];
str=[0];
ts =[0 0];
function sys=mdlOutputs(t,x,u)
if x0<0.5
sys=1
elseif x0>1.5
sys=0
else
sys=(1-x0+0.5)/1
end