编写matlab代码求系统开环传递函数为G(s)=[K(s+12)]/[(s+1)(ss+12s+100)(s+10)]的根轨迹曲线,并求出使得闭环系统稳定的K值范围。
时间: 2024-05-19 10:11:13 浏览: 204
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)= 0.2 (s+2) /(s+0.5)(s+0.8)(s+3),试用MATLAB编写程序,判断此闭环系统的稳定性
为了判断这个单位负反馈控制系统闭环的稳定性,我们可以使用MATLAB的`stabilitymargin`函数来计算系统的相角裕度和幅值裕度。然而,由于我们无法直接在这里编写完整的MATLAB代码,我可以给你提供一个指导步骤。
首先,你需要在MATLAB环境中创建一个M文件,例如`stab_test.m`,然后添加以下内容:
```matlab
% 定义开环传递函数
num = [0.2 0];
den = [1 2 0.5 0.8 3];
% 构建闭环传递函数(假设Kp=1)
sys_clb = tf(num, den) * tf(1, [1 -1]);
% 计算相角裕度(Phase Margin, PM)
pm = phasemargin(sys_clb);
% 计算幅值裕度(Gain Margin, GM)
gm = gainmargin(sys_clb);
% 判断系统是否稳定
if pm > 0 && gm > 0
disp('闭环系统稳定');
else
disp('闭环系统不稳定');
end
```
在上述代码中,`tf`函数用于创建传递函数,`phasemargin`和`gainmargin`分别计算相角裕度和幅值裕度。如果两者都大于0,则说明系统是稳定的;否则,系统不稳定。
要在MATLAB命令行中运行该程序,打开命令窗口,输入`stab_test`即可。记得替换`sys_clb`部分为你的实际闭环传递函数,因为这里默认了一个比例增益Kp=1。
利用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=400 时,系统的单位阶跃响应如下图所示:

当 K=700 时,系统的单位阶跃响应如下图所示:

可以发现,随着增益 K 的增大,系统的稳态误差逐渐减小,但过渡过程会变得更加振荡。
阅读全文
相关推荐











