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

news2024/10/5 20:20:17

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

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

上一篇博客介绍了基于紧格式动态线性化的无模型自适应控制。
【Matlab】基于紧格式动态线性化的无模型自适应控制
紧格式动态线性化(CFDL)与偏格式动态线性化(PFDL)的格式类似,但偏格式动态线性化(PFDL)多了一个控制变量,线性化长度由1变成L.

例题4.4

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)。

在这里插入图片描述

2.matlab代码

clear all; clc;

%% 控制器参数
L=3; % 输入阶数
eta=0.5; % 伪偏导步长
miu=1; % 伪偏导权重
rho=0.5; % 控制律步长 rho1=rho2=rho3=0.5
lamda=0.01; % 控制律权重
epsilon=1e-5; % 伪偏导重置阈值
N=400; %采样时间

%% 初值
y(1:6)=0; y(4)=1;
u(1:5)=0;
du(1:5,1:L)=0;

%% 期望值
for k=1:N+1
    yd(k)=5*(-1)^round(k/80);
end
figure(1)
plot(yd,'k');
hold on;

%% 控制器伪偏导数初值
% phi_{p,L}(k) = [phi_1(k), phi_2(k),...,phi_L(k)]^T
% phi(k,i):第1个参数是k(1~N),第2个参数是i(1~L)
phi(1:5,1)=1;
phi(1:5,2:L)=0;

for k=6:N
    %% 伪偏导更新
    % Delta{U_L(k)} = [Delta{u(k)}, Delta{u(k-1)},...,Delta{u(k-(L-1))}]^T
    % du(k,i):第1个参数是k(1~N),第2个参数是i(1~L)
    phi(k,1:L)=phi(k-1,1:L)+eta*(y(k)-y(k-1)-phi(k-1,1:L)*du(k-1,1:L)')*du(k-1,1:L)/(miu+du(k-1,1:L)*du(k-1,1:L)');
    % 伪偏导重置
    if abs(phi(k,1))<=epsilon | abs(du(k-1, 1:L))<= epsilon | sign(phi(k,1))~=sign(phi(1,1))
        phi(k,1)=0.5;
    end
    
    %% 控制律更新
    if L==1
        u(k) = u(k-1)+rho*phi(k,1)*(yd(k+1)-y(k))/(lamda+phi(k,1).^2);       
    else
        u(k) = u(k-1)+rho*phi(k,1)*(yd(k+1)-y(k)-phi(k,2:L)*du(k-1,1:L-1)')/(lamda+phi(k,1).^2); 
    end
    
    %% 系统函数
    if k<=200
        y(k+1)=2.5*y(k)*y(k-1)/(1+y(k).^2+y(k-1).^2)+0.7*sin(0.5*(y(k)+y(k-1)))+1.4*u(k-1)+1.2*u(k);
    else
        y(k+1)=-0.1*y(k)-0.2*y(k-1)-0.3*y(k-2)+0.1*u(k)+0.02*u(k-1)+0.03*u(k-2);    
    end
    
    for i=1:L
        du(k,i)=u(k-i+1)-u(k-i);
    end
    error(k+1)=yd(k+1)-y(k+1);
end

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

figure(2)
plot(u,'b');
ylim([-60 60]);
xlabel('time'); ylabel('input');
title('PFDL-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('PFDL-MFAC \phi_{p,L}(k)');

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

3.运行结果

跟踪性能

跟踪性能

控制输入

控制输入

PPD估计

在这里插入图片描述

跟踪误差

在这里插入图片描述

例题4.5

1.题目要求

在这里插入图片描述

取 a(k)=1

2.matlab代码

clear all; clc;

%% 控制器参数
L=3; % 输入阶数
eta=0.5; % 伪偏导步长
miu=1; % 伪偏导权重
rho=0.5; % 控制律步长 rho1=rho2=rho3=0.5
lamda=0.01; % 控制律权重
epsilon=1e-5; % 伪偏导重置阈值
N=800; %采样时间

%% 初值
y(1:6)=0; y(4)=1;
u(1:5)=0;
du(1:5,1:L)=0;

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

%% 控制器伪偏导数初值
% phi_{p,L}(k) = [phi_1(k), phi_2(k),...,phi_L(k)]^T
% phi(k,i):第1个参数是k(1~N),第2个参数是i(1~L)
phi(1:5,1)=1;
phi(1:5,2:L)=0;

for k=6:N
    %% 伪偏导更新
    % Delta{U_L(k)} = [Delta{u(k)}, Delta{u(k-1)},...,Delta{u(k-(L-1))}]^T
    % du(k,i):第1个参数是k(1~N),第2个参数是i(1~L)
    phi(k,1:L)=phi(k-1,1:L)+eta*(y(k)-y(k-1)-phi(k-1,1:L)*du(k-1,1:L)')*du(k-1,1:L)/(miu+du(k-1,1:L)*du(k-1,1:L)');
    % 伪偏导重置
    if abs(phi(k,1))<=epsilon | abs(du(k-1, 1:L))<= epsilon | sign(phi(k,1))~=sign(phi(1,1))
        phi(k,1)=0.5;
    end
    
    %% 控制律更新
    if L==1
        u(k) = u(k-1)+rho*phi(k,1)*(yd(k+1)-y(k))/(lamda+phi(k,1).^2);       
    else
        u(k) = u(k-1)+rho*phi(k,1)*(yd(k+1)-y(k)-phi(k,2:L)*du(k-1,1:L-1)')/(lamda+phi(k,1).^2); 
    end
    
    %% 系统函数
    y(k+1)=(y(k)*y(k-1)*y(k-2)*u(k-1)*(y(k)-1)+(1+1)*u(k)) / (1+y(k)^2+y(k-1)^2+y(k-2)^2);
    
    for i=1:L
        du(k,i)=u(k-i+1)-u(k-i);
    end
    error(k+1)=yd(k+1)-y(k+1);
end

%% 画图
plot(y,'--r');
xlim([0 800]); 
xlabel('time'); ylabel('tracking performance');
legend('y*(k)', 'PFDL-MFAC');
title('PFDL-MFAC tracking performance');

3.运行结果

在这里插入图片描述

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

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

相关文章

C++每日一练:打家劫室(详解动态规划法)

文章目录 前言一、题目二、分析三、代码总结 前言 这题目出得很有意思哈&#xff0c;打劫也是很有技术含量滴&#xff01;不会点算法打劫这么粗暴的工作都干不好。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 题目名称&#xff1a; 打家…

实现Newton方法的最小化函数(pytorch)

首先&#xff0c;我们要明确需求 def newton(theta, f, tol 1e-8, fscale1.0, maxit 100, max_half 20) ● theta是优化参数的初始值的一个向量。 ● f是要最小化的目标函数。该函数应将PyTorch张量作为输入&#xff0c;并返回一个张量。 ● tol是收敛容忍度。 ● fscale 粗…

【Leetcode -328.奇偶链表 - 725.分隔链表】

Leetcode Leetcode -328.奇偶链表Leetcode - 725.分隔链表 Leetcode -328.奇偶链表 题目&#xff1a;给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &am…

苏州百特电器有限公司网站设计

苏州百特电器有限公司网站设计 五一假期作业企业门户网站布局设计 基于 <div> 的企业门户网站设计 by 小喾苦 我这里仅仅是使用 html css 来实现这个网站的效果&#xff0c;并不是宣传这个网站(现在这个网站已经过时并且无法进入) 实现效果 https://xkk1.github.io/…

出差在外,远程访问企业局域网象过河ERP系统「内网穿透」

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 转载自远程穿透文章&#xff1a;公网远程访问公司内网象过河ERP系统「内网穿透」 概述 ERP系统对于企业来说重要性不言而喻&am…

初识中央处理器CPU

目录 一、CPU功能 1.控制器功能 2.运算器功能 3.功能执行顺序 4.其他功能 二、CPU结构图 1.CPU与系统总线 2.CPU内部结构 3.运算器中的寄存器组 4.控制器中的寄存器组 三、执行指令的过程 1.指令周期的基本概念 2.完整的指令周期流程 3.数据通路 4.指令周期的数据…

React超级简单易懂全面的有关问题回答(面试)

目录 React事件机制&#xff1a; 2、React的事件和普通的HTML有什么不同&#xff1a; - 事件命名的规则不同&#xff0c;原生事件采用全小写&#xff0c;react事件采用小驼峰 3、React组件中怎么做事件代理&#xff1f;他的原理是什么&#xff1f; 4、React高阶组件、Rend…

【SpringBoot】 整合RabbitMQ 保证消息可靠性传递

生产者端 目录结构 导入依赖 修改yml 业务逻辑 测试结果 生产者端 目录结构 导入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>&…

无人机集群路径规划:淘金优化算法(Gold rush optimizer,GRO)提供MATLAB代码

一、淘金优化算法GRO 淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;由Kamran Zolf于2023年提出&#xff0c;其灵感来自淘金热&#xff0c;模拟淘金者进行黄金勘探行为。 参考文献&#xff1a; K. Zolfi. Gold rush optimizer: A new population-ba…

Python小姿势 - #### Python技术博客:Python多线程编程

Python技术博客&#xff1a;Python多线程编程 你好&#xff0c;这里是自媒体技术博主Aurora&#xff0c;今天我想分享一下Python多线程编程。 首先&#xff0c;什么是多线程编程&#xff1f;多线程编程是一种让多个线程同时执行的编程方式&#xff0c;它可以让程序的执行更加高…

2023年华中杯C题计算结果

经过一晚上代码的编写&#xff0c;论文的写作&#xff0c;C题完整版论文已经发布&#xff0c; 注&#xff1a;蓝色字体为说明备注解释字体&#xff0c;不能出现在大家的论文里。黑色字体为论文部分&#xff0c;大家可以根据红色字体的注记进行摘抄。对应的详细的写作视频教程&…

推荐一款网站内链爬取python脚本

目标 使用 web-tools 提供的webSpider来爬取网站内链&#xff0c;并且将其导出。 webSpider介绍&#xff1a; 官网链接&#xff1a;https://web-tools.cn/web-spider 仓库地址&#xff1a;https://github.com/duerhong/web-spider Web Spider 专门用于爬取网站内链&#xf…

C++ srand()和rand()用法

参考C rand 与 srand 的用法 计算机的随机数都是由伪随机数&#xff0c;即是由小M多项式序列生成的&#xff0c;其中产生每个小序列都有一个初始值&#xff0c;即随机种子。&#xff08;注意&#xff1a; 小M多项式序列的周期是65535&#xff0c;即每次利用一个随机种子生成的随…

论文学习笔记:Transformer Attention Is All You Need

Transformer: Attention Is All You Need 2022 年年底&#xff0c;一个大语言模型 ChatGPT 横空出世&#xff0c;并且迅速点燃了普罗大众对 AI 的热情&#xff0c;短短两个月&#xff0c; ChatGPT 就成为了史上最快成为上亿月活的应用&#xff0c;并且持续受到关注&#xff0c…

【Vue2.0源码学习】变化侦测篇-Object的变化侦测

文章目录 1. 前言2. 使Object数据变得“可观测”3. 依赖收集3.1 什么是依赖收集3.2 何时收集依赖&#xff1f;何时通知依赖更新&#xff1f;3.3 把依赖收集到哪里 4. 依赖到底是谁5. 不足之处6. 总结 1. 前言 我们知道&#xff1a;数据驱动视图的关键点则在于我们如何知道数据发…

记录docker swarm的使用

在前面的几篇文章中我们依次学习了dockerfile、docker-compose的使用&#xff0c;接下来是docker有一个比较 重要的使用&#xff0c;docker swarm的使用&#xff0c;与dockerfile和docker-compose相比较而言&#xff0c;docker swarm是在 多个服务器或主机上创建容器集群服务准…

Leetcode——66. 加一

&#x1f4af;&#x1f4af;欢迎来到的热爱编程的小K的Leetcode的刷题专栏 文章目录 1、题目2、暴力模拟(自己的第一想法)3、官方题解 1、题目 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。最高位数字存放在数组的首位&#xff0c; 数组…

CTF-PHP反序列化漏洞2-典型题目

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

【纯属娱乐】随机森林预测双色球

目录 一、数据标准化二、预测代码三、后续 一、数据标准化 首先&#xff0c;我们需要对原始数据进行处理&#xff0c;将其转换为可用于机器学习的格式。我们可以将开奖号码中的红球和蓝球分开&#xff0c;将其转换为独热编码&#xff0c;然后将其与期数一起作为特征输入到机器…

ETL工具 - Kettle 查询、连接、统计、脚本算子介绍

一、 Kettle 上篇文章对 Kettle 流程、应用算子进行了介绍&#xff0c;本篇对查询、连接、统计、脚本算子进行讲解&#xff0c;下面是上篇文章的地址&#xff1a; ETL工具 - Kettle 流程、应用算子介绍 二、查询算子 数据输入使用 MySQL 表输入&#xff0c;表结构如下&#x…