一、题目:一个给定离散系统闭环传递函数为G1(z) = (Z^2 + 4.2Z + 5.43)/(Z^4-2.7*Z^3+0.4*Z^2 + 0.08Z + 0.002),采样周期为0.1s,绘制系统零极点分布图,并判定各系统的稳定性。
二、代码如下:
function systemStabilityJudge1() 2 num1 = [1 4.2 5.43]; 3 den1 = [1 -2.7 2.5 2.43 -0.56]; 4 G1 = tf(num1, den1, 0.1); 5 6 figure(1) 7 pzmap(G1) 8 9 disp('判断极点情况:') 10 flag = 0; 11 p1 = pole(G1) 12 r = real(p1); 13 m = real(p1); 14 for i = 1:length(p1) 15 if(sqrt(r(i).^2 + m(i).^2)) >= 1 16 flag = 1 17 % sprintf('极点为:%f\n', p1(i)) 18 disp(p1(i)) 19 end 20 end 21 if flag == 1 22 disp('系统是不稳定的!') 23 else 24 disp('系统是稳定的!') 25 end
三、说明:
1、为了方便,写个和函数,为了将来更加方便使用和修改而已
2、2 3 4行是为了生成传递函数
3、6 7行是为了画零极点图
4、第9行开始到结束,是为了判断系统是否稳定,原理就是,看极点的是否在单位圆内,模是否大于1。为了后面的提示信息的逻辑更加清晰,添加了一个标志未,如果系统不稳定就将flag设置为1。11行为了获取系统的极点,,12 13行获取极点的实部和虚部,15行来判断模是否大于1来设置flag标志。
5、特别要注意的是第18行,直接用disp输出数据更加方便,无需第17行那样各种设置,最重要的是,第17行输出的只有实部,建议不要用matlab中sprintf函数,直接用disp会更加方便。
标签:disp,p1,G1,记录,flag,matlab,极点 From: https://www.cnblogs.com/guochaoxxl/p/17471606.html