开环传递函数为G(s)H(s)=k*(s+5)/(s^2+4s)*((s+1)/(s^2+5s+6)),试用matlab绘制根轨迹图,并回答问题1:根轨迹图的分支有多少,为什么? 问题2:系统是否稳定,为什么?上述实验的心得与体会
时间: 2024-02-06 11:12:59 浏览: 83
好的,我来回答您的问题。
首先,可以使用MATLAB中的rlocus函数绘制根轨迹图。具体实现代码如下:
```
num = [1 5];
den = [1 4 0];
sys1 = tf(num,den);
num = [1 1];
den = [1 5 6];
sys2 = tf(num,den);
k = 1;
sys = k*sys1*sys2;
rlocus(sys);
```
运行上述代码即可得到根轨迹图。
回答问题1:根轨迹图的分支有3个,因为系统的开环传递函数中有3个极点,每个极点对应一个分支。
回答问题2:系统不稳定,因为根轨迹图的所有分支都位于左半平面,而且存在至少一个分支与实轴相交,因此系统存在振荡的可能性。
关于实验的心得与体会,我认为绘制根轨迹图是掌握控制系统基础知识的重要一步。通过绘制根轨迹图,我们可以直观地了解系统的稳定性和动态响应特性,并且可以根据需要调整控制器参数以满足系统性能指标要求。
相关问题
已知系统的开环传递函数为 G(s)H(s)=k(s+1)/s(s-1)(s^2+4s+20)试确定使系统阻尼比为0.5的k值和这时的闭环特征根。 (注意:不能用目测定位。) 写出matlab简单易懂代码
在控制系统理论中,给定开环传递函数 \( G(s) \cdot H(s) = \frac{k(s+1)}{s(s-1)(s^2 + 4s + 20)} \),我们想要找到使得系统阻尼比 \( \zeta \) 等于 0.5 的 \( k \) 值,并计算此时的闭环极点。
对于一阶二型系统 (Type I system),当阻尼比 \( \zeta \) 等于 0.5 时,系统是一个临界稳定的系统,即两个实部相等的复数极点对称分布在虚轴上。因此,我们需要解方程来找出 \( k \) 的值,使得 \( s = -\omega_n \pm j\omega_n \),其中 \( \omega_n \) 是自然频率,\( j \) 是虚数单位。
对于给定的 \( G(s)H(s) \),我们可以尝试用MATLAB来求解。首先,我们需要找到 \( s \) 满足条件的表达式,然后代入到传递函数中,找到对应的 \( k \) 值。
```Matlab
% 定义系数
a1 = 1;
b1 = 1;
c1 = 0;
d1 = 0;
a2 = 0;
b2 = 1;
c2 = 4;
d2 = 20;
% 自然频率 ωn 的近似值,因为无法直接目测,这里假设一个初始值
wn_guess = sqrt(c2 / d2); % 自然频率
% 极点的初始估计,考虑阻尼比为0.5的情况
zn_guess = 0.5;
p = wn_guess * [1; zn_guess];
% 使用 MATLAB 的 roots 函数查找闭环极点
K = 1; % 初始设定 k=1 作为搜索起点
while true
K_guess = K;
% 闭合环传递函数
GHS = @(s) K_guess * a1*s + b1*(s+1) ./ (s.*(s-1).*((s+p(1)).*(s+p(2))));
% 求解闭环传递函数的零点
poles_closed_loop = roots(GHS);
% 计算阻尼比
zeta = real(poles_closed_loop(1)) / wn_guess;
% 如果阻尼比接近目标值,停止循环
if abs(zeta - 0.5) < eps
break;
end
% 更新 k 值并继续搜索
K = K_guess / (real(poles_closed_loop(1))^2);
end
% 输出结果
fprintf('为了达到阻尼比为 0.5,k 值应为: %.6f\n', K);
fprintf('闭环特征根为: %.6f + j%.6f 和 %.6f - j%.6f\n', poles_closed_loop(1), imag(poles_closed_loop(1)), poles_closed_loop(2), -imag(poles_closed_loop(2)));
```
这个代码会不断迭代更新 \( K \) 值直到阻尼比达到 0.5。请注意,由于阻尼比的计算依赖于数值解法,实际运行时可能会有误差,尤其是在初始猜测 \( \omega_n \) 或 \( K \) 不精确的情况下。如果需要更精确的结果,可以使用数值优化算法如 fminsearch。
已知系统的开环传递函数为 G(s)H(s)=k(s+1)/s(s-1)(s^2+4s+20)试确定使系统阻尼比为0.5的k值和这时的闭环特征根。 (注意:不能用目测定位。) 写出matlab简单易懂代码
在控制系统理论中,给定开环传递函数 \( G(s)H(s) \),要找到使得系统阻尼比 \( \zeta = 0.5 \) 的 \( k \) 值,并计算对应的闭环特征根,需要使用巴特沃斯稳定性的准则。首先,我们需要保证闭环传递函数的极点分布在单位圆内,即实部都小于1。
已知的开环传递函数为:
\[ G(s)H(s) = \frac{k(s + 1)}{s(s - 1)(s^2 + 4s + 20)} \]
对于单位圆内的极点,我们可以设置 \( s = e^{j\omega} \),其中 \( \omega \) 是角频率,然后将 \( s \) 替换到开环传递函数中。为了得到 \( \zeta = 0.5 \),我们通常需要找一个 \( k \) 值,使得闭环增益 \( K \) 对于某特定的角频率 \( \omega \) 等于1(因为\( \zeta = \sqrt{1 - (K)^{-2}} \))。在这种情况下,\( K = 1 \) 或者 \( |G(j\omega_c)H(j\omega_c)| = 1 \),其中 \( \omega_c \) 是临界角频率。
由于这里没有给出具体的数值计算过程,我将提供一个MATLAB代码示例来帮助你找到 \( k \) 和 \( \omega_c \):
```matlab
syms s k w % 定义符号变量
% 开环传递函数
G_H = k * (s + 1) / (s*(s - 1)*(s^2 + 4*s + 20));
% 极坐标转换为复数形式
G_H_complex = expand(G_H * exp(-1i*w*s)); % 将s替换为ejw
% 求取幅值等于1时的k值
cond_1 = abs(G_H_complex) == 1;
% 解方程求k
sol_k = solve(cond_1, k);
if length(sol_k) > 1
disp('有多个解,请选择合适的');
else
k_value = double(sol_k);
end
% 计算临界角频率
cond_2 = imag(G_H_complex) == 0; % 当幅值为1时,虚部为0
critical_freq = w /.real(solve(cond_2, s)); % 解出s,得到ωc
% 输出结果
disp(['For k = ', num2str(k_value), ', the critical angular frequency is ', num2str(critical_freq)]);
```
运行这个代码后,它会输出对应于 \( \zeta = 0.5 \) 的 \( k \) 值和临界角频率。请注意,在实际应用中,可能需要通过数值方法来逼近解,因为解析解可能存在困难。如果你希望看到实际数值,你需要在MATLAB环境中运行该代码。
阅读全文