📄 dreal1.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 %负反馈
[dbnum1,dbden1]=feedback(dnum,dden,dghnum,dghden); %D(z)/(1+D(z)GhH(z))
[dbnum,dbden]=series(dbnum1,dbden1,dffnum,dffden);
% clear dfbnum,dfbden,dfknum,dfkden
dfknum=dghknum;dfkden=dghkden;dfbnum=dbnum;dfbden=dbden;
end
if fadeback==1&dfadeback==1 %正反馈
[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;
end
if dfadeback==2&fadeback==1 %正反馈
[bnum,bden]=feedback(gdghnum,gdghden,hhnum,hhden,1);
knum=hgghknum;kden=hgghkden;
end
if dfadeback==3 %W域
[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)
% [dghknum,dghkden]=series(dnum,dden,dghnum,dghden); %D(z)*GhH(z),开环传递函数
[wnum,wden]=d2cm(dghnum,dghden,2,'tustin'); %变换到W平面
end
end
if finddataerr==0,
[a,b,c,d]=tf2ss(dfbnum,dfbden);
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');
else,
msgbox('所构造的传递函数分子维数大于分母维数','数据错误警告','help');
end
set(idwin,'enable','off');
set(idwins1,'enable','off');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -