使用python-control库实现MATLAB自动控制原理常用函数:Bode图 Nyquist图 根轨迹

最近在学习自动控制原理,电脑装的windows/ubuntu双系统,matlab安装在windows上,日常用ubuntu,写作业切换系统过于繁琐,因此想要找到python中可以替换MATLAB Control工具箱的函数库,尝试了scipy.signal、自行编写bode、nyquist等函数方法后,找到了python control库,非常方便,特此记录。Control官方网站

安装

# pip安装
pip install slycot   # 可选
pip install control

# conda安装
conda install numpy scipy matplotlib    # 如果没有安装过这几个库,否则不用这行这一句
conda install -c conda-forge control

# 测试是否安装成功
python -c "import control" # 如果没有报错说明安装成功

功能

状态方程

生成状态方程
G ( s ) = 25 s 2 + 4 s + 25 G(s)=\frac{25}{s^2+4s+25} G(s)=s2+4s+2525

import control as ctr
import matplotlib.pyplot as plt

# 使用tf生成状态方程
sys = ctr.tf([25],[1,4,25])

# 使用表达式生成状态方程
s = ctr.tf('s')
sys  = 25.0/(s**2+4.0*s+25.0)

Bode图

plt.figure(figsize=(12,12)) # 调整图像大小
ctr.bode_plot(sys)

在这里插入图片描述

Nyquist图

ctr.nyquist_plot(sys)

在这里插入图片描述

根轨迹图

ctr.rlocus(sys)

在这里插入图片描述

LQR控制器

A = [[0,1,0,0],[0,0,-25,0],[0,0,0,1],[0,0,7,0]]
B = [[0],[0.25],[0],[-0.5]]
Q = [[1,0,0,0],[0,1,0,0],[0,0,100,0],[0,0,0,100]]
R = 1
[K,S,e] = ctr.lqr(A,B,Q,R)
print("K:\n",K)
print("S:\n",S)
print("e:\n",e)

输出

K:
[[  1.           2.25099079 -57.7198152  -17.12633357]]
S:
[[  2.25099079   2.03347978 -17.12633357  -0.98326011]
 [  2.03347978   3.7807706  -37.56795909  -2.61159629]
 [-17.12633357 -37.56795909 692.61081876  96.65565085]
 [ -0.98326011  -2.61159629  96.65565085  32.94686901]]
e:
[-6.1071997+0.j	-1.1592202+0.j	-0.9297473+0.8087148j	-0.9297473-0.8087148j]
  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值