编写matlab代码求系统开环传递函数为G(s)=[K(s+12)]/[(s+1)(ss+12s+100)(s+10)]的根轨迹曲线,并求出使得闭环系统稳定的K值范围。
时间: 2024-05-19 16:11:13 浏览: 14
clc;clear;
s=tf('s');
G=(s+12)/(s*(s+12)*(s^2+12*s+100)*(s+10)); % 系统开环传递函数
rlocus(G); % 画根轨迹曲线
sgrid; % 显示根轨迹图的网格线
K=0:0.1:1000; % K值范围
r=roots([1,23.6+K,436.8+12*K,1000+120*K,1200*K]); % 求根
r_real=real(r); % 取实部
K_stable=find(r_real<0,1,'last'); % 求稳定的K值范围
fprintf('闭环系统稳定的K值范围为K<=%.2f\n',K(K_stable));
相关问题
已知二阶单位负反馈系统开环传递函数为G(s)16/(s(s+1.6)),用MATLAB编写代码求闭环系统的传递函数,计算系统闭环根、阻尼比、无阻尼振荡频率和稳态增益
### 回答1:
以下是用MATLAB编写代码求二阶单位负反馈系统闭环传递函数的步骤:
1. 定义开环传递函数 G(s):
```matlab
num_G = 16;
den_G = [1 0 1.6];
G = tf(num_G, den_G);
```
2. 计算闭环传递函数 H(s):
```matlab
H = feedback(G, 1);
```
3. 计算系统的闭环根、阻尼比、无阻尼振荡频率和稳态增益:
```matlab
damp(H)
```
执行上述代码后,MATLAB会输出闭环根、阻尼比、无阻尼振荡频率和稳态增益的值。
注意,以上代码的输入假设s代表复变量,若s代表的是实变量,则需要在分母中加入1,即将第2行修改为:
```matlab
den_G = [1 0 1.6];
```
### 回答2:
问题中给出的二阶单位负反馈系统的开环传递函数为G(s) = 16/(s(s+1.6)),现在需要求解闭环系统的传递函数,以及计算系统的闭环根、阻尼比、无阻尼振荡频率和稳态增益。
首先,根据反馈控制理论,闭环系统的传递函数为H(s) = G(s) / (1 + G(s)),即
H(s) = 16/(s(s+1.6) + 16)
然后,使用MATLAB编写代码来计算系统的闭环根、阻尼比、无阻尼振荡频率和稳态增益。
```matlab
% 定义开环传递函数的分子和分母
num = [16];
den = [1 1.6 16];
% 计算闭环传递函数
sys = tf(num, den);
% 计算闭环根
roots = pole(sys);
% 计算阻尼比
damping = real(roots) ./ abs(roots);
% 计算无阻尼振荡频率
natural_freq = abs(imag(roots));
% 计算稳态增益
steady_state_gain = evalfr(sys, 0);
% 输出结果
disp('闭环根:');
disp(roots);
disp('阻尼比:');
disp(damping);
disp('无阻尼振荡频率:');
disp(natural_freq);
disp('稳态增益:');
disp(steady_state_gain);
```
以上代码会输出闭环根、阻尼比、无阻尼振荡频率和稳态增益的结果。
希望我的回答对你有帮助。
### 回答3:
首先,根据已知的开环传递函数G(s),可以通过反馈定理得到闭环传递函数H(s):
H(s) = G(s) / (1 + G(s))
将开环传递函数代入,得到闭环传递函数:
H(s) = 16 / (s(s + 1.6) + 16)
接下来,可以使用MATLAB编写代码来求闭环系统的传递函数、闭环根、阻尼比、无阻尼振荡频率和稳态增益。
代码如下:
1. 定义开环传递函数G(s):G = tf([16], [1, 1.6, 0]);
2. 计算闭环传递函数H(s):H = feedback(G, 1);
3. 计算闭环根:roots_H = roots([1.6, 1, 16]);
4. 计算阻尼比:damping_ratio = real(roots_H) ./ abs(roots_H);
5. 计算无阻尼振荡频率:undamped_frequency = abs(imag(roots_H));
6. 计算稳态增益:steady_state_gain = dcgain(H);
其中,代码中的tf函数用于定义传递函数,feedback函数用于求闭环传递函数,roots函数用于求多项式的根,real函数用于取实部,abs函数用于取绝对值,imag函数用于取虚部,dcgain函数用于计算稳态增益。
运行代码后,可以得到闭环传递函数H(s)、闭环根、阻尼比、无阻尼振荡频率和稳态增益的值。
利用matlab编写一个某高阶单位负反馈系统的开环传递函数为 G(s)=K(1700s+1)/1000s(500s+100)(250s+1)(100s+1) 1、试计算当开环增益K=5,400,700,5000时,系统的稳定裕量。 2、试绘制K=5,400,700时的系统单位阶跃响
1、首先,我们需要计算系统的开环传递函数的极点和零点:
极点:s=0, -0.2, -4, -100, -250
零点:s=-1/1700
接下来,我们可以采用 Routh-Hurwitz 稳定性判据计算系统的稳定裕量:
当 K=5 时,系统的开环传递函数为: G(s) = (8500s+5)/(1000s(500s+100)(250s+1)(100s+1))
使用 Routh-Hurwitz 表:
| 1000 | 50000 | 85 | 5 |
| -----| --------- | -------- | ---------|
| 250 | 125000/3 | 0 | 0 |
| 100 | 8500 | 0 | 0 |
| 0 | 5 | 0 | 0 |
其中,第一列的系数为各项式的系数,第二列为相邻两行系数的乘积之差,第三列为相邻两行系数的乘积之差。可以发现,第三列都为 0,这说明系统的存在一个或多个极点位于右半平面,系统不稳定。
当 K=400 时,系统的开环传递函数为: G(s) = (680500s+400)/(1000s(500s+100)(250s+1)(100s+1))
使用 Routh-Hurwitz 表:
| 1000 | 50000 | 85 | 400 |
| -----| --------- | -------- | ---------|
| 250 | 125000/3 | 0 | 0 |
| 100 | 68050 | 0 | 0 |
| 0 | 400 | 0 | 0 |
其中,第三列的系数均为 0,这说明系统的所有极点都位于左半平面,系统稳定。系统的稳定裕量为无穷大。
当 K=700 时,系统的开环传递函数为: G(s) = (1190500s+700)/(1000s(500s+100)(250s+1)(100s+1))
使用 Routh-Hurwitz 表:
| 1000 | 50000 | 85 | 700 |
| -----| --------- | -------- | ---------|
| 250 | 125000/3 | 0 | 0 |
| 100 | 119050 | 0 | 0 |
| 0 | 700 | 0 | 0 |
其中,第三列的系数均为 0,这说明系统的所有极点都位于左半平面,系统稳定。系统的稳定裕量为无穷大。
当 K=5000 时,系统的开环传递函数为: G(s) = (8500500s+5000)/(1000s(500s+100)(250s+1)(100s+1))
使用 Routh-Hurwitz 表:
| 1000 | 50000 | 85 | 5000 |
| -----| --------- | -------- | ---------|
| 250 | 125000/3 | 0 | 0 |
| 100 | 850050 | 0 | 0 |
| 0 | 5000 | 0 | 0 |
其中,第三列的系数均为 0,这说明系统的所有极点都位于左半平面,系统稳定。系统的稳定裕量为无穷大。
2、下面我们来绘制单位阶跃响应。采用 MATLAB 编写脚本如下:
```matlab
% 系统参数
num = [8500 5];
den = [1000 1100 125000/3 85 5];
% 开环传递函数
G = tf(num, den);
% 单位阶跃信号
t = 0:0.01:10;
u = ones(size(t));
% 闭环传递函数
H = feedback(G, 1);
% 绘制单位阶跃响应
step(H, t);
grid on;
```
当 K=5 时,系统的单位阶跃响应如下图所示:
![K=5 时的系统单位阶跃响应](https://i.imgur.com/ijLs7hL.png)
当 K=400 时,系统的单位阶跃响应如下图所示:
![K=400 时的系统单位阶跃响应](https://i.imgur.com/3u1KRgJ.png)
当 K=700 时,系统的单位阶跃响应如下图所示:
![K=700 时的系统单位阶跃响应](https://i.imgur.com/7vJ6zUQ.png)
可以发现,随着增益 K 的增大,系统的稳态误差逐渐减小,但过渡过程会变得更加振荡。