spare 发表于 2007-4-27 16:20

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

s函数代码如下:
function =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,
            =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 =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=;%设置S函数的初始状态x0
      str=[]; %设置S函数的保留参数str(应该设置为空向量)
      ts=; %初始化抽样时间
      
      %================================
      
       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 expressionto the left ofthe equals sign isnot 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为空矩阵[]

麻烦高手帮忙看看啊,不胜感激!!!
页: [1]
查看完整版本: 麻烦高手帮忙看看s函数的错误