最近学习自动控制原理,关于控制系统的一些,老师用布置了一些作业说要用matlab画,我试试python
首先介绍一下所使用的库:control matplotlib sympy
1.control库:用来计算脉冲响应与阶跃响应
Paste_Image.png
2.sympy:用以化简多项式为和的形式方便写参数
比如我们使用 sympy 来验证等式:x2+y2=(x+(2xy)1/2+y)(x−(2xy)1/2+y)
from sympy import Symbol, expand
from fractions import Fraction
x = Symbol('x')
y = Symbol('y')
expand((x+(2xy)Fraction(1, 2)+y)(x-(2xy)Fraction(1, 2)+y))
x2 + y*2
参照详细例子:
http://blog.csdn.net/lanchunhui/article/details/49979411
3.matplotlib 用以画图
分别是单位脉冲响应和单位节约响应的图像
单位脉冲响应.png
单位阶跃响应.png
![)QYB1_(CM2XKGM6}$)19R]P.png](http://upload-images.jianshu.io/upload_images/5854570-07199bf87612f8e6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
源码如下:
import control as ctl
import matplotlib.pyplot as plt#画图包
from sympy import Symbol, expand
def step_plot(s,color):#
y,t=ctl.step(s)
plt.plot(t,y,color,linewidth=0.6)
plt.xlabel('Time(seconds)',fontsize=9)
plt.ylabel('Amplitude',fontsize=9)
return plt
def impulse_plot(s,color):#
y,t=ctl.impulse(s)
plt.plot(t,y,color,linewidth=0.6)
plt.xlabel('Time(seconds)',fontsize=9)
plt.ylabel('Amplitude',fontsize=9)
return plt
s=Symbol("s")
y=Symbol("y")
list=expand((s**2+0.6*s+1)*(s**2+3*s+9)*(s+5))
s=ctl.tf([45],[1,8.6,29.8,67.4,51,45])
b=ctl.tf([1],[1,0.6,1])
ax1=plt.subplot(311)#在图表2中创建子图1
ax1=impulse_plot(s,'red')
ax2=plt.subplot(312)#在图表2中创建子图2
ax2=impulse_plot(b,'blue')
ax3=plt.subplot(313)
ax1=impulse_plot(s,'red')
ax2=impulse_plot(b,'-.')
plt.show()