Matlab做二阶函数

news2025/6/7 5:00:34

关于解答:

>> % Expert PID Control
% 二阶传递函数的阶跃响应
% 位置式
clc;
clear all;
close all;

n=500;                              % 设置离散点的个数 
Ts=0.001;                           % 设置离散的采样时间
epsilon=0.001;                      % 设置加入积分换进的精度ε
% 对连续时间的传递函数进行离散化
% 两种方式可以同样设置传递函数(连续时间)
% s=tf('s');
% Gs=(100+学号后两位)/(s^2+(10+学号后两位)*s);
Gs=tf(100+学号后两位,[1,(10+学号后两位),0]);
Gz=c2d(Gs,Ts,'z');
[num,den]=tfdata(Gz,'v');
time=zeros(1,n );                   % 离散时间
r=ones(1,n );                       % 离散输入R(s) r(t)
u1=zeros(1,n );                     % 离散专家PID控制器输出U(s) u(t)
u2=zeros(1,n );                     % 离散普通PID控制器输出U(s) u(t)
y1=zeros(1,n );                     % 专家PID控制下的系统输出
y2=zeros(1,n );                     % 普通PID控制下的系统输出
error1=zeros(1,n);                  % 专家PID控制下的系统误差
error2=zeros(1,n);                  % 普通PID控制下的系统误差
% 根据z变换后的公式可知需要
u1_1=0;u1_2=0;                      % u(k-1) u(k-2)
y1_1=0;y1_2=0;                      % y(k-1) y(k-2)
u2_1=0;u2_2=0;                      % u(k-1) u(k-2)
y2_1=0;y2_2=0;                      % y(k-1) y(k-2)
x1=[0,0,0]';                        % 位置式PID:x(1)=error(k);x(2)=(error(k)-error(k-1))/Ts;x(3)=Ts*Σen (n=1~k)
x2=[0,0,0]'; 
x1_2_1=0;
x2_2_1=0;
kp1=2.0;ki1=0.20;kd1=1.00;          % 专家PID原有PID参数
% kp1=3.5;ki1=0.05;kd1=0.25;          % 专家PID原有PID参数
kp2=2.0;ki2=0.20;kd2=1.00;          % 专家PID原有PID参数
% kp2=3.5;ki2=0.05;kd2=0.25;          % 普通PID原有PID参数
% kp2=3.0;ki2=0.05;kd2=0.1;         % 普通PID原有PID参数
error1_1=0;                         % 误差的第k个极值
error2_1=0;                         % 误差的第k个极值

% k1=5.0;                             % 增益放大系数
k1=2.0;  
k2=0.6;                             % 抑制系数

% 循环更新数值(专家PID)
for k=1:1:n  
    time(k)=k*Ts;                   %离散的时间
    u1(k)=kp1*x1(1)+kd1*x1(2)+ki1*x1(3);   %PID控制器
    
    %专家控制的规则     
    %规则1
    %当误差的
    if abs(x1(1))>0.80
        u1(k)=(3/4)*kp1;
    elseif abs(x1(1))>0.40
        u1(k)=(2/3)*kp1;
    elseif abs(x1(1))>0.20
        u1(k)=(1/5)*kp1;
    elseif abs(x1(1))>0.01
        u1(k)=(1/10)*kp1;
    end
    
    %规则2
    if (x1(1)*x1(2)>0)||(x1(2)==0)
        if abs(x1(1))>=0.05
           u1(k)=k1*(kp1*x1(1)+kd1*x1(2)+ki1*x1(3)); 
        else
           u1(k)=k2*(kp1*x1(1)+kd1*x1(2)+ki1*x1(3));
        end
    end
    
    %规则3
    if ((x1(1)*x1(2)<0)&&(x1(2)*x1_2_1>0))||(x1(1)==0)
        u1(k)=u1(k);
    end
    
    %规则4
    if (x1(1)*x1(2)<0)&&(x1(2)*x1_2_1<0)
        if abs(x1(1))>=0.05
            u1(k)=k1*kp1*error1_1;
        else
            u1(k)=k2*kp1*error1_1;
        end
    end
    
    %规则5
    if abs(x1(1))<=epsilon
        u1(k)=((5/6)*kp1)*x1(1)+((1/3)*ki1)*x1(3);
%         u1(k)=0.5*x1(1)+0.01*x1(3);
    end
    
    % 限制控制器的范围
    if u1(k)>=10
        u1(k)=10;
    end
    if u1(k)<=-10
        u1(k)=-10;
    end
    
    %线性化的传递函数
    y1(k)=-den(2)*y1_1-den(3)*y1_2+num(1)*u1(k)+num(2)*u1_1+num(3)*u1_2;
    error1(k)=r(k)-y1(k);
    
    %更新参数
    u1_2=u1_1;u1_1=u1(k);
    y1_2=y1_1;y1_1=y1(k);
    x1(1)=error1(k);
    x1_2_1=x1(2);
    x1(2)=(error1(k)-error1_1)/Ts;
    x1(3)=x1(3)+error1(k)*Ts;
    error1_1=error1(k);
end

% 循环更新数值(普通PID)
for k=1:1:n  
    time(k)=k*Ts;                   %离散的时间
    u2(k)=kp2*x2(1)+kd2*x2(2)+ki2*x2(3);   %PID控制器
    
    %线性化的传递函数
    y2(k)=-den(2)*y2_1-den(3)*y2_2+num(1)*u2(k)+num(2)*u2_1+num(3)*u2_2;
    error2(k)=r(k)-y2(k);
    
    %更新参数
    u2_2=u2_1;u2_1=u2(k);
    y2_2=y2_1;y2_1=y2(k);
    x2(1)=error2(k);
    x2_2_1=x2(2);
    x2(2)=(error2(k)-error2_1)/Ts;
    x2(3)=x2(3)+error2(k)*Ts;
    error2_1=error2(k);
end

figure(1);
plot(time,r,'b',time,y1,'r');
xlabel('time(s)');
ylabel('r,y');
legend('输入','专家PID输出');
figure(2);
plot(time,r-y1,'r');
xlabel('time(s)');
ylabel('error');
legend('专家PID误差');
figure(3);
plot(time,r,'b',time,y1,'r',time,y2,'k');
xlabel('time(s)');
ylabel('r,y1,y2');
legend('输入','专家PID输出','普通PID输出');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2132533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剪辑视频怎么放慢速度?6种方法可以轻易做到

在这个快节奏的短视频时代&#xff0c;视频编辑中的慢动作效果往往能吸引观众的眼球&#xff0c;赋予画面以独特的艺术感和情感深度。但是很多小伙伴不知道该怎么将视频播放速度放缓&#xff0c;今天&#xff0c;给大家分享6种剪辑视频放慢速度的高效方法&#xff0c;一起来学习…

【物理编程】解决物理压力的正确画法

这里写自定义目录标题 压力的画法 压力的画法 该程序是一个交互式的教育工具&#xff0c;它通过可视化的方式帮助学生和教师理解多边形的几何特性以及力的表示方法。以下是该程序的一些优点和对教师的帮助&#xff0c;用专业的语言进行总结&#xff1a; 增强理解力&#xff1a…

98、RS485全自动收发电路入坑笔记

因为RS485采用叉分信号&#xff0c;只支持半双工。正常的RS485芯片驱动电路是需要GPIO来切换发送和接收模式。如下图所示&#xff0c;一般的RS485电平转换芯片都有RE/DE脚&#xff0c;用来切换收发模式。 例如这篇推荐&#xff1a;芯片RS485自动收发电路常见问题与应对策略 但…

【kubernetes】Ingress和Ingress-Controller介绍,高可用应用案例

一&#xff0c;Ingress介绍 Ingress是k8s中一种重要的资源对象&#xff0c;它主要用于定义从集群外部到集群内部服务的HTTP(S)路由规则。用于管理代理 Ingress-Controller的配置文件。 kubectl explain ingress二&#xff0c;Ingress-Controller介绍 Ingress Controller 是 …

[ESP32]:如何在micropython中添加C库

[ESP32]&#xff1a;如何在micropython中添加C库 本文将描述如何在micropython中添加一个基于c语言的led模块。 1.编写c驱动 选择一个目录&#xff1a;examples/usercmodule&#xff0c;建立对应的驱动文件hw_led&#xff1a; . ├── cexample │ ├── examplemodule…

RAG 在企业应用中落地的难点与创新分享

在2024稀土开发者大会-AI Agent与应用创新分会上&#xff0c;我有幸分享了我们团队在企业应用中实施RAG&#xff08;检索增强生成&#xff09;的难点与创新。希望通过这篇文章&#xff0c;与大家探讨我们在实践中遇到的问题和解决方案&#xff0c;为从事相关工作的朋友提供一些…

Spring2-入门

目录 入门案例 案例分析 Log4j2日志框架 Log4j2日志概述 引入依赖 加入日志配置文件 使用日志 入门案例 1.引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&qu…

技术速递|VS Code Java 8月更新 - 重要 Gradle 更新!用户体验与入门向导增强

作者&#xff1a;Nick Zhu 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 Visual Studio Code for Java 八月更新&#xff01;在这篇博客中&#xff0c;我们将涵盖重要 Gradle 更新、更多用户体验改进以及更好的入门体验&#xff0c;马上开始吧&#xff01; Gradle 更…

eclipse配置maven

eclipse配置maven 启动 Eclipse&#xff0c;转到 Window > Preferences 在左侧导航栏中&#xff0c;展开 Maven 节点。 在 User Settings 下&#xff0c;单击 Add。 浏览到 Maven 安装目录中 conf/settings.xml 文件。 在 Global Settings 下&#xff0c;单击 Add。 浏览到…

详解Diffusion扩散模型:理论、架构与实现

本文深入探讨了Diffusion扩散模型的概念、架构设计与算法实现&#xff0c;详细解析了模型的前向与逆向过程、编码器与解码器的设计、网络结构与训练过程&#xff0c;结合PyTorch代码示例&#xff0c;提供全面的技术指导。 关注TechLead&#xff0c;复旦AI博士&#xff0c;分享A…

【三】TDengine 3.3.2 生产级别集群搭建

TDengine 3.3.2 集群搭建 集群规划 一、主机名和端口规划 修改主机信息&#xff1a;修改hosts信息&#xff0c;TDEngine是通过FQDN进行访问&#xff0c; 规划好三个节点对应的hostname。 vi /etc/hosts 追加以下信息 192.168.90.131 node1 192.168.90.132 node2 192.168.90.133…

IV转换放大器原理图及PCB设计分析

【前言】 今天给大家分享一下关于IV转换放大器的相关电路设计心得。IV转换使用的场合非常之多&#xff0c;尤其是电流型输出的传感器&#xff0c;比如光敏二极管、硅光电池等等&#xff0c;这些传感器输出的电流信号非常微弱&#xff0c;我们如果需要检测它们&#xff0c;首先得…

springboot013基于SpringBoot的旅游网站的设计与实现

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 一 、设计说明 1.1 课题开发的背…

android 老项目中用到的jar包不存在,通过离线的方法加载

1、之前的项目用的jar包&#xff0c;已经不在远程仓库中&#xff0c;只能手工去下载&#xff0c;并且安装。 // implementation com.github.nostra13:Android-Universal-Image-Loader // implementation com.github.lecho:hellocharts-android:v1.5.8 这…

Java-数据结构-二叉树-习题(一) (✪ω✪)

文本目录&#xff1a; ❄️一、习题一(检查两颗树是否相同)&#xff1a; ▶ 思路&#xff1a; ▶ 代码&#xff1a; ❄️二、习题二(另一棵树的子树)&#xff1a; ▶ 思路&#xff1a; ▶ 代码&#xff1a; ❄️三、习题三(翻转二叉树)&#xff1a; ▶ 思路&#xff1a; ▶ 代…

【C++】STL容器-string的遍历

1.引言 C STL&#xff08;Standard Template Library&#xff09;作为C标准库的核心部分&#xff0c;其重要性不言而喻。它提供了一系列高效、灵活且可复用的数据结构和算法&#xff0c;极大地提升了开发效率&#xff0c;并使得代码更加易于阅读和维护。 在STL中&#xff0c;…

​中国版Sora:Vidu发布“主体参照”功能,支持让任意主体保持一致

OpenAI发布Sora模型后&#xff0c;掀起了AI视频生成热潮&#xff0c;一段60秒的视频不仅让ai领域的从业者兴奋不已&#xff0c;也让全世界的资本聚集在了这个领域上。 国内玩家在这个赛道也是卷了又卷。字节跳动的即梦AI&#xff0c;快手的可灵AI&#xff0c;智谱AI的CogVideoX…

Kotlin 中的 `flatMap` 方法详解

在 Kotlin 中&#xff0c;flatMap 是一个非常强大的集合操作函数&#xff0c;它结合了 map 和 flatten 的功能。flatMap 能够将一个集合中的每个元素映射为另一个集合&#xff0c;然后将这些集合连接成一个单一的集合。在很多场景下&#xff0c;它比单独使用 map 和 flatten 更…

websim.ai 体验过程+感受

体验 websim.ai 后感觉网站更倾向于客户提需求或者满足客户需求的可视化页面阶段&#xff0c;比较像设计界面。就是一直命令AI添加功能&#xff0c;然后它绘图。导出的代码是单个HTML文件&#xff0c;用前端三件套写的。 体验过程 ① Create a relationship diagram between …

四数之和--力扣18

四数之和 题目思路代码 题目 思路 类似于三数之和&#xff0c;先排序&#xff0c;利用双指针解题。 如果排序后的第一个元素大于目标值&#xff0c;直接返回&#xff0c;为什么nums[i]需要大于等于0&#xff0c;因为目标值可能为负数。比如&#xff1a;数组是[-4, -3, -2, -1…