系统的传递函数为G(s)=(2s^2+5s+1)/(s^2+2s+3),绘制出其根轨迹,伯德图和奈奎斯特图
§ Code
import numpy as np
import matplotlib.pyplot as plt
s = np.arange(-2,3,0.01) # s的取值范围为-2到3,步长为0.01
G = (2*s**2+5*s+1)/(s**2+2*s+3) # G(s)函数表达式
plt.figure(figsize=(10,6)) # 创建画布,并设置大小
# 绘制根轨迹图
plt.subplot(121) # 将画布分割成1行2列,图像画在从左到右从上到下的第1块
plt.title('Root Locus') # 设置标题
plt.xlabel('Real Axis') # 设置横轴标题
plt.ylabel('Imaginary Axis') # 设置纵轴标题
# 由于G(s)=0时,有复根 s=-1±j√5,所以将实部-1处画出一条竖直直线作为零点位置的参考。注意竖直直线要比曲线先画出来。
# 由于G(s)=0时,有复根 s=-1±j√5,所以将实部-1处画出一条竖直直线作为零位位子的参考。注意竖直直应该先于曲线画出来。
plt.axvline(-1,color='k',ls='--',lw=0.8)
plt.plot(np.real(G),np.imag(G),'b',lw=0.8)
# 绘制伯德图 # 将画布分割成1行2列,图像画在从左到右从上到下的第2块 plt . subplot (122 ) plt . title ( 'Bode Plot' ) plt . xlabel ( 'Frequency' ) plt . ylabel ( 'Magnitude/Phase' ) w = np . logspace (- 2 , 3 , 1000 ) s = 1 j * w G_mag = 20 * np . log10 ( abs ( G )) G_phase = np . angle ( G , deg = True ) plt . subplot ( 122 ) ax_mag = fig . add_subplot ( 122 , projection= 'polar' ) ax_mag . plot (( w ), abs (( G ))) ax_phase = fig . add_subplot () ax_phase . plot (( w ), np . angle (( G ))) # 由于奈奎斯特图是伯德图的特例(当K=1时就是奈奎斯特图 ) , 故不再单独进行实例化 # 显式执行映射关闭 pl t . show ()
## 由于奈奎斯特図是伯德圖的特䣁︸當K= 1 時就是奈奎斯特圖 ︸故不再單独進行實䣁︸ ## 映射關閉 ## 顯式執衊映射關閉 ## 顯弤、 執《映射關閉 ## 顯弤、 執《映射關閉 ## 顯弤、 執《映射關閉 ## 顯弤、 執《映射關閉 Pl t· show()
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!