声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2391|回复: 7

[综合讨论] 跪求!!S函数编写遇到的问题 !

[复制链接]
发表于 2010-3-14 17:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
高手指点一下 帮忙看看这个程序有什么问题 谢谢!
此s函数目的是实现Uk=Zd*U(k-1)/Z(k-1)   

function [sys,x0,str,ts] = MIIC(t,x,u,flag,Zd,Uk,Zk,U(k-1),Z(k-1))
switch flag,
   
  case 0,
    [sys,x0,str,ts]=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 [sys,x0,str,ts]=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
回复
分享到:

使用道具 举报

 楼主| 发表于 2010-3-14 17:20 | 显示全部楼层

回复 楼主 liukuncyj111 的帖子

补充:U(k-1)是Uk上一次的值,Zk也是 ,请高手看一下 变量定义有什么问题,程序有什么问题 谢谢!
发表于 2010-3-14 18:55 | 显示全部楼层
无需这么麻烦吧
s函数有很多例子的
 楼主| 发表于 2010-3-15 10:02 | 显示全部楼层

回复 板凳 Matlabsim 的帖子

感谢楼上的回复,能不能说具体点呀 我刚学simulink,楼上说的s函数例子很多事什么意思...
发表于 2010-3-16 20:17 | 显示全部楼层
你的k是什么 没有付值
 楼主| 发表于 2010-3-19 11:01 | 显示全部楼层

回复 5楼 yufeng 的帖子

k是迭代次数,这个k还用复制么?问题是我这个s函数是3个输入一个输出,小弟不知道这3个输怎么接到s函数上 用mux接?那么我在程序中用u(1) u(2) u(3)来表示这3个输入可以么?应该怎么来表示这3个输入啊?另外其中输入还由k的次数递增 来迭代。请问 我这个程序改怎么改?
发表于 2010-3-20 12:47 | 显示全部楼层
你知道这是迭代次数 电脑可不知道 另外你的三个输入 没有用到 输入用的是u(1) u(2) u(3) 总体来说s函数有自己的格式 必要严格按照格式编写程序
 楼主| 发表于 2010-3-22 11:29 | 显示全部楼层

回复 7楼 yufeng 的帖子

感谢指教!! 我把程序改了一下,里面没有设置迭代次数 K 但是能运行 麻烦帮我看一下哪个地方不对。小弟先谢了!
function [sys,x0,str,ts] = MIIC(t,x,u,flag,a)
global a
switch flag,
   
  case 0,

    [sys,x0,str,ts]=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 [sys,x0,str,ts]=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=[];
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-27 18:43 , Processed in 0.076862 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表