返回顶部
首页 > 资讯 > 后端开发 > Python >Python 自动控制原理 control的详细解说
  • 915
分享到

Python 自动控制原理 control的详细解说

2024-04-02 19:04:59 915人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录传递函数输入响应系统绘图Laplace 逆变换传递函数 创建传递函数有两种方式: import control as ctrl # 方式 1 s = ctrl.tf('s')

传递函数

创建传递函数有两种方式:

import control as ctrl
 
# 方式 1
s = ctrl.tf('s')
sys = 100 / (s ** 2 + 10 * s + 100)
 
# 方式 2
sys = ctrl.tf([100], [1, 10, 100])

对 tf 这个类,它内置的方法可求解 零点、极点、特征参数、特征根

# 求零点
sys.zero()
 
# 求极点
sys.pole()
 
# 特征参数、特征根
sys.damp()

输入响应

# 阶跃动态指标
step_info(sys)
# 阶跃响应
t, response = step_response(sys, T)
 
# 脉冲响应
t, response = impulse_response(sys, T)
 
t, response = initial_response(sys, T)
t, response = forced_response(sys, T)

T 是响应的时间,可以是 float (即时间上限),也可以是数组

阶跃动态指标是 dict 类型,包括:'RiseTime', 'SettlingTime', 'SettlingMin', 'SettlingMax', 'Overshoot', 'Undershoot', 'Peak', 'PeakTime', 'SteadyStateValue'

系统绘图

# Nyquist图, 可传入列表
nyquist_plot(sys)
 
# Bode图, 可传入列表
bode_plot(sys)
 
# 根轨迹图
root_locus(sys)

绘图使用的是 matplotlib.pyplot,所以执行完函数后,要加上 plt.show() 才会显示图像

Laplace 逆变换

可能是我太弱找不到这个包的 Laplace 逆变换函数,也可能是这个包真的没有这个函数

于是我利用 sympy 这个包求解:定义时域响应这个类,__call__ 使其可以计算时间数组 (np.array) 的响应

import sympy
class Time_Response:
    ''' 时域响应'''
    s, t = sympy.symbols('s, t')
 
    def __init__(self, fun, doprint=False):
        ''' fun: 返回关于s的传递函数的 function
            doprint: 输出公式'''
        sys = fun(self.s)
        self.f_t = sympy.integrals.inverse_laplace_transfORM(sys, s=self.s, t=self.t)
        if doprint:
            sympy.pprint(self.f_t)
 
    def __call__(self, time):
        ''' 使自身可作为函数被调用'''
        response = list(map(lambda i: float(self.f_t.subs({self.t: i})), time))
        return np.array(response)

设置 doprint 为 True,则可以输出时域响应的方程 —— 但是问题在于,自动控制原理里面的 Laplace 变换是默认 F(s) 各阶导数的初始值均为 0 的,这个条件我没有办法加入到 sympy 的求解过程里,所以结果看起来就有些奇怪

import control as ctrl
import matplotlib.pyplot as plt
import numpy as np
 
# 自定义类所在的模块
from mod.math_model import Time_Response
orange = 'orange'
blue = 'deepskyblue'
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
f_t = Time_Response(lambda s: 100 / (s ** 2 + 10 * s + 100) / s, doprint=True)
t = np.linspace(0, 1, 100)
plt.subplot(1, 2, 1)
plt.title('sympy 计算')
plt.plot(t, f_t(t), c=orange)
s = ctrl.tf('s')
sys = 100 / (s ** 2 + 10 * s + 100)
t, response = ctrl.step_response(sys, T=1)
plt.subplot(1, 2, 2)
plt.title('control 计算')
plt.plot(t, response, c=blue)
plt.show()

对比 sympy 和 control 求解的响应曲线:一毛一样

到此这篇关于python 自动控制原理 control的详细解说的文章就介绍到这了,更多相关Python control内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python 自动控制原理 control的详细解说

本文链接: https://lsjlt.com/news/119592.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python 自动控制原理 control的详细解说
    目录传递函数输入响应系统绘图Laplace 逆变换传递函数 创建传递函数有两种方式: import control as ctrl # 方式 1 s = ctrl.tf('s')...
    99+
    2024-04-02
  • Redis核心原理详细解说
    目录1、Redis为什么这么快2、Redis网络模型3、Redis数据结构4、Redis持久化RDB快照(snapshot)AOF(append-only file)RDB与AOF区别Redis数据备份策略5、Redis...
    99+
    2022-07-21
    Redis核心原理 Redis原理
  • SpringBoot超详细讲解自动配置原理
    目录SpringBoot自动配置原理SpringBoot特点1.依赖管理A.父项目做依赖管理B.开发导入starter场景启动器C.可以修改默认版本号2.自动配置A.自动配好Tomc...
    99+
    2024-04-02
  • 详解PID控制器原理
    目录一、P - Proportional 比例二、I - Integral 积分三、D - Derivative 导数四、调整常数项五、补充六、总结七、调试口诀八、具体方法一、P -...
    99+
    2024-04-02
  • VC中Tab control控件的用法详细解析
    1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Prope...
    99+
    2022-11-15
    Tab_control控件
  • SpringBoot原理之自动配置机制详解
    目录前言 Spring配置类 SpringBoot自动配置 自动配置的概念 自动配置的运行机制 加载方式 SpringFactoriesLoader机制 SpringFactorie...
    99+
    2024-04-02
  • Springboot启动原理详细讲解
    主启动类方法: @SpringBootApplication public class MyJavaTestApplication { public static void ...
    99+
    2024-04-02
  • spring IOC控制反转原理详解
    目录IOC概念补:工厂模式和单例模式区别IOC接口——实现IOC容器1.BeanFactory2.ApplicationContextIOC操作管理Beanx...
    99+
    2024-04-02
  • SpringBoot自动装配原理详解
    目录summarydetail以Redis举例原理和结果分析依赖的注解自动装配的过程summary detail 传统的Spring项目会有很多的配置文件,比如我们要使用Redis,...
    99+
    2023-05-15
    Java SpringBoot SpringBoot自动装配原理
  • SpringBoot自动配置原理详解
    目录阅读收获一、SpringBoot是什么二、SpringBoot的特点三、启动类3.1 @SpringBootApplication四、@EnableAutoConfigurati...
    99+
    2024-04-02
  • SpringBoot详细讲解断言机制原理
    目录1.简单断言2.数组断言3.组合断言4.异常断言5.超时断言6.快速失败JUnit 5 内置的断言可以分成如下几个类别: 1.简单断言 用来对单个值进行简单的验证。如: 方法说明...
    99+
    2024-04-02
  • 有关Python问题的详细解说
    这篇文章主要讲解了“有关Python问题的详细解说”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有关Python问题的详细解说”吧!问题1:谁先赢微软艾米和布拉德轮流滚动一个漂亮的六边形模具...
    99+
    2023-06-15
  • MySQL索引机制的详细解析及原理
    目录一.索引的类型与常见的操作二.常见的索引详解与创建三.索引的原理1.通过实验介绍B+tree2.延伸四.聚簇索引和非聚簇索引1.使用聚簇索引的优势2.什么情况下无法使用索引总结一...
    99+
    2024-04-02
  • 自动化控制系统工作原理有哪些
    自动化控制系统工作原理主要包括以下几个方面:1. 传感器:传感器用于感知和采集被控对象的信息,如温度、压力、速度等。传感器将这些信息...
    99+
    2023-09-22
    系统
  • Java SpringBoot自动装配原理详解
    目录自动装配的含义springboot应用程序启动类总结自动装配的含义 在SpringBoot程序main方法中,添加@SpringBootApplication或者@EnableA...
    99+
    2024-04-02
  • SpringBoot自动装配的原理详解分析
    目录前言自动装配案例自动装配分析自动装配总结前言 关于 ​​SpringBoot​​​ 的自动装配功能,相信是每一个 ​​Java​​ 程序员...
    99+
    2022-11-13
    SpringBoot 自动装配原理 SpringBoot 自动装配
  • SpringBoot详细分析自动装配原理并实现starter
    目录约定优于配置自动装配手写一个starter组件约定优于配置 SpringBoot的预定优于配置主要体现在以下几个方面: maven的目录结构: 配置文件默认存放在resource...
    99+
    2024-04-02
  • Android自定义控件基本原理详解(一)
    前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的...
    99+
    2022-06-06
    Android
  • MySQL的主从复制原理详细分析
    目录前言一、主从复制概念二、读写分离的概念三、主库和从库1. 主库2. 从库四、主从复制的流程五、主从复制效果展示前言 在实际生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性...
    99+
    2022-07-14
    MySQL主从复制原理 MySQL主从复制
  • 详解Python自动化之文件自动化处理
    一、生成随机的测验试卷文件 假如你是一位地理老师, 班上有 35 名学生, 你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋, 你无法确信学生不会作弊。你希望随机调整问...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作