自校正控制--理论研究与应用

4 仿真分析

广义最小方差间接自校正控制

参数初始化:

a=[1 -1.4 0.5]; b=[0.001 0.001];  c=[1 0.3]; d=2; %对象参数
na=length(a)-1; nb=length(b)-1; nc=length(c)-1; %na、nb、nc为多项式A、B、C阶次
nf=nb+d-1; %nf为多项式F的阶次

控制步数和初值设置

L=400; %控制步数
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i);
yk=zeros(na,1); %输出初值
yrk=zeros(nc,1); %期望输出初值
xik=zeros(nc,1); %白噪声初值
xiek=zeros(nc,1); %白噪声估计初值
yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)]; %期望输出
xi=sqrt(0.1)*randn(L,1); %白噪声序列

RELS初值设置

thetae_1=0.001*ones(na+nb+1+nc,1); %非常小的正数(这里不能为0)
P=10^6*eye(na+nb+1+nc);

主循环

for k=1:Ltime(k)=k;y(k)=-a(2:na+1)*yk+b*uk(d:d+nb)+c*[xi(k);xik]; %采集输出数据%递推增广最小二乘法phie=[-yk;uk(d:d+nb);xiek];K=P*phie/(1+phie'*P*phie);thetae(:,k)=thetae_1+K*(y(k)-phie'*thetae_1);P=(eye(na+nb+1+nc)-K*phie')*P;xie=y(k)-phie'*thetae(:,k); %白噪声的估计值%提取辨识参数ae=[1 thetae(1:na,k)']; be=thetae(na+1:na+nb+1,k)'; ce=[1 thetae(na+nb+2:na+nb+1+nc,k)'];if abs(be(2))>0.9be(2)=sign(ce(2))*0.9; %MVC算法要求B稳定endif abs(ce(2))>0.9ce(2)=sign(ce(2))*0.9;end[e,f,g]=sindiophantine(ae,be,ce,d); %求解单步Diophantine方程        u(k)=(-f(2:nf+1)*uk(1:nf)+ce*[yr(k+d:-1:k+d-min(d,nc));yrk(1:nc-d)]-g*[y(k);yk(1:na-1)])/f(1); %求控制量%更新数据thetae_1=thetae(:,k);for i=d+nb:-1:2uk(i)=uk(i-1);enduk(1)=u(k);for i=na:-1:2yk(i)=yk(i-1);endyk(1)=y(k);for i=nc:-1:2yrk(i)=yrk(i-1);xik(i)=xik(i-1);xiek(i)=xiek(i-1);endif nc>0yrk(1)=yr(k);xik(1)=xi(k);xiek(1)=xie;end
end

绘图:

figure(1);
subplot(2,1,1);
plot(time,yr(1:L),'r:',time,y);
xlabel('k'); ylabel('y_r(k)、y(k)');
legend('y_r(k)','y(k)'); axis([0 L -20 20]);
subplot(2,1,2);
plot(time,u);
xlabel('k'); ylabel('u(k)'); axis([0 L -40 40]);
figure(2)
subplot(211)
plot([1:L],thetae(1:na,:));
xlabel('k'); ylabel('参数估计a');
legend('a_1','a_2'); axis([0 L -3 2]);
subplot(212)
plot([1:L],thetae(na+1:na+nb+1+nc,:));
xlabel('k'); ylabel('参数估计b、c');
legend('b_0','b_1','c_1'); axis([0 L 0 1.5]);

辅助函数:

单步Diophanine方程的求解!!!!这居然是个常用的自定义函数

function [d,f,e]=sindiophantine(a,b,c,k)
%*********************************************************%功能:单步Diophanine方程的求解%调用格式:[d,f,e]=sindiophantine(a,b,c,t)%输入参数:多项式A、B、C系数(行向量)及纯滞后(共4个)%输出参数:Diophanine方程的解d,f,e(共3个)% C = AD + zdE% F = BD
%*********************************************************
na=length(a)-1; nb=length(b)-1; nc=length(c)-1; %A、B、C的阶次
nd=k-1; ne=na-1; %D、E的阶次
ad=[a,zeros(1,ne+nd+1-na)]; cd=[c,zeros(1,ne+nd+1-nc)]; %ad、cd长度均设为ne+nd+2%短除法求解D(Z),E(Z)
for i=1:nd+1d(i)=0;for j=1:id(i)=d(i)+d(i+1-j)*ad(j);endd(i)=cd(i)-d(i); %计算ei
endfor i=1:ne+1e(i)=0;for j=1:nd+1e(i)=e(i)+d(nd+2-j)*ad(i+j);ende(i)=cd(i+nd+1)-e(i); %计算gi
end%得到F(Z)
f=conv(b,d); %计算F
end

直接和间接控制反映在代码上的区别:

参数设置:

间接控制(需要进行参数设置):

% 递推增广最小二乘法
phie = [-yk; uk(d:d+length(b)); xiek];
K = P * phie / (1 + phie' * P * phie);
thetae(:, k) = thetae_1 + K * (y(k) - phie' * thetae_1);
P = (eye(length(a)+length(b)+1+length(c)) - K * phie') * P;% 提取辨识参数
ae = [1 thetae(1:length(a), k)'];
be = thetae(length(a)+1:length(a)+length(b)+1, k)';
ce = [1 thetae(length(a)+length(b)+2:end, k)'];

直接控制(没有参数估计过程,直接使用已知的系统参数)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# NX二次开发:矩形阵列和线性阵列等多种方法讲解

大家好,今天讲一些关于阵列相关的UFUN函数。 UF_MODL_create_linear_iset (view source):这个函数为创建矩形阵列。 intmethodInputMethod: 0 General 1 Simple 2 Identicalchar *number_in_xInputNumber in XC direction.char *distance_xInputSpac…

嵌入式硬件: GPIO与二极管基础知识详解

1. 前言 在嵌入式系统和硬件开发中,GPIO(通用输入输出)是至关重要的控制方式,而二极管作为基础电子元件,广泛应用于信号整流、保护电路等。本文将从基础原理出发,深入解析GPIO的输入输出模式,包…

CTF--Web安全--SQL注入之报错注入

CTF–Web安全–SQL注入之报错注入 一、报错注入的概念 用户使用数据库查询语句,向数据库发送错误指令,数据库返回报错信息,报错信息中参杂着我们想要获取的隐私数据。通常在我们在页面显示中找不到回显位的时候,使用报错注入。 二…

matlab 模糊pid实现温度控制

1、内容简介 matlab162-模糊pid实现温度控制 可以交流、咨询、答疑 2、内容说明 略基于PID电加热炉温度控制系统设计 摘要 电加热炉随着科学技术的发展和工业生产水平的提高,已经在冶金、化工、 机械等各类工业控制中得到了广泛应用,并且在国民经济中占…

RabbitMq C++客户端的使用

1.RabbitMq介绍 RabbitMQ 是一款开源的消息队列中间件,基于 AMQP(高级消息队列协议)实现,支持多种编程语言和平台。以下是其核心特点和介绍: 核心特点 多语言支持 提供 Java、Python、C#、Go、JavaScript 等语言的客…

星越L_备胎更换/千斤顶使用讲解

目录 1.车辆停靠在坚实平坦的路面上。 2.打开危险警示灯、 3.设立三角指示牌 4.取出备胎及随车工具 5.使用螺栓扳手对每个螺母进行松动 6使用千斤顶抬升 7、其他 轮胎漏气或爆胎的情况,需要使用千斤顶更换备胎 1.车辆停靠在坚实平坦的路面上。 2.打开危险警示灯、

【Python 数据结构 15.哈希表】

目录 一、哈希表的基本概念 1.哈希表的概念 2.键值对的概念 3.哈希函数的概念 4.哈希冲突的概念 5.常用的哈希函数 Ⅰ、直接定址法 Ⅱ、平方取中法 Ⅲ、折叠法 Ⅳ、除留余数法 Ⅴ、位与法 6.哈希冲突的解决方案 Ⅰ、开放定址法 Ⅱ、链地址法 7.哈希表的初始化 8.哈希表的元素插…

软件测试之测试分类

1. 为什么要对软件测试进行分类 软件测试是软件⽣命周期中的⼀个重要环节,具有较⾼的复杂性,对于软件测试,可以从不同的⻆度 加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试 的分类⽅…

Devops CI/CD

Devops CI/CD DevOps 中的 CI/CD:持续集成与持续部署的深度解析一、CI/CD 基本概念(一)持续集成(二)持续部署 二、CI/CD 实施步骤(一)版本控制(二)自动化构建&#xff08…

leetcode105为什么可以root.left可以截取到前序遍历二叉树的(0,index),而不是(1,index+1)

这里以105前序和中序遍历构造二叉树为例,106同理 原因在于preoder.shift()会改变原数组,已经把preoder的第一个队头元素已经排除出去了!!! 306题中的截取后续遍历中用pop()同理

数据结构---堆栈和列

一、堆栈 1.栈堆:具有一定操作约束的线性表;(只在一端做插入删除) 2.栈的顺序存储结构: 由一个一维数组和一个记录栈顶元素位置的变量组成。定义方式如下: 3.入栈操作: 注意:&…

golang快速上手基础语法

变量 第一种,指定变量类型,声明后若不赋值,使用默认值0 package mainimport "fmt"func main() {var a int //第一种,指定变量类型,声明后若不赋值,使用默认值0。fmt.Printf(" a %d\n"…

【idea代码ai插件】利用接入硅基流动的deepseekR1的api在idea里实现问答,辅助写代码

注册硅基流动账号 https://siliconflow.cn/zh-cn/ 然后新建api密钥,这里的api密钥可以点击复制,等会输入要用 可以看到现在新注册是有额度的,你们应该是14元 模型广场这里可以调用deepseek的v3和r1,注意因为是蹭,赠…

NO.42十六届蓝桥杯备战|数据结构|算法|时间复杂度|空间复杂度|STL(C++)

数据结构 什么是数据结构 在计算机科学中,数据结构是⼀种数据组织、管理和存储的格式。它是相互之间存在⼀种或多种特定关系的数据元素的集合。 说点通俗易懂的话,数据结构就是数据的组织形式,研究的就是把数据按照何种形式存储在计算机中 …

【CSS3】化神篇

目录 平面转换平移旋转改变旋转原点多重转换缩放倾斜 渐变线性渐变径向渐变 空间转换平移视距旋转立体呈现缩放 动画使现步骤animation 复合属性animation 属性拆分逐帧动画多组动画 平面转换 作用:为元素添加动态效果,一般与过渡配合使用 概念&#x…

Keepalived高可用架构实战:从安装配置到高级应用详解

一.架构 用户空间核心组件: vrrp stack:VIP 消息通信checkers:监测 Real Serversystem call:实现 vrrp 协议状态转换时调用相关本地功能SMTP:邮件组件IPVS wrapper:生成 IPVS 规则Netlink Reflector&…

Linux:利用System V系列的-共享内存,消息队列实现进程间通信

对于管道的进程间通信方式,需要频繁的调用系统调用(read,write)。而我们今天首先要介绍的共享内存,在开辟好空间之后,便可以跳过系统调用,直接进行读写操作。 一.System V共享内存(主要) 共享内存区是最快的IPC形式。一旦这样的内…

不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析

题目A:日期统计 思路分析: 本题的题目比较繁琐,我们采用暴力加DFS剪枝的方式去做,我们在DFS中按照8位日期的每一个位的要求进行初步剪枝找出所有的八位子串,但是还是会存在19月的情况,为此还需要在CHECK函数…

宇树人形机器人开源模型

1. 下载源码 https://github.com/unitreerobotics/unitree_ros.git2. 启动Gazebo roslaunch h1_description gazebo.launch3. 仿真效果 H1 GO2 B2 Laikago Z1 4. VMware: vmw_ioctl_command error Invalid argument 这个错误通常出现在虚拟机环境中运行需要OpenGL支持的应用…

【C/C++算法】从浅到深学习--- 前缀和算法(图文兼备 + 源码详解)

绪论:冲击蓝桥杯一起加油!! 每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章将使用八道题由浅到深的带你了解并基本掌握前缀和思想,以及前缀和的基…