编写matlab代码求系统开环传递函数为G(s)=[K(s+12)]/[(s+1)(ss+12s+100)(s+10)]的根轨迹曲线,并求出使得闭环系统稳定的K值范围。
时间: 2024-05-19 07:11:13 浏览: 154
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));
相关问题
利用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 的增大,系统的稳态误差逐渐减小,但过渡过程会变得更加振荡。
已知单位负反馈控制系统的开环传递函数为G(s)=0.2(s+2.5)/s(s+0.5)(s+0.7)(s+3) ①用MATLAB编写程序求系统的特征根,判断闭环系统的稳定性,并绘制闭环系统的零极点图。 ②若将增益0.2改为6,判断闭环系统的稳定性,并绘制闭环系统的零极点图,
首先,让我们分步骤解答这个问题:
① **MATLAB编写程序求解**:
你可以使用MATLAB Control System Toolbox中的`pzmap`函数来绘制开环零极点图,以及`margin`函数来判断系统稳定性。以下是基本的MATLAB代码示例:
```matlab
% 定义开环传递函数
num = [0.2, 0.5*0.2]; % 积分项系数
den = [1, 2.5, 0.5, 0.7, 3]; % 原点多项式
% 绘制开环零极点图
[G, Gc] = tf(num, den); % 创建传递函数对象
figure;
rlocus(Gc); % 开环零极点图
title('Open Loop Poles and Zeros');
% 判断闭环稳定性
K = 0.2; % 增益
sys_clb = feedback(G*K, 1);
[margin_stability, gain_margin, phase_margin] = margin(sys_clb);
% 输出稳定性信息
if margin_stability > 0
disp('闭环系统稳定');
else
disp('闭环系统不稳定');
end
```
② **增益改变后的稳定性及零极点图绘制**:
如果你将增益从0.2改为6,只需更改`K`的值:
```matlab
K_new = 6;
sys_clb_new = feedback(G*K_new, 1);
[margin_new, _, _] = margin(sys_clb_new);
if margin_new > 0
disp(['增益为6时,闭环系统稳定']);
else
disp(['增益为6时,闭环系统不稳定']);
end
figure;
rlocus(sys_clb_new); % 绘制新闭环零极点图
title(sprintf('闭环零极点图 (增益 = %g)', K_new));
```
运行这些代码会显示当前增益下的闭环稳定性以及相应的零极点图。如果需要,你也可以根据计算得到的稳定裕度(gain_margin 和 phase_margin)来进一步分析系统的稳定性。
阅读全文