MATLAB语言及其应用MatlabLanguageandItsApplications史元浩中北大学Email:yhshi@nuc.edu.cnMATLABLanguageandItsApplications第九讲Matlab控制系统辅助设计摘要2020/3/9Matlab语言及其应用3控制系统的基本理论控制系统工具箱函数控制系统分析与设计2020/3/94控制系统模型传递函数模型零极点增益模型状态空间模型101101...()()()...mmmnnnbsbsbnumsHsdensasasa1212()()...()()()()...()mnszszszHskspspspxaxbuycxdu(1)()()()()()xkaxkbukykcxkdukMatlab语言及其应用2020/3/95模型的转换1[num,den]=ss2tf(a,b,c,d)[a,b,c,d]=tf2ss(num,den)[z,p,k]=tf2zp(num,den)[num,den]=zp2tf(z,p,k)[a,b,c,d]=zp2ss(z,p,k)[z,p,k]=ss2zp(a,b,c,d)0101[,,....][,,....]mnnumbbbdenaaa1212[,,...][,,...][]mnzzzzppppkkMatlab语言及其应用2020/3/96例:求传函和状态空间模型k=6;z=[-3];p=[-1,-2,-5];pzmap(p,z)[num,den]=zp2tf(z,p,k)tf(num,den)[A,B,C,D]=zp2ss(z,p,k)[zz,pp,kk]=ss2zp(A,B,C,D)6(3)()(1)(2)(5)sHssssMatlab语言及其应用2020/3/97s1=tf([345],[13579],'InputName','U','OutputName','Y')s2=tf([345],[13579],0.1,'InputName','U','OutputName','Y')TransferfunctionfrominputUtooutputY:3s^2+4s+5-----------------------------s^4+3s^3+5s^2+7s+9TransferfunctionfrominputUtooutputY:3z^2+4z+5-----------------------------z^4+3z^3+5z^2+7z+9Samplingtime:0.1Matlab语言及其应用2020/3/98模型的转换2连续时间系统===离散时间系统连续到离散[ad,bd]=c2d(a,b,Ts)[ad,bd,cd,dd]=c2dt(a,b,c,d,Ts,lambda)带输入延时[ad,bd,cd,dd]=c2dm(a,b,c,d,Ts,’method’)[num,den]=c2dm(num,den,Ts,’method’)方法:‘zoh’默认零阶保持器‘foh’默认一阶保持器(无逆变)‘tustin’利用双线性逼近导数‘prewrap’利用频率预变的双线性来逼近‘matched’利用匹配零-极点方法将SISO系统变换Matlab语言及其应用()()()()()()xtaxtbutytcxtdut(1)()()()()()xkadxkbdukykcdxkdduk2020/3/99模型的转换3连续时间系统===离散时间系统离散到连续[ac,bc]=d2c(ad,bd,Ts)[ac,bc,cc,dc]=d2c(ad,bd,cd,dd,Ts)[ac,bc,cc,dc]=d2cm(ad,bd,cd,dd,Ts,’method’)[num,den]=d2cm(num,den,Ts,’method’)Matlab语言及其应用2020/3/910[a,b,c,d]=ord2(1,0.2)%生成两阶系统step(a,b,c,d);holdon[aa,bb,cc,dd]=c2dm(a,b,c,d,0.5,'tustin')dstep(aa,bb,cc,dd)c2dm(a,b,c,d,0.5,'tustin')Matlab语言及其应用2020/3/911用零阶保持器和双线性变换求离散传递函数formatcompactf=[-41];g=[1210];ts=0.2sc=tf(f,g)disp('零阶保持器')sd1=c2d(sc,ts)disp('双线性变换')sd2=c2d(sc,ts,'t')零阶保持器Transferfunction:-0.5994z+0.6313----------------------z^2-1.351z+0.6703Samplingtime:0.2双线性变换Transferfunction:-0.3z^2+0.01538z+0.3154-----------------------------z^2-1.385z+0.6923Samplingtime:0.2Matlab语言及其应用241()210sHsss%连续和离散系统的多种输出响应曲线clear,clf[a,b,c,d]=rmodel(4);s1=ss(a,b,c,d);Ts=0.2;sd1=c2d(s1,Ts,'t')t=0:Ts:25;u=sin(0.5*t);fori=1:2ifi==1s=s1;elses=sd1;endfigure(i)subplot(2,2,1)impulse(s,5);gridsubplot(2,2,2)lsim(s,u,t);%动态系统对任意输入的模拟时间响应subplot(2,2,3)x0=[1,-1,0,2];initial(s,x0,5),grid%状态空间模型的初始状态响应subplot(2,2,4)pzmap(s),gridend2020/3/9Matlab语言及其应用122020/3/913典型系统的生成s=rss(n)或s=rss(n,p出,m入)随机生成n阶稳定的连续状态空间模型[num,den]=rmodel(n)随机生成n阶稳定的连续线性模型系数s=drss(n)随机生成n阶稳定的离散状态空间模型[num,den]=drmodel(n)随机生成n阶稳定的离散线性模型系数[num,den]=ord2(wn,z)生成固有频率为wn,阻尼系数为z的二阶系统系数Matlab语言及其应用2020/3/914系统的建模1系统的并联parallel[a,b,c,d]=parallel(a1,b1,c1,d1,a2,b2,c2,d2);[num,den]=parallel(num1,den1,num2,den2)[a,b,c,d]=parallel(a1,b1,c1,d1,a2,b2,c2,d2,in1,in2,out1,out2)将输入in1和in2合并为一个输入将输出out1和out2合并为一个输出Matlab语言及其应用2020/3/915系统的建模2系统的串联series[a,b,c,d]=series(a1,b1,c1,d1,a2,b2,c2,d2);[num,den]=series(num1,den1,num2,den2)[a,b,c,d]=series(a1,b1,c1,d1,a2,b2,c2,d2,out1,in2)将系统1的输出与系统2的输入进行串联Matlab语言及其应用2020/3/916系统的建模3系统的反馈feedback[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2)[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2,sign);[num,den]=feedback(num1,den1,num2,den2)[num,den]=feedback(num1,den1,num2,den2,sign)sign缺省时,默认为负,即负反馈[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2,inp1,out1);将系统1的指定输出通过系统2反馈到系统1的输入。Matlab语言及其应用2020/3/917系统的建模4系统的闭环cloop[ac,bc,cc,dc]=cloop(a,b,c,d,sign)[numc,denc]=cloop(num,den,sign)[ac,bc,cc,dc]=cloop(a,b,c,d,out,in)将系统的输出反馈到输入,形成单位反馈Matlab语言及其应用2020/3/918a1=[0,1;-1,-2];b1=[0;1];c1=[1,3];d1=1;a2=[0,1;-1,-3];b2=[0;1];c2=[1,4];d2=[0];[a,b,c,d]=series(a1,b1,c1,d1,a2,b2,c2,d2)[a,b,c,d]=parallel(a1,b1,c1,d1,a2,b2,c2,d2)[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2)[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2,1)Matlab语言及其应用111111222220101212101014131xxuyxuxxuyx2020/3/919sys1=tf([21],[321]);sys2=tf(1,[32]);H=feedback(sys1,sys2);p=pole(H);ni=find(real(p)0);n=length(ni);ifn0disp('系统不稳定')elsedisp('系统稳定')end221321sss132sMatlab语言及其应用2020/3/920模型特性1可控性矩阵[co]=ctrb(a,b)cco=length(a)-rank(co)如果cco==0表示可控可观性矩阵[ob]=obsv(a,c)oob=length(a)-rank(ob)如果oob==0表示可观Matlab语言及其应用2020/3/921模型特性2[aa,bb,cc,T,k]=ctrbf(a,b,c)可控性分解[aa,bb,cc,T,k]=obsvf(a,b,c)可观性分解sysT=ss2ss(sys,T)相似变换[csys,T]=canon(sys,’type’)规范分解type=model约当矩阵形式type=companion伴随矩阵形式Matlab语言及其应用2020/3/922系统可控和可观判断a=[-3,1;1,-3];b=[1,1;1,1]c=[1,1;1,-1];d=0cam=ctrb(a,b);cco=length(a)-rank(cam)ifcco==0disp('系统可控')elsedisp('系统不可控')endoam=obsv(a,c);oob=length(a)-rank(oam)ifoob==0disp('系统可观')elsedisp('系统不可观')endMatlab语言及其应用2020/3/923系统可控和可观分解%化为可控阶梯形clear,A=[-2,2,-1;0,-2,0;1,-4,3];B=[0;0;1];C=[1,-1,1];D=0;%系数矩阵赋值s1=ss(A,B,C,D);%构成LTI模型[Abar,Bbar,Cbar,T,k]=ctrbf(s1.a,s1.b,s1.c)%化为可控阶梯型rA=rank(A)%状态方程系数矩阵的秩rc=sum(k)%判断可控矩阵的秩[Abaro,Bbaro,Cbaro,To,ko]=obsvf(s1.a,s1.b,s1.c);%化为可观阶梯型ro=sum(ko)%判断可观矩阵的秩Matlab语言及其应用2020/3/924时域响应1求连续系统的单位阶跃响应[y,x,t]=step(