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

最近学习自动控制原理,关于控制系统的一些,老师用布置了一些作业说要用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))
x
2 + 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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 真的 一个垃圾 就能说出所有的辛酸了! 记得是一个下午,我的某某VPN时间到了,打算换一个,看了网上的帖子说是LO...
    flyxw阅读 17,668评论 0 0
  • 对于槐花,我一直有一种无法言说的喜欢。即便是小时候因为它而掉落一次悬崖,差点搭上一条小命,可对它依然讨厌不起来,除...
    亦为清心阅读 3,440评论 5 2
  • 本文旨在抨击盲目依赖干货文的读者。 本文的目的在于:警告爱好干货的读者 干货文对他们可能造成的危害 如某位简书名人...
    岱黛阅读 11,628评论 71 165
  • 给家长的一封信 10.9 家校沟通 一路同行 不知不觉孩子们入学已经一个月了,在这最艰难的第一个月里,因为我们的携...
    略略略dd阅读 3,627评论 0 0
  • 有人问:如何在长期不变的地点与人物之间维持一种良性的社交呢? 我想,他想问的可能是如何在单位这样一个基本稳定的相对...
    诸茗乐阅读 5,392评论 2 24