logo资料库

MATLAB结课大作业.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
一、判断系统稳定性的方法,并举例说明。 方法一:用 Nyquist 稳定判据判断系统的稳定性 Nyquist 稳定判据:若想使得闭环系统稳定,则开环系统 G(S)H(S)的 Nyquist 曲线逆时针绕临界点(-1,j0)点的圈数 R 必需等于 G(S)H(S)(系 统的开环传函)位于 S 的右半平面开环极点数 P。 即:Z=P-R Z=0 稳定; Z≠0 不稳定,Z 为闭环正实部根的个数。 方法二:用 Bode 图判断系统的稳定性 函数调用格式为:margin( )或[Gm Pm wcp wcg]=margin(G) 对于最小相位系统: 当相角裕度 Pm(γ)>0o 或幅值裕度 Gm(h) >1 时,表示系统稳定 当相角裕度 Pm(γ)<0o 或幅值裕度 Gm(h) <1 时,表示系统不稳定 幅值裕度 Gm(h)、相角裕度 Pm(γ)越大,系统稳定程度越好。在使用时,Gm(h)、 Pm(γ)是成对使用的,有时仅使用一个裕度指标 Pm(γ)。 方法三:用代数稳定判据法判断系统的稳定性 (1)系统数学模型为传递函数形式 G(S)=tf(num,den): 执行语句:roots(G.den{1}); 注:“{}”表示维数 (2)系统数学模型为零极点增益形式 G(S)=zpk(z,p,k); 执行语句:G.p{1}; (3)系统数学模型为状态空间形式 G(S)=ss(A,B,C,D); 执行语句:eig(G.A); 注:eig()表示计算系统的极点 方法四:用根轨迹法判断系统的稳定性 若根轨迹在参数取值过程中,部分在左半平面,部分在右半平面,则系统的稳 定性与可变参数的取值有关。函数命令调用格式:[k poles]=rlocfind(G) 方法五:用单位阶跃响应曲线判定系统稳定性
例:已知系统的开环传函为: 5(S+2) G(S)= ---------------------------- (S+10)(S³+3S²+2S+5) 判断系统的稳定性 解:方法一:用 Nyquist 稳定判据判断系统的稳定性 >>G=tf(5*[1 2],conv([1 10],[1 3 2 5])); >>roots(G.den{1}) Ans= -10.0000 -2.9042 -0.0479+1.3112i -0.0479-1.3112i >>nyquist(G) 执行以上程序得到 nyquist 图可以看出,nyquist 曲线包围临界点的圈数 R=0。所以 Z=P-R=0,系统稳定。 >> roots(G.den{1}) ans = 0.5000 + 2.9580i 0.5000 - 2.9580i
-1.0000 执行以上语句得到的结果可知,开环传递函数在右半 S 平面极点个数 P=2。 所以 Z=P-R=0,系统稳定。 验证: >> sys=feedback(G,1); >> roots(sys.den{1}) ans = -10.0553 -2.8424 -0.0512+1.4480i -0.0512-1.4480i 闭环系统特征根均为负实部,故系统稳定 方法二:用 Bode 图判断系统的稳定性 >>G=tf(5*[1 2],conv([1 10],[1 3 2 5])); >>[Gm Pm Wcp Wcg]=margin(G) 执行上述指令得 Gm = 10.5949 Pm =
22.6956 Wcp = 2.4490 Wcg = 1.4393 可以看出相角裕度 Pm=22.6956>0,所以系统是稳定的 >>margin(G) 得到 bode 图,图中性能指标与上述结果一样 方法三:用代数稳定判据法判断系统的稳定性 (1) 执行语句:roots(G.den{1}) >>G=tf(5*[1 2],conv([1 10],[1 3 2 5])); >>G1=feedback(G,1); >>roots(G.den{1}) ans = -10.0000 -2.9042 -0.0479 + 1.3112i -0.0479 - 1.3112i 因为系统闭环极点全为负实部,故系统稳定 (2) 执行语句:G.p{1} >>G=tf(5*[1 2],conv([1 10],[1 3 2 5])); >> G1=feedback(G,1); >> G2=zpk(G1); >> G2.P{1} ans = -10.0000 -2.9042 -0.0479 + 1.3112i -0.0479 - 1.3112i 因为系统闭环极点全为负实部,故系统稳定 (2) 执行语句:eig(G.A)
>> G=tf(5*[1 2],conv([1 10],[1 3 2 5])); >> G1=feedback(G,1); >> G2=ss(G); >> eig(G2.a) ans = -10.0000 -2.9042 -0.0479 + 1.3112i -0.0479 - 1.3112i 因为系统闭环极点全为负实部,故系统稳定 方法四:用根轨迹法判断系统的稳定性 >> G=tf(5*[1 2],conv([1 10],[1 3 2 5])); >> rlocus(G) >> [k poles]=rlocfind(G) Select a point in the graphics window selected_point = -0.0000 + 1.4286i k = 0.9239 poles =
-10.0511 -2.8469 -0.0510 + 1.4379i -0.0510 - 1.4379i 由 k 值可知系统是稳定的 方法五:用单位阶跃响应曲线判定系统稳定性 >> G=tf(5*[1 2],conv([1 10],[1 3 2 5])); >> rlocus(G); >> G=feedback(G,1); >> step(G) 由图可知系统稳定 二、查阅相关书籍或上网搜索,找出一个运用 MATLAB 制作的动画,要求有程序 说明和必要的文字注释; 碰球动画 figure(1);%定义函数 axis([-5.1,5,-0.05,1.05]);%绘制二维图形 hold on;%保持当前图形及轴系所有的特性 axis('off');%覆盖坐标刻度,并填充背景 %通过填充绘出台阶及两边的挡板
fill([-5.1,-5,-5,-5.1],[-0.05,-0.05,1.05,1.05],[0,0.5,0]); fill([4.12,4.22,4.22,4.12],[-0.05,-0.05,1.05,1.05],[0,0.5,0]); fill([-5,-3.2,-3.2,-5],[-0.05,-0.05,0,0],[0,0.5,0]); fill([-3.2,-2.8,-2.8,-3.2],[-0.05,-0.05,0.2,0.2],[0,0.5,0]); fill([-3.2,-1.4,-1.4,-3.2],[0.2,0.2,0.25,0.25],[0,0.5,0]); fill([-1.4,-1,-1,-1.4],[0.2,0.2,0.45,0.45],[0,0.5,0]); fill([-1.4,0.4,0.4,-1.4],[0.45,0.45,0.5,0.5],[0,0.5,0]); fill([0.4,0.8,0.8,0.4],[0.45,0.45,0.7,0.7],[0,0.5,0]); fill([0.4,2.0,2.0,0.4],[0.7,0.7,0.75,0.75],[0,0.5,0]); fill([2.0,2.3,2.3,2.0],[-0.05,-0.05,0.75,0.75],[0,0.5,0]); fill([2.3,4.12,4.12,2.3],[-0.05,-0.05,0,0],[0,0.5,0]); %x1=line([-5,5],[0,0],'color','g','linestyle','-', 'markersize',50)%设置台阶边框线,颜色,擦试方式 %x2=line([-5,5],[0.25,0.25],'color','g','linestyle','-', 'markersize',50)%设置台阶边框线,颜色,擦试方式 %line([-5,5],[0.5,0.5],'color','b','linestyle','-', 'markersize',50)%设置球与地面接触面的颜色,擦试方式 %line([-5,5],[0.75,0.75],'color','b','linestyle','-', 'markersize',50)%设置球与地面接触面的颜色,擦试方式 head=line(-5,1,'color','r','linestyle','.','erasemode','xor', 'markersize',60);%设置小球颜色,大小,线条和擦试方式 %body=line(-5,1,'color','b','linestyle','-','erasemode','none'); %描绘轨迹线 %设置初始条件 t=-5; dt=0.001; w=0; dw=0.001; while 1 %设置球跳到第一台阶的范围和高度
while t<=-4 t=dt+t; if w<=1 w=dw+w; else end w=-1; y=-w*w+1; set(head,'xdata',t,'ydata',y);%设置球的运动 %set(body,'xdata',t,'ydata',y);%描绘轨迹线 drawnow; end %结束程序 w=-1;%设置球弹起的初始位置 %设置球跳到第二台阶的范围和高度 while t<=-2.31 t=dt+t; if w<=1 w=dw+w; else end w=-1; y=(-w*w)/2+0.5; set(head,'xdata',t,'ydata',y);%设置球的运动 %set(body,'xdata',t,'ydata',y);%描绘轨迹线 drawnow; end %结束程序 w=-1;%设置球弹起的初始位置 %设置球跳到第三台阶的范围和高度 while t<=-0.62
分享到:
收藏