⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dreal3.m

📁 详细介绍了Mathlab的使用方法与技巧
💻 M
字号:
finddataerr=0;
dtnum=get(editfdnum,'string');
dtden=get(editfdden,'string');
dnum=eval(dtnum);dden=eval(dtden);       %读出D(z)
[err1 err2]=size(dnum);
[err3 err4]=size(dden);

fnum=get(editfnum,'string');
fden=get(editfden,'string');
ffnum=eval(fnum);ffden=eval(fden);      %读出Gh(s) 

hfnum=get(edithnum,'string');
hfden=get(edithden,'string');
hhnum=eval(hfnum);hhden=eval(hfden);      %读出H(s) 

dhfT=get(edittime,'string');
dhT=eval(dhfT);

[err5 err6]=size(dnum);
[err7 err8]=size(dden);

if err2>err4|err6>err8,
  finddataerr=1;
else,
   if dfadeback==1                                              %z域
      [dffnum,dffden]=c2dm(ffnum,ffden,dhT,'zoh');              %Gh(z)
      [ghnum,ghden]=series(ffnum,ffden,hhnum,hhden);            %Gh(s)*H(s)
      [dghnum,dghden]=c2dm(ghnum,ghden,dhT,'zoh');              %GhH(z)
      [dgknum,dgkden]=series(dnum,dden,dffnum,dffden);          %D(z)*Gh(z)
      [dghknum,dghkden]=series(dnum,dden,dghnum,dghden);        %D(z)*GhH(z),开环传递函数  
   end
   if fadeback==0&dfadeback==1                                  %负反馈
      GHhsys=tf(dghnum,dghden,dhT);
      DGhsys=tf(dgknum,dgkden,dhT);
      DGhHsys=tf(dghknum,dghkden,dhT);
      DGhH1sys=1+DGhHsys;
      Bzdsys=DGhsys/DGhH1sys;
      [DGhsys,DGhsys1]=huajian(DGhsys);
      [Bzdsys,bDGhsys1]=huajian(Bzdsys);
      [dghknum1,dghkden]=tfdata(DGhsys,'v');
      [dbnum1,dbden]=tfdata(Bzdsys,'v');
      dghknum=sqingling(dghknum1);
      dbnum=sqingling(dbnum1);
       
       
 
      
         dfknum=dghknum;dfkden=dghkden;dfbnum=dbnum;dfbden=dbden;
   end
      
   if fadeback==1&dfadeback==1                               %正反馈         
       if  dgkden==dghkden
 %       ndk=length(dghknum);
         [dhnum,dhden]=parallel(-1,1,dghknum,dghkden);
         dbnum=dgknum;dbden=dhnum;
         else
            [dhnum,dhden]=parallel(-1,1,dghknum,dghkden);        %(1-D(z)GhH(z))
            dbnum=conv(dhden,dgknum);                           %闭环传递函数分子
            dbden=conv(dhnum,dgkden);                     %闭环传递函数分母
           
 %        [dbnum1,dbden1]=feedback(dnum,dden,dghnum,dghden,-1); %D(z)/(1+D(z)GhH(z))
 %       [dbnum,dbden]=series(dbnum1,dbden1,dffnum,dffden); %D(z)*Gh(z)/(1+D(z)*GhH(z)) 
      end

      
  %       [dbnum1,dbden1]=feedback(dnum,dden,dghnum,dghden,1);   %D(z)/(1+D(z)GhH(z))
  %       [dbnum,dbden]=series(dbnum1,dbden1,dffnum,dffden); 
         dfknum=dghknum;dfkden=dghkden;dfbnum=dbnum;dfbden=dbden;
   end
   if dfadeback==2                                           %S域
          [gdnum,gdden]=d2cm(dnum,dden,dhT,'zoh');               %D(z)~ GD(s)
          [gdghnum,gdghden]=series(gdnum,gdden,ffnum,ffden);     %Gd(s)*Gh(s),前向通道
         [hgghknum,hgghkden]=series(hhnum,hhden,gdghnum,gdghden);   %开环传递函数
         abcdefg=10;                                            %设置标志
  end
  if dfadeback==2&fadeback==0                     %负反馈
     [bnum,bden]=feedback(gdghnum,gdghden,hhnum,hhden);
     knum=hgghknum;kden=hgghkden;num=gdghnum;den=gdghden;
  %   ffnum=hhnum;ffden=hhden;
  end
  if dfadeback==2&fadeback==1                            %正反馈
     [bnum,bden]=feedback(gdghnum,gdghden,hhnum,hhden,1);  
     knum=hgghknum;kden=hgghkden;num=gdghnum;den=gdghden;
  %   ffnum=hhnum;ffden=hhden;
  end
  if dfadeback==3                                             %W域
     [wsnum,wsden]=series(ffnum,ffden,hhnum,hhden); 
     [wznum,wzden]=c2dm(wsnum,wsden,dhT,'zoh');                %Gh(s)*H(s)转换为脉冲传递函数              
     %[wznum1,wzden1]=series(wznum,wzden,dnum,dden);            %开环脉冲传递函数
     [wnum,wden]=d2cm(wznum,wzden,dhT,'tustin');               %变换到W平面,系统W平面开环W函数
    % [hgghknum,hgghkden]=series(w2num,w2den,hhnum,hhden);
    %set(dminfy,'enable','off');set(dlmchange,'enable','off');  
  end
  if dfadeback==3&fadeback==0                     %负反馈
     [bnum,bden]=feedback(wnum,wden,1,1); %D(w)/(1+D(w)Gh(s))
      knum=wnum;kden=wden;
  end
  if dfadeback==3&fadeback==1                            %正反馈
     [bnum,bden]=feedback(wnum,wden,1,1,1);   %D(z)/(1-D(w)Gh(s)H(s))
     knum=wnum;kden=wden;
  end

end
if finddataerr==0&dfadeback==2 
   nnk=length(knum);
for i=1:nnk
   if knum(i)==0
      knumk=knum((i+1):nnk);
   else
     knumk=knum(i:nnk); nnk=i;break
   end
end
knum=knumk;
szsystem=1;
     
  [ak,bk,ck,dk]=tf2ss(knum,kden);
  tak=ak;tbk=bk;tck=c;tdk=dk;
  [ak1,bk1,ck1,dk1,tk1]=canon(ak,bk,ck,dk,'model');
  [ak2,bk2,ck2,tk2,kk2]=ctrbf(ak,bk,ck);
  [ak3,bk3,ck3,tk3,kk3]=obsvf(ak,bk,ck);
  [zk,pk,kk]=ss2zp(ak,bk,ck,dk);
  [minak,minbk,minck,mindk]=minreal(ak,bk,ck,dk);
  [minnumk,mindenk]=minreal(knum,kden);

   
   
  [a,b,c,d]=tf2ss(bnum,bden);                                         %S域
  ta=a;tb=b;tc=c;td=d;
  [a1,b1,c1,d1,t1]=canon(a,b,c,d,'model');
  [a2,b2,c2,t2,k2]=ctrbf(a,b,c);
  [a3,b3,c3,t3,k3]=obsvf(a,b,c);
  [z,p,k]=ss2zp(a,b,c,d);
  [mina,minb,minc,mind]=minreal(a,b,c,d);
  [minnum,minden]=minreal(bnum,bden);
  test=0;
  close(getmodel3);
  set(mmodel,'enable','on');
  set(manalysis,'enable','on');
  set(msave,'enable','on');
  set(mdesign,'enable','on');
  set(dlminfy,'enable','on');
  set(dcmchange,'enable','on');
  set(minfy,'enable','off');
  set(mchange,'enable','off');
  set(mcplx,'enable','on');
  set(mtime,'enable','on');
  set(mstablity,'enable','on');
  set(mcontral,'enable','on');
  set(mnormal,'enable','on');  
  
   set(mdesign4,'enable','off'); 
  
  set(dlmchange,'enable','off');
  set(dlminfy1,'enable','off');
  set(dsmys,'enable','on');
  set(dmyz,'enable','off');
  set(mdcplx,'enable','off');
  set(mdtime,'enable','off');
  set(mdstable,'enable','off');
  set(mdroot,'enable','off');
  set(dmsimu,'enable','on');
  set(mdcontral,'enable','off');
else if finddataerr==0&dfadeback==1                                           %Z域
  [dak,dbk,dck,ddk]=tf2ss(dfknum,dfkden);
  dtak=dak;dtbk=dbk;dtck=dck;dtdk=ddk;
  [dak1,dbk1,dck1,ddk1,dtk1]=canon(dak,dbk,dck,ddk,'model');
  [dak2,dbk2,dck2,dtk2,dkk2]=ctrbf(dak,dbk,dck);
  [dak3,dbk3,dck3,dtk3,dkk3]=obsvf(dak,dbk,dck);
  [dzk,dpk,dkk]=ss2zp(dak,dbk,dck,ddk);
  [dminak,dminbk,dminck,ddmindk]=minreal(dak,dbk,dck,ddk);
  [dminnumk,dmindenk]=minreal(dfknum,dfkden);
   szsystem=3; 
      
      
      
      
   [da,db,dc,dd]=tf2ss(dfbnum,dfbden);
  dta=da;dtb=db;dtc=dc;dtd=dd;
  [da1,db1,dc1,dd1,dt1]=canon(da,db,dc,dd,'model');
  [da2,db2,dc2,dt2,dk2]=ctrbf(da,db,dc);
  [da3,db3,dc3,dt3,dk3]=obsvf(da,db,dc);
  [dz,dp,dk]=ss2zp(da,db,dc,dd);
  [dmina,dminb,dminc,ddmind]=minreal(da,db,dc,dd);
  [dminnum,dminden]=minreal(dfbnum,dfbden);
  test=0;
  close(getmodel3);
  set(mmodel,'enable','on');
  set(manalysis,'enable','on');
  set(msave,'enable','on');
  set(mdesign,'enable','on');
  set(dlminfy,'enable','on');
  set(dcmchange,'enable','on');
  set(mdstable,'enable','on');
  set(mdroot,'enable','on');
  set(mdcontral,'enable','on');  
  set(minfy,'enable','off');
  set(mchange,'enable','off');
  set(mcplx,'enable','off');
  set(mtime,'enable','off');
  
  set(mstablity,'enable','off');
  set(mcontral,'enable','off');
  set(mnormal,'enable','off');
  set(dmsimu,'enable','on');
  
  set(dtmchange,'enable','on');
  set(dlmchange,'enable','off');
  set(dlminfy1,'enable','off');
  set(dsmys,'enable','off');
  set(dmyz,'enable','on');
  set(mdcplx,'enable','on');
  set(mdtime,'enable','on');
else if finddataerr==0&dfadeback==3
   szsystem=2;   
  [ak,bk,ck,dk]=tf2ss(knum,kden);
  tak=ak;tbk=bk;tck=c;tdk=dk;
  [ak1,bk1,ck1,dk1,tk1]=canon(ak,bk,ck,dk,'model');
  [ak2,bk2,ck2,tk2,kk2]=ctrbf(ak,bk,ck);
  [ak3,bk3,ck3,tk3,kk3]=obsvf(ak,bk,ck);
  [zk,pk,kk]=ss2zp(ak,bk,ck,dk);
  [minak,minbk,minck,mindk]=minreal(ak,bk,ck,dk);
  [minnumk,mindenk]=minreal(knum,kden);

   
   
  [a,b,c,d]=tf2ss(bnum,bden);                                         %W域
  ta=a;tb=b;tc=c;td=d;
  [a1,b1,c1,d1,t1]=canon(a,b,c,d,'model');
  [a2,b2,c2,t2,k2]=ctrbf(a,b,c);
  [a3,b3,c3,t3,k3]=obsvf(a,b,c);
  [z,p,k]=ss2zp(a,b,c,d);
  [mina,minb,minc,mind]=minreal(a,b,c,d);
  [minnum,minden]=minreal(bnum,bden);
  test=0;
  close(getmodel3);
  set(mmodel,'enable','on');
  set(manalysis,'enable','on');
  set(msave,'enable','on');
  set(mdesign,'enable','on');
  set(dlminfy,'enable','on');
  set(dcmchange,'enable','on');
  set(minfy,'enable','off');
  set(mchange,'enable','off');
  set(mcplx,'enable','on');
  set(mtime,'enable','off');
%  set(dlminfy1,'enable','off');
  set(dlmchange,'enable','off');
  set(dlminfy1,'enable','off');
  set(dsmys,'enable','on');
  set(dmyz,'enable','off');
  set(mdcplx,'enable','off');
  set(mdtime,'enable','off');
  set(mdstable,'enable','off');
  set(mcontral,'enable','off');
  set(mdcontral,'enable','off');
  set(dmsimu,'enable','off');
 
  
  set(mdesign4,'enable','off');    
      
      
      
      
      
      
      
else,
  msgbox('所构造的传递函数分子维数大于分母维数','数据错误警告','help');
end,end,end
if finddataerr==0&dfadeback==3
 set(msimu,'enable','off');
set(dmchange,'enable','on');
set(dminfy,'enable','on');
set(idwin,'enable','off');
set(idwins1,'enable','off');
 set(mdesign1,'enable','off');
 set(mdesign2,'enable','off');
 set(mdesign3,'enable','off');
 set(mcplx1b,'enable','off'); 
 set(mcplx2,'enable','off');
 set(dtmchange,'enable','off');
  set(mstablity,'enable','off');
   set(mnormal,'enable','off');
    set(mdroot,'enable','off');
   
else
set(msimu,'enable','off');
set(dmchange,'enable','on');
set(dminfy,'enable','on');
set(idwin,'enable','off');
set(idwins1,'enable','off');
 set(mdesign1,'enable','off');
 set(mdesign2,'enable','off');
 set(mdesign3,'enable','off');
end
 if dfadeback==1
     set(mdesign,'enable','off');
 end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -