当前位置: 首页 > wzjs >正文

ASP动态网站制作高端营销型网站建设

ASP动态网站制作,高端营销型网站建设,宁波做网站建设推广,沈阳设计网站公司哪家好目录 1. 前言 2. 增量式PID控制的基本原理 2.1 PID控制的基本概念 2.2 增量式PID控制的特点 3. 增量式PID控制的Python实现:温控系统 3.1 构建增量式PID控制器 3.2 使用增量式PID控制器 3.3 运行模拟 3.4 完整代码 4. 参数调整与优化 4.1 参数选择 4.2…

目录

1. 前言

2. 增量式PID控制的基本原理

2.1 PID控制的基本概念

2.2 增量式PID控制的特点

3. 增量式PID控制的Python实现:温控系统

3.1 构建增量式PID控制器

3.2 使用增量式PID控制器

3.3 运行模拟

3.4 完整代码 

4. 参数调整与优化

4.1 参数选择

4.2 参数调整方法

5. 总结


1. 前言

在工业控制和自动化领域,PID控制是一种非常经典的控制算法,广泛应用于温度、压力、速度等参数的调节。传统的PID控制算法直接计算控制量,而增量式PID控制则通过计算增量来调整控制量,具有计算简单、易于实现和适合数字控制等优点。本文将详细介绍增量式PID控制的原理,并通过Python代码实现一个完整的增量式PID控制器,帮助大家理解和应用这一技术。

传统PID可以去看:

《最最最基础常用的控制:PID【基础+代码实例:温控系统】》

2. 增量式PID控制的基本原理

2.1 PID控制的基本概念

PID控制是一种基于比例(Proportional)、积分(Integral)和微分(Derivative)的控制算法。它的基本思想是通过测量系统的当前值与目标值之间的误差,计算出控制量来调整系统,使误差趋近于零。

2.2 增量式PID控制的特点

增量式PID控制的核心在于计算控制量的增量,而不是直接计算控制量。其公式如下:

其实就是对PID公式求了个导,但是这样计算量更小。 

其中:

  • Δu(k) 是当前时刻的控制增量

  • e(k) 是当前时刻的误差

  • Kp​ 是比例系数

  • Ki​ 是积分系数

  • Kd​ 是微分系数

增量式PID控制的优点包括:

  1. 计算简单:只需要当前和前几次的误差值。

  2. 易于实现:适合数字控制系统。

  3. 抗积分饱和:通过增量调整,可以避免积分项过大导致的系统不稳定。

3. 增量式PID控制的Python实现:温控系统

还是用我们熟悉的温控系统

3.1 构建增量式PID控制器

下面是增量式PID控制器的Python实现代码:

class IncrementalPID:def __init__(self, kp, ki, kd):"""初始化增量式PID控制器:param kp: 比例系数:param ki: 积分系数:param kd: 微分系数"""self.kp = kpself.ki = kiself.kd = kdself.e_prev = [0, 0, 0]  # 保存最近三次的误差值def compute(self, target, current):"""计算控制增量:param target: 目标值:param current: 当前值:return: 控制增量"""# 计算误差e = target - current# 更新误差历史self.e_prev[2] = self.e_prev[1]self.e_prev[1] = self.e_prev[0]self.e_prev[0] = e# 计算增量控制量delta_u = (self.kp * (self.e_prev[0] - self.e_prev[1]) +self.ki * self.e_prev[0] +self.kd * (self.e_prev[0] - 2 * self.e_prev[1] + self.e_prev[2]))return delta_u

3.2 使用增量式PID控制器

为了验证增量式PID控制器的效果,我们构建一个简单的模拟环境,例如温度控制系统:

import matplotlib.pyplot as plt
import numpy as np# 模拟环境:温度控制系统
class TemperatureSystem:def __init__(self, initial_temp=20):self.temperature = initial_temp  # 初始温度self.max_temp = 100  # 最大温度限制def update(self, control_signal, dt=1,K=0.1, alpha=0.05):"""更新温度:param control_signal: 控制信号:param dt: 时间步长"""# 模拟温度变化:控制信号越大,温度上升越快self.temperature = self.temperature + K * (control_signal - alpha * self.temperature)# 限制温度不超过最大值self.temperature = min(self.temperature, self.max_temp)def get_temperature(self):return self.temperature

3.3 运行模拟

# 初始化PID控制器和温度系统
pid = IncrementalPID(kp=0.5, ki=0.1, kd=0.05)
system = TemperatureSystem(initial_temp=20)
target_temp = 60  # 目标温度
total_time = 100  # 总时间步长
dt = 1  # 时间步长# 记录温度变化
time_steps = []
temperatures = []
control_signals = []# 模拟控制过程
current_temp = system.get_temperature()
for t in range(total_time):# 计算控制增量delta_u = pid.compute(target_temp, current_temp)# 计算当前控制信号(假设初始控制信号为0)if t == 0:control_signal = delta_uelse:control_signal += delta_u# 更新系统状态system.update(control_signal, dt)current_temp = system.get_temperature()# 记录数据time_steps.append(t)temperatures.append(current_temp)control_signals.append(control_signal)# 绘制结果
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(time_steps, temperatures)
plt.axhline(y=target_temp, color='r', linestyle='--', label='目标温度')
plt.xlabel('时间步长')
plt.ylabel('温度')
plt.title('温度变化')
plt.legend()plt.subplot(2, 1, 2)
plt.plot(time_steps, control_signals)
plt.xlabel('时间步长')
plt.ylabel('控制信号')
plt.title('控制信号变化')
plt.tight_layout()
plt.show()

3.4 完整代码 

完整代码如下方便调试:

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font",family='YouYuan')class IncrementalPID:def __init__(self, kp, ki, kd):"""初始化增量式PID控制器:param kp: 比例系数:param ki: 积分系数:param kd: 微分系数"""self.kp = kpself.ki = kiself.kd = kdself.e_prev = [0, 0, 0]  # 保存最近三次的误差值def compute(self, target, current):"""计算控制增量:param target: 目标值:param current: 当前值:return: 控制增量"""# 计算误差e = target - current# 更新误差历史self.e_prev[2] = self.e_prev[1]self.e_prev[1] = self.e_prev[0]self.e_prev[0] = e# 计算增量控制量delta_u = (self.kp * (self.e_prev[0] - self.e_prev[1]) +self.ki * self.e_prev[0] +self.kd * (self.e_prev[0] - 2 * self.e_prev[1] + self.e_prev[2]))return delta_u# 模拟环境:温度控制系统
class TemperatureSystem:def __init__(self, initial_temp=20):self.temperature = initial_temp  # 初始温度self.max_temp = 100  # 最大温度限制def update(self, control_signal, dt=1,K=0.1, alpha=0.05):"""更新温度:param control_signal: 控制信号:param dt: 时间步长"""# 模拟温度变化:控制信号越大,温度上升越快self.temperature = self.temperature + K * (control_signal - alpha * self.temperature)# 限制温度不超过最大值self.temperature = min(self.temperature, self.max_temp)def get_temperature(self):return self.temperature# 初始化PID控制器和温度系统
pid = IncrementalPID(kp=0.5, ki=0.1, kd=0.05)
system = TemperatureSystem(initial_temp=20)
target_temp = 70  # 目标温度
total_time = 200  # 总时间步长
dt = 1  # 时间步长# 记录温度变化
time_steps = []
temperatures = []
control_signals = []# 模拟控制过程
current_temp = system.get_temperature()
for t in range(total_time):# 计算控制增量delta_u = pid.compute(target_temp, current_temp)# 计算当前控制信号(假设初始控制信号为0)if t == 0:control_signal = delta_uelse:control_signal += delta_u# 更新系统状态system.update(control_signal, dt)current_temp = system.get_temperature()# 记录数据time_steps.append(t)temperatures.append(current_temp)control_signals.append(control_signal)# 绘制结果
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(time_steps, temperatures)
plt.axhline(y=target_temp, color='r', linestyle='--', label='目标温度')
plt.xlabel('时间步长')
plt.ylabel('温度')
plt.title('温度变化')
plt.legend()plt.subplot(2, 1, 2)
plt.plot(time_steps, control_signals)
plt.axhline(y=0, color='r', linestyle='--', label='0值')
plt.xlabel('时间步长')
plt.ylabel('控制信号')
plt.title('控制信号变化')
plt.tight_layout()
plt.legend()
plt.show()

4. 参数调整与优化

4.1 参数选择

  • 比例系数 Kp​:增大比例系数可以加快系统响应,但过大可能导致振荡。

  • 积分系数 Ki​:积分系数用于消除稳态误差,但过大可能导致系统不稳定。

  • 微分系数 Kd​:微分系数用于抑制超调,但过大可能导致系统响应变慢。

4.2 参数调整方法

  1. 试凑法:通过不断调整参数,观察系统响应,找到合适的参数组合。

  2. Ziegler-Nichols法:一种经典的经验公式,用于快速确定PID参数。

  3. 自适应调整:根据系统运行状态动态调整PID参数。

5. 总结

增量式PID控制是一种简单而有效的控制算法,特别适合数字控制系统。通过本文的介绍和代码实现,大家可以快速理解和应用增量式PID控制来应用这个同等效果计算量小的方法。在实际应用中,根据具体需求调整PID参数,可以实现更好的控制效果。我是橙色小博,关注我,一起在人工智能领域学习进步!

http://www.dtcms.com/wzjs/111481.html

相关文章:

  • vps做网站教程输入关键词自动生成文章
  • wordpress论坛主题模板seo是指什么职位
  • 网站开发行业怎么样手机版谷歌浏览器入口
  • 创网站多少钱新冠咳嗽怎么办
  • 河北省地图专业网站优化培训
  • 超大网站制作素材什么软件能搜索关键词能快速找到
  • 做公益的网站有哪些西安网站关键词优化推荐
  • 网站建设 发展历程营销网络的建设
  • 成都网站建设及推广新乡网站优化公司
  • 网站制作维护发票搜索引擎实训心得体会
  • 织梦网站如何做关键词网站运营一个月多少钱
  • 手机移动网站设计优化设计数学
  • 网站建设实训主要收获及体会友情手机站
  • 政府网站建设 招标公告品牌营销的四大策略
  • 网站建设启动大会什么是指数基金
  • 上海网站建设企seo怎样优化网站
  • wordpress08影视源码合肥关键词排名优化
  • 360平台推广seo网络优化
  • 米粒网站建设与推广专家业务网站制作
  • 网站里网格怎么做郑州模板网站建设
  • 微信公众平台网页版登陆橘子seo
  • 外贸网站广告宣传网站百度图片搜索引擎入口
  • 吉林网站建站系统哪家好网站的推广方式有哪些
  • 微信群领券网站怎么做百度推广代理商名单
  • 推广网络科技公司济南seo网络优化公司
  • 给网站做缓存seo顾问是什么职业
  • 抖音代运营服务明细表百度seo2022
  • 维护网站软文营销常用的方式
  • 兼职20网站开发搜狗收录提交入口
  • 做任务网站我国的网络营销公司