【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)

news2024/12/29 10:29:10

例题来源:侯忠生教授的《无模型自适应控制:理论与应用》(2013年科学出版社)。

👉对应书本 4.4 单输入单输出系统(SISO)全格式动态线性化(FFDL)的无模型自适应控制(MFAC)

上两篇博客分别介绍了基于紧格式和偏格式动态线性化的无模型自适应控制:
【MFAC】基于紧格式动态线性化的无模型自适应控制(Matlab代码)

【MFAC】基于偏格式动态线性化的无模型自适应控制(Matlab代码)

全格式动态线性化(FFDL)的PPD相对偏格式动态线性化(PFDL)控制变量增多,能够更好地模拟系统的复杂动态。

例题4.7

1.题目要求

在这里插入图片描述

在CFDL中,线性化长度常数 L=1,步长因子仅有1个( ρ \rho ρ),伪偏导数(PPD) ϕ c \phi_c ϕc 是一个数;在PFDL中,PPD ϕ p , L \phi_{p,L} ϕp,L 是一个 L 维的向量,步长因子增多( ρ 1 , ρ 2 , . . . , ρ L y \rho_1,\rho_2,...,\rho_{L_y} ρ1,ρ2,...,ρLy);而在FFDL中,PPD ϕ f , L y , L u \phi_{f,L_y,L_u} ϕf,Ly,Lu 是一个 L y + L u L_y+L_u Ly+Lu 维的向量,步长因子更多( ρ 1 , ρ 2 , . . . , ρ L y + L u \rho_1,\rho_2,...,\rho_{L_y+L_u} ρ1,ρ2,...,ρLy+Lu)。

在这里插入图片描述

2.matlab代码

clear all; clc;

%% 控制器参数
Lu=2; % 输入阶数
Ly=1; % 输出阶数
eta=0.2; % 伪偏导步长
miu=1; % 伪偏导权重
rho=0.7; % 控制律步长 rho1=rho2=rho3=0.7
lamda=7; % 控制律权重
epsilon=1e-5; % 伪偏导重置阈值
N=700; %采样点

%% 初值
y(1:3)=0; y(4)=1; y(5)=0.2; y(6)=0;
u(1:6)=0; u(5)=0.5;
for i=1:Ly
    dy(5,i)=y(5-i+1)-y(5-i);
end
for i=1:Lu
    du(5,i)=u(5-i+1)-u(5-i);
end

%% 期望值
for k=1:N+1
    if k<=490
        yd(k)=0.4*(-1)^round(k/50);
    else
        yd(k)=0.1+0.1*(-1)^round(k/50);
    end
end
figure(1)
plot(yd,'k');
hold on;

%% 控制器伪偏导数初值
% phi_{f,L_y,L_u}(k) = [phi_1(k), phi_2(k),...,phi_{L_y}(k),phi_{L_y+1}(k),...,,phi_{L_y+L_u}(k)]^T
% phi(k,i):第1个参数是k(1~N),第2个参数是i(1~L_y+L_u),先是1~L_y,再到L_y+1~L_u
phi(1,:)=[-2 0.5 0.2];
phi(2,:)=phi(1,:); phi(3,:)=phi(1,:); phi(4,:)=phi(1,:); phi(5,:)=phi(1,:);

for k=6:N
    %% 伪偏导更新
    % Delta{H_{L_y,L_u}} = [Delta{y(k)}, Delta{y(k-1)},...,Delta{y(k-(L_y-1))},Delta{u(k)}, Delta{u(k-1)},...,Delta{u(k-(L_u-1))}]^T
    % [dy(k-1,1:Ly) du(k-1,1:Lu)]:前面是y,后面是u
    % du(k,i):第1个参数是k(1~N),第2个参数是i(1~L_u)
    % dy(k,i):第1个参数是k(1~N),第2个参数是i(1~L_y)
    if Ly<=0
        phi(k,:)=phi(k-1,:)+eta*(y(k)-y(k-1)-phi(k-1,:)*[du(k-1,1:Lu)]')*du(k-1,1:Lu)/(miu+[du(k-1,1:Lu)]*du(k-1,1:Lu)');
    else
        phi(k,:)=phi(k-1,:)+eta*(y(k)-y(k-1)-phi(k-1,:)*[dy(k-1,1:Ly) du(k-1,1:Lu)]')*[dy(k-1,1:Ly) du(k-1,1:Lu)]/(miu+[dy(k-1,1:Ly) du(k-1,1:Lu)]*[dy(k-1,1:Ly) du(k-1,1:Lu)]');
    end
    % 伪偏导重置
    if abs(phi(k,1+Ly))<=epsilon | abs(dy(k-1,1:Ly))<= epsilon | sign(phi(k,1+Ly))~=sign(phi(1,1+Ly))
        phi(k,1+Ly)=phi(1, 1+Ly);
    end
    phi(6,:)=phi(5,:);
    
    %% 控制律更新
    for i=1:Ly
        dy(k,i)=y(k-i+1)-y(k-i);
    end
    
    if Ly<=0
        u(k) = u(k-1)+rho*phi(k,1+Ly)*(yd(k+1)-y(k)-phi(k,Ly+2:Ly+Lu)*du(k-1,2:Lu)')/(lamda+phi(k,1+Ly).^2);       
    else
        u(k) = u(k-1)+rho*phi(k,1+Ly)*(yd(k+1)-y(k)-phi(k,1:Ly)*dy(k,:)'-phi(k,Ly+2:Ly+Lu)*du(k-1,1:Lu-1)')/(lamda+phi(k,1+Ly).^2); 
    end
    
    for i=1:Lu
        du(k,i)=u(k-i+1)-u(k-i);
    end
    
    %% 系统函数
    y(k+1)=(-0.9*y(k)+(4*round(k/100)+sin(k/100)+1)*u(k))/(1+y(k)^2);
    error(k+1)=yd(k+1)-y(k+1);
end

%% 画图
figure(1)
plot(y,'--r');
xlim([0 700]); ylim([-1 1]);
xlabel('time'); ylabel('tracking performance');
legend('y*(k)', 'FFDL-MFAC');
title('FFDL-MFAC tracking performance');

figure(2)
plot(u,'b');
xlabel('time'); ylabel('input');
title('FFDL-MFAC input');

figure(3)
plot(phi(:,1),'b--');hold on;
plot(phi(:,2),'r--');hold on;
plot(phi(:,3),'g--');
xlabel('time'); ylabel('PPD');
legend('\phi_1(k)','\phi_2(k)','\phi_3(k)');
title('FFDL-MFAC \phi_{p,L}(k)');

figure(4)
plot(error);
xlabel('time'); ylabel('tracking error');
title('FFDL-MFAC tracking error')

3.运行结果

跟踪性能

在这里插入图片描述

控制输入

在这里插入图片描述

PPD估计

在这里插入图片描述

跟踪误差

在这里插入图片描述

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

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

相关文章

软件分享--安卓纯文本记事本软件,支持多记事本与密码

文章目录 软件名字&#xff1a;LS记事本支持多记事本安全性&#xff1a;备份和恢复&#xff1a;搜索功能&#xff1a;显示功能&#xff1a;字体调节&#xff1a;轻量绿色下载地址 软件名字&#xff1a;LS记事本 支持多记事本 安全性&#xff1a; 1.每个记事本支持设置访问密码…

【Elasticsearch】几点核心概念

文章目录 核心概念系统架构分布式集群单节点集群故障转移水平扩容应对故障 路由计算(确定哪个主分片)分片控制&#xff08;确定哪个节点&#xff09;创建个集群如何查看数据呢&#xff1f;写流程读流程更新流程 分片原理倒序索引文档搜索动态更新索引持久化变更 文档分析内置分…

“Lunar Lobster “现已经可以下载

Canonical近日发布了Ubuntu 23.04&#xff08;Lunar Lobster&#xff09;操作系统&#xff0c;这是对其流行的GNU/Linux发行版的一次重大更新&#xff0c;带来了一些最新和最伟大的技术和开源软件。 被称为 “Lunar Lobster”&#xff0c;Ubuntu 23.04由最新的Linux 6.2内核系列…

【计算机网络】学习笔记:第五章 传输层【王道考研】

基于本人观看学习b站王道计算机网络课程所做的笔记&#xff0c;不做任何获利 仅进行交流分享 特此鸣谢王道考研 若有侵权请联系&#xff0c;立删 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0c;如有疑问欢迎…

【数据结构与算法】哈希—— 位图 | 布隆过滤器 | 哈希切割

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《数据结构与算法》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 哈希是一种映射思想&#xff0c;这里再讲解两种应用哈希思想的数据结构。 哈希—— 位图 | …

边学边记——数据结构☞堆(包括优先级队列的介绍)

目录 一、堆&#xff08;二叉堆&#xff09; 堆是用来干什么的&#xff1f; 堆是用什么存储结构存储的&#xff1f; 1. 堆的概念 2. 堆的性质 3. 堆的存储方式 下标之间的规则&#xff1a; 4. 堆的基本操作 (1). 向下调整/堆化操作 (2).堆的创建 (3).堆的插入 (4…

2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。

2023-04-30&#xff1a;用go语言重写ffmpeg的resampling_audio.c示例&#xff0c;它实现了音频重采样的功能。 答案2023-04-30&#xff1a; resampling_audio.c 是 FFmpeg 中的一个源文件&#xff0c;其主要功能是实现音频重采样。 音频重采样是指将一段音频数据从一个采样率…

duubo+zookeeper

1、Dubbo简介 1. Dubbo是什么&#xff1f; 高性能、轻量级、开源、基于java Dubbo 是阿里集团开源的远程服务调用的分布式框架&#xff08;告别Web Service模式中的WSDL&#xff0c;以服务者与消费者的方式在dubbo上注册&#xff09; 协议和序列化框架都可以插拔是及其鲜明…

【办公类-22-04】周计划系列(4)-生成“周计划”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

代码相当复杂&#xff0c;操作很繁琐&#xff0c;自己都要研究半天T_T 文件夹展示 01提取提取新表的已有内容&#xff08;提取大8班、大7班的新版本里面的额内容&#xff09; &#xff08;需要里面的一些反思&#xff0c;用来占位&#xff09; 这里有一份根据新模板用Python批…

spring2:创建和使用

目录 1.创建Spring项目 1.1创建Maven类 1.2添加Spring支持框架 1.3添加启动类 2.存储Bean对象 2.0 spring项目中添加配置文件(第一次) 2.1创建Bean 2.2把Bean注册到容器中 3.获取并使用Bean对象 3.1创建上下文 3.2获取指定Bean对象 getBean()方法 --> 获取什么…

双周赛103(模拟、网格图BFS、树状数组)

文章目录 双周赛103[6406. K 个元素的最大和](https://leetcode.cn/problems/maximum-sum-with-exactly-k-elements/)模拟 [6405. 找到两个数组的前缀公共数组](https://leetcode.cn/problems/find-the-prefix-common-array-of-two-arrays/)模拟 [6403. 网格图中鱼的最大数目](…

Java 基础进阶篇(一)——— static 静态关键字与单例模式

文章目录 一、static 静态关键字1.1 静态成员变量与实例成员变量1.2 静态成员方法与实例成员方法1.3 static 访问注意事项1.4 内存使用情况 二、工具类三、代码块四、单例模式4.1 饿汉单例4.2 懒汉单例 一、static 静态关键字 static&#xff1a;代表静态的意思&#xff0c;可…

【博学谷学习记录】超强总结,用心分享丨人工智能 AI项目 collate_fn函数理解与记录

目录 Dataloader取数据过程使用报错&#xff1a;默认collate_fn处理不同长度的数据自定义collate_fn伪代码示例 Dataloader取数据过程 取出大小等同于batch size的index列表;将列表列表中的index输入到dataset的getitem()函数中&#xff0c;取出该index对应的数据;对每个index…

一种基于坑位模版的分页方案

一. 概述 1.1 业务诉求 想象一个向用户展示数据的下拉列表&#xff0c;数据的来源有多种方式。支持在每一页都按固定的数据源类型及顺序展示。 1.2 业务场景 up主的主页展示带货商品列表 商品来源有多种&#xff1a;up主自选、官方推荐的、根据up主风格AI推荐用户推荐视频列表…

【编辑刷新数据-汽车品牌展示 Objective-C语言】

一、我们这个利用可重用cell展示汽车品牌案例,就说完了,然后我们再给大家说一个什么东西,就是这个刷新数据这个东西, 1.刷新数据这个东西,我们用的就是代理,再把代理相当于是再给大家复习一下,再把代理复习一下,顺便再说一下怎么刷新数据, 2.接下来,要实现一个什么功…

基于UDQ的并网单相逆变器控制【同步参考系下单相并网全桥正弦PWM逆变器闭环控制】(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

day9 实现UDP通信

目录 socket函数拓展 UDP通信实现过程 代码实现 socket函数拓展 send与recv函数&#xff1a; /*用于发送数据*/ ssize_t send(int sockfd, const void *buf, size_t len,int flags);/*用于接收数据*/ ssize_t recv(int sockfd, void *buf, size_t len,int flags);/*前三个…

无敌0代码ESP8266接入homeassistant的新方法,完美解决新版homeassistant无法自定义MQTT设备的问题

记得之前想要在homeassistant中添加MQTT设备只要在配置文件 configuration.yaml 中配置如下代码即可 但是现在这种方法已经行不通&#xff0c;设备也步显示出来&#xff0c;这给很多homeassistant的忠实粉丝带来巨大不便&#xff0c;作为粉丝的一份子&#xff0c;我绝步允许这种…

Python进阶篇(四)-- ICMP Ping服务程序框架

Ping是一个网络应用程序&#xff0c;用于测试某个主机在IP网络中是否可访问。它也用于测试计算机的网卡或测试网络延迟。Ping的实现通常使用ICMP协议。ICMP协议在协议族中的地位如下图所示&#xff1a; 通过本文&#xff0c;你将更好地理解因特网控制报文协议&#xff08;ICMP&…

TCP协议的特性

目录 TCP协议的特性TCP的首部长度2.TCP如何实现可靠传输2.1 确认应答 2.2 超时重传3.建立连接3.1 三次握手3.2 四次挥手 4.滑动窗口5.流量控制6.拥塞控制7.延时应答8.捎带应答9.面向字节流10.异常情况1.进程关闭 /进程崩溃2.主机关机(正常流程关机)3.主机掉电 TCP协议的特性 TC…