python中已知传递函数,怎么画根轨迹
时间: 2024-03-16 19:42:50 浏览: 189
要画出一个系统的根轨迹,需要以下步骤:
1. 确定系统的传递函数,例如:
```
G(s) = K / (s^2 + 2ζωn s + ωn^2)
```
其中,`K` 是系统增益,`ζ` 是阻尼比,`ωn` 是自然频率。
2. 根据传递函数的特点,确定系统的极点和零点。
对于上面的传递函数,它的极点为:
```
s = -ζωn ± jωn sqrt(1-ζ^2)
```
如果阻尼比 `ζ` 为 0,则极点是纯虚数,表示系统是无阻尼振荡的。
如果阻尼比 `ζ` 在 0 到 1 之间,则极点是共轭复数对,表示系统是有阻尼振荡的。
如果阻尼比 `ζ` 大于 1,则极点是实数,表示系统是过阻尼的。
3. 根据极点和零点的位置,画出根轨迹。
根轨迹是极点随着增益 `K` 的变化轨迹。根轨迹的起点和终点分别是零点和无穷远点。根轨迹从左侧进入到右侧,每经过一个极点就改变方向。当极点在实轴上时,根轨迹从极点两侧经过。当极点在虚轴上时,根轨迹在虚轴上对称。
下面是一个画根轨迹的 Python 代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 传递函数
K = 1
ζ = 0.5
ωn = 1
num = [K]
den = [1, 2*ζ*ωn, ωn**2]
# 极点和零点
poles = np.roots(den)
zeros = np.roots(num)
# 计算根轨迹
k = np.linspace(0, 10, 1000)
roots = np.zeros((len(poles), len(k)), dtype=np.complex128)
for i in range(len(poles)):
roots[i, :] = np.sqrt(poles[i]**2 + k**2)
# 画图
fig, ax = plt.subplots()
ax.plot(np.real(roots), np.imag(roots), 'b')
ax.plot(np.real(poles), np.imag(poles), 'rx')
ax.plot(np.real(zeros), np.imag(zeros), 'o')
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
ax.set_aspect('equal', 'box')
ax.set_xlabel('Real Axis')
ax.set_ylabel('Imaginary Axis')
ax.set_title('Root Locus')
plt.show()
```
这段代码可以画出上面传递函数的根轨迹。根据需要,可以调整传递函数的参数,或者修改代码中的传递函数,来画出不同的根轨迹。
阅读全文