一个经验记录matlab中disp的应用

发布时间 2023-06-10 17:24:02作者: 叕叒双又

一、题目:一个给定离散系统闭环传递函数为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会更加方便。