跪求!!S函数编写遇到的问题 !
高手指点一下 帮忙看看这个程序有什么问题 谢谢!此s函数目的是实现Uk=Zd*U(k-1)/Z(k-1)
function = MIIC(t,x,u,flag,Zd,Uk,Zk,U(k-1),Z(k-1))
switch flag,
case 0,
=mdlInitializeSizes;
case 1,
sys=[];
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u,Zk,Zd,U(k-1));
case 4,
sys=[];
case 9,
sys=[];
otherwise
error('unhandledFlag', num2str(flag));
end
function =mdlInitializeSizes
% Call function simsizes to create the sizes structure.
sizes = simsizes;
% Load the sizes structure with the initialization information.
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs= 1;
sizes.NumInputs= 3;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=0;
% Load the sys vector with the sizes information.
sys = simsizes(sizes);
%
x0 = []; % No continuous states
%
str = []; % No state ordering
%
ts = [-1 0]; % Inherited sample time
% End of mdlInitializeSizes.
%==============================================================
% Function mdlOutputs performs the calculations.
%==============================================================
function sys = mdlOutputs(t,x,u,Zk,Zd)
syms Zd Z(K-1)
a=1;
U0=a*Zd;
if Z(k)~=0
for k=1:100
Uk=U(k-1)*Zd/Z(k-1);
if abs((Zk-Zd)/Zd)>=1
U(k-1)=Uk;
Z(k-1)=Z(k-2);
else
sys=Uk;
end
end
end
回复 楼主 liukuncyj111 的帖子
补充:U(k-1)是Uk上一次的值,Zk也是 ,请高手看一下 变量定义有什么问题,程序有什么问题 谢谢! 无需这么麻烦吧s函数有很多例子的
回复 板凳 Matlabsim 的帖子
感谢楼上的回复,能不能说具体点呀 我刚学simulink,楼上说的s函数例子很多事什么意思... 你的k是什么 没有付值回复 5楼 yufeng 的帖子
k是迭代次数,这个k还用复制么?问题是我这个s函数是3个输入一个输出,小弟不知道这3个输怎么接到s函数上 用mux接?那么我在程序中用u(1) u(2) u(3)来表示这3个输入可以么?应该怎么来表示这3个输入啊?另外其中输入还由k的次数递增 来迭代。请问 我这个程序改怎么改? 你知道这是迭代次数 电脑可不知道 另外你的三个输入 没有用到 输入用的是u(1) u(2) u(3) 总体来说s函数有自己的格式 必要严格按照格式编写程序回复 7楼 yufeng 的帖子
感谢指教!! 我把程序改了一下,里面没有设置迭代次数 K 但是能运行 麻烦帮我看一下哪个地方不对。小弟先谢了!function = MIIC(t,x,u,flag,a)
global a
switch flag,
case 0,
=mdlInitializeSizes(a);
case 1,
sys=mdlderivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u,a);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);
otherwise
error('unhandledFlag', num2str(flag));
end
function =mdlInitializeSizes(a)
% Call function simsizes to create the sizes structure.
sizes = simsizes;
% Load the sizes structure with the initialization information.
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs= 1;
sizes.NumInputs= 3;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
% Load the sys vector with the sizes information.
sys = simsizes(sizes);
%
x0 = []; % No continuous states
%
str = []; % No state ordering
%
ts = [-1 0]; % Inherited sample time
% End of mdlInitializeSizes.
function sys=mdlDerivatives(t,x,u)
sys=[];
function sys=mdlUpdate(t,x,u)
sys=[];
%==============================================================
% Function mdlOutputs performs the calculations.
%==============================================================
function sys = mdlOutputs(t,x,u,a)
% U =u(1);
% Z =u(2);
% Zd=u(3);
for k=0:1:20
if k<1
u(1)=a*u(3);
else
if u(2)==0
u(1)=0;
else
if abs((u(1)-u(3))/u(3))>=1
u(1)=u(1)*u(3)/u(2);
end
end
end
sys=u(1);
end
function sys=malGetTimeOfNextVarHit(t,x,u)
sampleTime=1;
sys =t+sampleTime;
function sys=mdlTerminate(t,x,u)
sys=[];
页:
[1]