开环函数为G(s)=k/s(s+1)(s+5),编写脚本程序,绘制根轨迹图确定k=1,10,100时的闭环特征根
时间: 2024-03-27 11:38:20 浏览: 126
根轨迹方程闭环系统特征方程PPT学习教案.pptx
好的,我可以用Python编写脚本程序来绘制根轨迹图,并确定不同k值下的闭环特征根。
首先,我们需要导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import tf2zpk
```
然后,我们定义开环传递函数:
```python
num = 1
den = [1, 6, 5, 0]
G = tf2zpk(num, den)
```
接下来,我们定义一个函数来计算根轨迹的路径:
```python
def root_locus(G, k_min, k_max):
poles = G[1]
zeros = G[0]
num_poles = len(poles)
num_zeros = len(zeros)
angles = np.linspace(0, 2*np.pi, 1000)
roots = np.zeros((num_poles + num_zeros, len(angles)), dtype=np.complex_)
for i in range(len(angles)):
root_angle = angles[i]
for j in range(num_zeros):
roots[j, i] = zeros[j]
for j in range(num_poles):
roots[num_zeros+j, i] = -1/float(k_min) * (poles[j] + abs(poles[j]) * np.exp(1j*root_angle))
return roots
```
该函数接受开环传递函数、k的最小值和最大值作为输入,并返回根轨迹的路径。
接下来,我们使用Matplotlib来绘制根轨迹:
```python
k_values = [1, 10, 100]
plt.figure(figsize=(10, 6))
for k in k_values:
roots = root_locus(G, k, k)
plt.plot(roots.real, roots.imag)
plt.title('Root Locus for G(s)=k/s(s+1)(s+5)')
plt.xlabel('Real Axis')
plt.ylabel('Imaginary Axis')
plt.grid(True)
plt.show()
```
最后,我们使用Numpy来计算每个根的值:
```python
for k in k_values:
closed_loop_poles = np.roots([1, 6, 5, k])
print('k = {}: {}'.format(k, closed_loop_poles))
```
这样就可以得到不同k值下的闭环特征根了。完整的代码如下:
阅读全文