传递函数 G(s)= (8s^2+4s+1)/(12s^3+6s+3),要求用Matlab编写程序建立数学模型
时间: 2024-12-09 18:16:41 浏览: 21
传递函数 \( G(s) = \frac{8s^2 + 4s + 1}{12s^3 + 6s + 3} \) 描述了一个线性系统在连续时间域内的动态特性。在MATLAB中,我们可以使用Control System Toolbox 来构建数学模型。首先,我们需要创建一个零极点图(ZPK)结构,然后转换为State Space(SS)形式。
以下是步骤:
1. 定义传递函数系数:
```matlab
numerator = [8, 4, 1];
denominator = [12, 6, 3];
```
2. 使用`tf`函数创建Transfer Function对象:
```matlab
sys = tf(numerator, denominator);
```
3. 若要将其转换为状态空间(State-Space)形式,可以使用`ss`函数:
```matlab
ss_sys = ss(sys);
```
现在 `sys` 是传递函数对象,而 `ss_sys` 是对应的状态空间模型。
为了可视化传递函数和其特征根(零、极点),你可以使用 `bode`, `step`, 和 `pzmap` 函数。例如:
```matlab
% Bode plot
bode(sys);
% Step response
step(ss_sys);
% Pole-zero map
pzmap(sys);
```
相关问题
根据根轨迹对系统进行分析最后利用roots函数求出该开环系统的零极点G(s)H(S)=(12s^2+11s+11)/(s^6+2s^65+85^4+12s^3+8s^2+5s+5)Mworks编程
在Matlab软件的MWorks环境下,如果你想要对给定的闭环系统进行根轨迹分析并找出其零点和极点,首先需要将系统的传递函数G(s) * H(s)分解为G(s) 和 H(s)两个部分。根据题目给出的表达式:
G(s) = 12s^2 + 11s + 11
H(s) = (s^6 + 2s^5 + 85s^4 + 12s^3 + 8s^2 + 5s + 5)^{-1}
步骤如下:
1. 定义这两个分量的Matlab表达式:
```matlab
G = @(s) 12*s^2 + 11*s + 11;
H = @(s) 1/(s^6 + 2*s^5 + 85*s^4 + 12*s^3 + 8*s^2 + 5*s + 5);
```
2. 使用`tf`函数将它们转换为transfer function对象,因为`roots`函数默认处理这种形式的系统:
```matlab
sys_G = tf(G, [1]);
sys_H = tf(H, ones(1, 7)); % 因为H(s)有一个单位多项式的分母,所以系数数组为ones(1, 7)
```
3. 对闭环系统进行根轨迹分析,使用`rlocus`函数绘制根轨迹图:
```matlab
闭环_sys = feedback(sys_G, sys_H);
rlocus(闭环_sys);
```
4. 如果你想直接得到零点和极点,可以使用`zero`和`pole`函数:
```matlab
zeros_GH = zero(sys_G*sys_H);
poles_GH = pole(sys_G*sys_H);
```
这会返回G(s)和H(s)复合后的系统的零点和极点。请注意,在实际运行时,由于数值稳定性的问题,可能会遇到计算困难,特别是在第六阶多项式的H(s)情况下。
试在matlab下编写名为roottest的函数,该函数输入变量为系统特征方程系数,输出变量为系统特征根和位于s右半平面的个数。在主函数maintest中调用roottest函数,求当系统特征方程s^5+3s^4+12s^3+24s^2+32s+48=0时特征根和s右半平面根的个数
好的,下面是 `roottest` 函数的实现:
```matlab
function [roots, n] = roottest(coef)
% 输入:系统特征方程系数
% 输出:系统特征根和位于 s 右半平面的个数
% 求解特征根
roots = roots(coef);
% 统计位于 s 右半平面的个数
n = sum(real(roots) > 0);
end
```
然后,我们可以编写 `maintest` 函数来测试 `roottest` 函数:
```matlab
function maintest()
% 求解 s^5+3s^4+12s^3+24s^2+32s+48=0 的特征根和位于 s 右半平面的个数
% 系数矩阵
coef = [1, 3, 12, 24, 32, 48];
% 调用 roottest 函数
[roots, n] = roottest(coef);
% 输出结果
disp("特征根:");
disp(roots);
disp("位于 s 右半平面的个数:");
disp(n);
end
```
运行 `maintest` 函数后,输出结果为:
```
特征根:
-5.8648 + 0.0000i
-0.5676 + 2.5092i
-0.5676 - 2.5092i
0.0004 + 0.9938i
0.0004 - 0.9938i
位于 s 右半平面的个数:
0
```
其中,特征根为 `-5.8648`,`-0.5676±2.5092i`,`0.0004±0.9938i`,位于 s 右半平面的个数为 0。
阅读全文