python 已知响应函数求单位阶跃响应或脉冲响应

最近学习自动控制原理,关于控制系统的一些,老师用布置了一些作业说要用matlab画,我试试python

首先介绍一下所使用的库:control matplotlib sympy


1.control库:用来计算脉冲响应与阶跃响应

python 已知响应函数求单位阶跃响应或脉冲响应_第1张图片
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))
x
2 + y*2

参照详细例子:
http://blog.csdn.net/lanchunhui/article/details/49979411

3.matplotlib 用以画图

分别是单位脉冲响应和单位节约响应的图像

python 已知响应函数求单位阶跃响应或脉冲响应_第2张图片
单位脉冲响应.png
python 已知响应函数求单位阶跃响应或脉冲响应_第3张图片
单位阶跃响应.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()

你可能感兴趣的:(python 已知响应函数求单位阶跃响应或脉冲响应)