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

例题来源:侯忠生教授的《无模型自适应控制:理论与应用》(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估计

在这里插入图片描述

跟踪误差

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux命令集(Linux常用命令--cat指令篇)

Linux命令集&#xff08;Linux常用命令--cat指令篇&#xff09; Linux常用命令集&#xff08;cat指令篇&#xff09;4.cat(concatenate)1. 查看文件内容&#xff1a;2. 连接多个文件&#xff1a;3. 创建文件并通过终端写入内容4. 输出内容编号 Linux常用命令集&#xff08;cat指…

【英语】大学英语CET考试,写作部分(论述文+应用文,6篇范文)

文章目录 3项评分标准&#xff08;内容&结构&#xff0c;语言&#xff09;0.1 论述文个人小结 1、论述文&#xff1a;审题与功能句2、论述文&#xff1a;修饰内容和名言模板3、论述文&#xff1a;现象作文&利弊分析4、论述文&#xff1a;给出权威论据和有侧重的现象5、…

在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件)

由于部署的硬件是华为昇腾 NPU&#xff08;Ascend310&#xff09;&#xff0c;参考网址https://www.paddlepaddle.org.cn/lite/v2.10/demo_guides/huawei_ascend_npu.html#npu-paddle-lite 先拉取paddlelite用来编译库 git clone https://github.com/PaddlePaddle/Paddle-Lit…

反转字符串——leetcode344、leetcode541

文章目录 简单反转字符串题目详情分析Java完整代码 反转链表进阶问题题目详情分析Java完整代码 简单反转字符串 题目详情 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须…

RMAN-03009、ORA-19566数据文件坏块报错处理方法

在备份数据库的时候&#xff0c;出现RMAN-03009、ORA-19566报错&#xff1a; RMAN-03009: backup 命令 (c3 通道上, 在 04/29/2023 10:58:11 上) 失败 ORA-19566: 超出损坏块限制 0 (文件 E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR2.DBF) 继续执行其他作业步骤, 将不重新运行…

Github创建一个新仓库,关联本地数据并上传文件的图文步骤

工作中&#xff0c;我们经常会使用github来承享别人的代码果实&#xff0c;同时我们也会把自己的成果分享给别人&#xff0c;互相帮助。 今天的这篇图文教程非常重要&#xff0c;目标是使用Github来创建一个远程仓库&#xff0c;并和本地仓库对接&#xff0c;同时要做上传新内容…

区域医疗云his系统源码,具有可扩展、易共享、易协同的优势

云HIS系统采用SaaS软件应用服务模式&#xff0c;提供软件应用服务多租户机制&#xff0c;实现一中心部署多机构使用。相对传统HIS单机构应用模式&#xff0c;它可灵活应对区域医疗、医疗集团、医联体、连锁诊所、单体医院等应用场景&#xff0c;并提升区域内应用的标准化与规范…

python处理图像的各种技术镜像、旋转、遮挡、叠加、条带化

2.6 图像镜面对称 1、将图像水平镜面转换。 2、将图像垂直镜面转换。 import random #导入模块 import numpy as np import matplotlib.pyplot as plt a plt.imread("1.jpg") # 将图像沿着水平方向重复三次。 ba.copy() da.copy() # 将图像水平镜面转换。&…

LeCun、田渊栋参与撰写,70页「自监督学习」大全

来源 | 机器之心 微信号&#xff1a;almosthuman2014 「关于自监督学习&#xff0c;你想知道但又不敢问的一切都在这里了。」图灵奖得主、Meta 人工智能首席科学家 Yann LeCun 刚刚发了这样一则推文。 在推文中&#xff0c;LeCun 介绍了他和 Meta 人工智能研究院研究员、研究经…

javaEE初阶 — 服务器版本的表白墙案例

文章目录 原来版本涉及的问题设计程序1 点击提交2 页面加载 实现后端代码1 新建一个 Maven 项目。2 按照之前第一个 Servlet 程序的步骤来进行设置3 新建一个 MessageServlet 类 实现前端代码1 点击提交的时给服务器发送一个 POST 请求2 在页面加载时发送一个 GET 请求3 将数据…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 赛后总结之31页论文及代码

相关信息 &#xff08;1&#xff09;建模思路 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建…

2.3 定点乘法运算

学习目标&#xff1a; 如果我要学习定点乘法运算&#xff0c;我会按照以下步骤进行学习&#xff1a; 确定学习目标&#xff1a;明确学习定点乘法运算的目的和重点&#xff0c;以便有针对性地进行学习。 掌握基础知识&#xff1a;首先需要了解定点数和定点乘法的基础知识&…

PySide2 QWebEngine与Web js交互

文章目录 单向交互双向传值案例 单向交互 QWebEngineView加载web页面&#xff0c;web页面中点击按钮&#xff0c;执行js代码&#xff0c;js的返回值传给QWebEnginePage&#xff0c;使用python进行保存结果。 单向&#xff0c;js向python(PySide2)端传输数据。 前端实现 <…

力扣刷题day35|416分割等和子集

416. 分割等和子集 力扣题目链接 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割…

智能网联汽车城市化的进程和思考

4月19日&#xff0c;工信部官网显示&#xff0c;支持湖北&#xff08;襄阳&#xff09;、浙江&#xff08;德清&#xff09;、广西&#xff08;柳州&#xff09;创建国家级车联网先导区。至此&#xff0c;车联网国家级先导区正式扩容&#xff0c;由4个增至7个。智能网联作为新生…

网络字节序和主机字节序详解(附代码)

一、网络字节序和主机字节序 网络字节序和主机字节序是计算机网络中常用的两种数据存储格式。 主机字节序&#xff1a; 指的是在计算机内部存储数据时采用的字节排序方式。对于一个长为4个字节的整数&#xff0c;若采用大端字节序&#xff0c;则该整数在内存中的存储顺序是&a…

前端面试题(持续更新中)

【1】null和undefined的区别 同&#xff1a; 1.都是js的基本类型&#xff0c;保存在栈中&#xff0c;表示“无、没有”的意思。 2.if语句中的null和undefined都是false。 var a undefined var b null if (!a) {console.log(undefined is false); } if (!b) {console.log(null…

手动搭建高可用的 kubernetes 集群(v1.16.6)

手动搭建高可用的 kubernetes 集群(v1.16.6) 目录 手动搭建高可用的 kubernetes 集群(v1.16.6) 1、组件版本和配置策略 1.1 主要组件版本1.2 主要配置策略2、初始化系统和全局变量 2.1 集群规划2.2 初始化系统环境 2.2.1 关闭防火墙2.2.2 关闭 swap 分区2.2.3 关闭 SELinux2.2.…

【MySQL自学之路】第5天——对数据表数据的增删改查1

目录 前言 使用的数据库 数据表 ​编辑 表结构 插入数据&#xff08;insert into&#xff09; 插入一条数据 插入多条数据 修改数据&#xff08;update set&#xff09; 修改一条数据的值 ​编辑 修改多条数据的值 删除数据&#xff08;delete from&#xff09;…

【云原生】Epinio--Kubernetes 的应用程序开发引擎

Kubernetes 已成为容器编排的事实标准&#xff0c;改变了我们的开发流程。十年前&#xff0c;我们只需要将代码打包成 war/jar 包&#xff0c;然后启动应用即可。然而&#xff0c;现在面向 Kubernetes 的开发&#xff0c;交付的产物有可能是 Helm Chart、Workload Yaml、Docker…