编写matlab程序,完成实验内容3
时间: 2024-11-13 11:25:24 浏览: 4
matlab实验程序与结果_matlab实验程序_
好的,以下是针对实验内容3的MATLAB程序代码。该程序将绘制不同超调量要求下的根轨迹,并确定相应的开环增益 \( K \) 范围,最后绘制相应的闭环系统阶跃响应曲线。
```matlab
% 实验内容3:单位负反馈系统,开环传递函数 G(s) = K / ((s + 4)*(s + 6))
% 定义开环传递函数
num = [1]; % 分子系数
den = conv([1 4], [1 6]); % 分母系数
% 绘制根轨迹
figure;
rlocus(num, den);
title('根轨迹图');
grid on;
% 求解不同超调量要求下的开环增益 K 范围
% 超调量公式:\sigma_p = e^{(\pi * \zeta) / \sqrt{1 - \zeta^2)}
% 对应的阻尼比 \zeta 可以从超调量反推
% 超调量 16.3%
sigma_p_1 = 0.163;
zeta_1 = solve(exp(-pi * zeta / sqrt(1 - zeta^2)) == sigma_p_1, zeta);
zeta_1 = double(zeta_1);
% 超调量 4.3%
sigma_p_2 = 0.043;
zeta_2 = solve(exp(-pi * zeta / sqrt(1 - zeta^2)) == sigma_p_2, zeta);
zeta_2 = double(zeta_2);
% 超调量 0.43%
sigma_p_3 = 0.0043;
zeta_3 = solve(exp(-pi * zeta / sqrt(1 - zeta^2)) == sigma_p_3, zeta);
zeta_3 = double(zeta_3);
% 计算对应开环增益 K 的范围
[K_1, poles_1] = rlocfind(num, den);
[K_2, poles_2] = rlocfind(num, den);
[K_3, poles_3] = rlocfind(num, den);
% 打印结果
fprintf('超调量 16.3%% 时,开环增益 K 的范围: %.2f\n', K_1);
fprintf('超调量 4.3%% 时,开环增益 K 的范围: %.2f\n', K_2);
fprintf('超调量 0.43%% 时,开环增益 K 的范围: %.2f\n', K_3);
% 绘制阶跃响应曲线
figure;
t = 0:0.01:10; % 时间向量
% 超调量 16.3%
sys_1 = feedback(tf(K_1 * num, den), 1);
[y1, t1] = step(sys_1, t);
subplot(3, 1, 1);
plot(t1, y1);
title('超调量 16.3% 时的阶跃响应');
grid on;
% 超调量 4.3%
sys_2 = feedback(tf(K_2 * num, den), 1);
[y2, t2] = step(sys_2, t);
subplot(3, 1, 2);
plot(t2, y2);
title('超调量 4.3% 时的阶跃响应');
grid on;
% 超调量 0.43%
sys_3 = feedback(tf(K_3 * num, den), 1);
[y3, t3] = step(sys_3, t);
subplot(3, 1, 3);
plot(t3, y3);
title('超调量 0.43% 时的阶跃响应');
grid on;
```
### 说明
1. **定义开环传递函数**:使用 `num` 和 `den` 定义开环传递函数 \( G(s) = \frac{K}{(s + 4)(s + 6)} \)。
2. **绘制根轨迹**:使用 `rlocus` 函数绘制根轨迹图。
3. **求解不同超调量要求下的开环增益 \( K \) 范围**:
- 使用超调量公式计算对应的阻尼比 \( \zeta \)。
- 使用 `rlocfind` 函数找到对应的开环增益 \( K \)。
4. **绘制阶跃响应曲线**:使用 `feedback` 函数构建闭环系统,并使用 `step` 函数绘制阶跃响应曲线。
运行上述代码将生成根轨迹图和不同超调量要求下的阶跃响应曲线。希望这对你有帮助!如果有任何问题,请随时提问。
阅读全文