声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1359|回复: 0

麻烦高手帮忙看看s函数的错误

[复制链接]
发表于 2007-4-27 16:20 | 显示全部楼层 |阅读模式

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

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

x
s函数代码如下:
function [sys,x0,str,ts]=ercichazhi(t,x,u,flag)
  global P m D1 D2 D3 P1 P2 P3 D
  %P=0;
  m=0;
  %D=0.5;
  %D1=0;D2=0.5;D3=1;P1=0;P3=0;
  switch flag,
        case 0,
            [sys,x0,str,ts]=mdlInitializeSizes(P,m,D1,D2,D3,P1,P2,P3,D);
        case 1
            sys=mdlDerivatives(t,x,u);
        case 2
           sys=mdlUpdate(t,x,u,P,m,D1,D2,D3,P1,P2,P3,D);
        case 3,
            sys=mdlOutputs(t,x,u,P,m,D1,D2,D3,P1,P2,P3,D);
        case 4
           sys=mdlGetTimeOfNextVarHit(t,x,u);
        case 9
            sys=mdlTerminate(t,x,u);
        %case {1,2,9}
          %  sys=[];
        otherwise
            error(['Unhandled flag=',num2str(flag)]);
    end
    function [sys,x0,str,ts]=mdlInitializeSizes(P,m,D1,D2,D3,P1,P2,P3,D)
        sizes=simsizes;  % 调用simsizes获得一个用于存放长度信息的结构
        sizes.NumContStates=0; %设置连续状态的个数
        sizes.NumDiscStates=1; %设置离散状态的个数
        sizes.NumOutputs=1;  %设置输出信号的个数
        sizes.NumInputs=1; %设置输入信号的个数
        sizes.DirFeedthrough=0;
        %设置直接反馈的状态:0表示没有直接反馈,1表示存在直接反馈
        sizes.NumSampleTimes=1; %设置抽样时间的个数(大于等于1)
        sys=simsizes(sizes);  %通过simsizes把sizes结构返还给sys
        x0=[0];  %设置S函数的初始状态x0
        str=[]; %设置S函数的保留参数str(应该设置为空向量)
        ts=[0.000002 0]; %初始化抽样时间
      
        %================================
        
       function sys=mdlDerivatives(t,x,u)
           sys=[]; %计算S函数连续状态的导数并且通过sys参数返还给Simulink
            
            %======================================================
        function sys=mdlUpdate(t,x,u,P,m,D1,D2,D3,P1,P2,P3,D)
            
           if m>=3 & P3<u               %进行比较,确定包含最大值的最小空间
                      {
                    D1=D2,P1=P2;D2=D3,P2=P3;D3=D,P3=u;  此处错误:the expression  to the left of  the equals sign is  not a valid
                                                                                                     target for an assignment
                   D=(m+1)*0.05;
                    m=m+1;
                   sys=D;
                    }
           elseif m>=3 & P3>=u
                   {
                       D1=D2,P1=P2;D2=D3,P2=P3;D3=D,P3=u;
                       m=0;
                      C1=(P3-P1)/(D3-D1);
                       C2=((P2-P1)/(D2-D1)-C1)/(D2-D3);
                       D=0.5*(D1+D3-C1/C2);
                        sys=D;
                        }
            else          % 穷举点不到三个时,先进行D1,D2,D3的初始化
                     {
                         switch m
                           case 0
                              D1=0,P1=u;
                                D=(m+1)*0.5;
                               m=m+1;
                               sys=D;
                           case 1
                                 D2=D,P2=u;
                               D=(m+1)*0.5;
                               m=m+1;
                                 sys=D;
                          case 2
                              D3=D,P3=u;
                              D=(m+1)*0.5;
                             m=m+1;
                             sys=D;
                         end
                         }
            end
              
            %更新S函数的离散状态并且通过sys参数返还给Simulink
        %========================================================
        function sys=mdlOutputs(t,x,u,P,m,D1,D2,D3,P1,P2,P3,D)
              
               %while m<20
              % for i=0:50000000;%延时循环
                 % d=i;
               %end
                   % m=m+1;
                    sys=x;
              
               %end
               %计算S函数的输出信号并且通过sys参数返还给Simulink
        %========================================================
         function sys=mdlGetTimeOfNextVarHit
             %sys=[];   
             sampleTime=1;
                sys=t+sampleTime;
                %下一个抽样时刻设置为与当前时刻相差1秒
             %==================================================
            function sys=mdlTerminate(t,x,u)
                sys=[]; %设置返回参数sys为空矩阵[]

麻烦高手帮忙看看啊,不胜感激!!!
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-26 20:53 , Processed in 0.084652 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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