📄 dreal3.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 + -