【Matlab】基于紧格式动态线性化的无模型自适应控制

news2024/11/20 23:38:41

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

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

例题4.1

题目要求

在这里插入图片描述

matlab代码

clc; clear all;

%% 期望轨迹
for k = 1:1:1000
    if k<=300
        yd(k) = 0.5*(-1)^round(k/500);
    elseif 300<k & k<=700
        yd(k) = 0.5*sin(k*pi/100)+0.3*cos(k*pi/50);
    else
        yd(k) = 0.5*(-1)^round(k/500);
    end
end
 
plot(1:1000, yd,'r');
ylim([-1.5,1.5]);
hold on

%% MFAC参数设置
epsilon = 1e-5; % 伪偏导重置阈值
eta = 1; % 伪偏导增益
miu = 2; % 伪偏导步长
rho = 0.6; % 控制律增益
lambda = 2; % 控制律步长
u(1:2)=0;
y(1)=-1;
y(2)=1;
phi(1)=2;

for k = 2:1:999
    %% 伪偏导更新
    if k==2
        delta_u = 0;
    else
        delta_u = u(k-1) - u(k-2);
    end
    phi(k) = phi(k-1) + eta * delta_u * (y(k) - y(k-1)- phi(k-1) * delta_u)/(miu + delta_u^2);
    % 伪偏导重置
    if abs(phi(k))<=epsilon | delta_u<= epsilon | sign(phi(k))~=sign(phi(1))
        phi(k) = phi(1);
    end
    
    %% 控制律更新
    u(k) = u(k-1) + rho*phi(k)*(yd(k+1)-y(k)) / (lambda + phi(k)^2);
    
    %% 系统函数
    if k<=500
        y(k+1) = y(k)/(1+y(k)^2) + u(k)^3;
    else
        y(k+1) = ((y(k)*y(k-1)*y(k-2)*u(k-1)*(y(k-2)-1)+round(k/500)*u(k)))/(1+y(k-1)^2+y(k-2)^2);
    end  
end

plot(1:1000, y,'b');
ylim([-1.5,1.5]);
legend('y_d','y');

运行结果

λ \lambda λ 为 2 时:
在这里插入图片描述

λ \lambda λ 为 0.1 时:
在这里插入图片描述

不同 λ \lambda λ 对比:
在这里插入图片描述

λ \lambda λ 减小,闭环响应速度变快,但超调也变大。

仔细观察一下书上的图4.1(a),运行结果和书本的不太一样,原因是书本给的期望输出信号公式中的 r o u n d ( k / 500 ) round(k/500) round(k/500) 实际上用了 r o u n d ( k / 100 ) round(k/100) round(k/100) ,估计是笔误,不过这些都是小问题啦,例题只是用来帮助理解原理的,参数变了没关系!

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

例题4.2

题目要求

在这里插入图片描述

在这里插入图片描述

matlab代码

clc; clear all;

%% 期望轨迹
for k = 1:1:1000
    if k<=300 | k> 700
        yd(k) = 5*sin(k*pi/50) + 2*cos(k*pi/100);
    else
        yd(k) = 5*(-1)^round(k/100);
    end
end
 
plot(1:1000, yd,'r');
ylim([-1.5,1.5]);
hold on

%% MFAC参数设置
epsilon = 1e-5; % 伪偏导重置阈值
eta = 1; % 伪偏导增益
miu = 2; % 伪偏导步长
rho = 0.6; % 控制律增益
lambda = 2; % 控制律步长
u(1:2)=0;
y(1)=-1;
y(2)=1;
phi(1)=2;

for k = 2:1:999
    %% 伪偏导更新
    if k==2
        delta_u = 0;
    else
        delta_u = u(k-1) - u(k-2);
    end
    phi(k) = phi(k-1) + eta*delta_u*(y(k)-y(k-1)-phi(k-1)*delta_u)/(miu + delta_u^2);
    % 伪偏导重置
    if abs(phi(k))<=epsilon | delta_u<= epsilon | sign(phi(k))~=sign(phi(1))
        phi(k) = phi(1);
    end
    
    %% 控制律更新
    u(k) = u(k-1) + rho*phi(k)*(yd(k+1)-y(k)) / (lambda + phi(k)^2);
    
    %% 系统函数
    if k==2
        y(k+1) =0;
    elseif k<=500
        y(k+1) = 5*y(k)*y(k-1)/(1+y(k)^2+y(k-1)^2+y(k-2)^2) + u(k) + 1.1*u(k-1);
    else
        y(k+1) = 2.5*y(k)*y(k-1)/(1+y(k)^2+y(k-1)^2)+1.2*u(k)+1.4*u(k-1)+0.7*sin(0.5*(y(k)+y(k-1)))*cos(0.5*(y(k)+y(k-1)));      
    end  
end

plot(1:1000, y,'b');
ylim([-15,15]);
legend('y_d','y');

运行结果

λ \lambda λ 为 2 时:

在这里插入图片描述

λ \lambda λ 为 0.1 时:

在这里插入图片描述

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

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

相关文章

neo4j jdk安装版本搭配

jdk下载版本为jdk11 neo4j 为neo4j-community-4.3.15 可使用 非常流畅 没有毛病&#xff01;&#xff01;&#xff01; 这里直接给出结论&#xff0c;对于想知道这两个版本为什么适配的小伙伴可以继续往下看 出现这个界面后在网页打开browser 输入账号和密码后就可以登录了&…

【架构设计】什么是CAP理论?

1、理论 CAP理论是指计算机分布式系统的三个核心特性&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition Tolerance&#xff09;。 在CAP理论中&#xff0c;一致性指的是多个节点上的数据…

Vector - CAPL - CANoe硬件配置函数 - 01

CAN ACK自应答 在测试CAN&CANFD通信或者网络管理的时候&#xff0c;我们经常遇到使用报文&#xff08;网络管理报文或者通信报文&#xff09;唤醒被测件这个测试点&#xff0c;如果测试比较多的情况下&#xff0c;我们就会发现&#xff0c;如果CANoe没有接被测件或者被测件…

Python标准数据类型-Number(数字)

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础入门篇 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又一座的高山…

《Java集合》ConcurrentSkipListMap

目录 数据结构findPredecessordoGetdoRemovedoPut新值插入底层创建新值的索引连接索引 数据结构 java源码中对ConcurrentSkipListMap的描述如下&#xff1a; 图中&#xff0c;第0层为具体的数据&#xff0c;第1层的每一个node都有两个子node&#xff0c;一个指向同层的右边&am…

kong(3):动态负载均衡实现

nginx下负载均衡配置 upstream tulingmall-product-upstream {server 192.168.65.190:8866 weight100;server 192.168.65.190:8867 weight100; } server {listen 80;location /pms/ {proxy_pass http://tulingmall-product-upstream;} } 通过 Kong Admin API 进行上述的负载均…

srm采购管理系统有那些功能

srm采购管理系统&#xff0c;是通过系统的手段对采购过程进行管理和控制&#xff0c;实现降低成本、提高效益、提高企业核心竞争力的目的。那么 srm采购管理系统有哪些功能呢&#xff1f; 计划管理 srm采购管理系统提供了各种物料需求计划的功能&#xff0c;以帮助企业制定并控…

前端项目实战:网易云静态页面——导航栏

文章目录 一、实现目标二、顶部实现&#xff08;背景为黑色部分&#xff09;1. 内容布局2. 左边部分网易云logo左边的列表列表元素高亮指向每个列表元素的小红色三角“下载客户端”后的hot标志 3. 右边部分登陆创作者中心搜索 三、底部实现&#xff08;背景为红色部分&#xff…

Echarts 项目演练(上)整体页面结构的构建

项目分辨率响应式创建 项目顶部信息条创建 页面主体创建 接项目搭建与初始化之后继续对项目进行部署工作 项目展示&#xff1a; 技术栈&#xff1a; 1. vue3.0vue-router4.0axios 2. flex 布局 3. LESS 4. rem 屏幕适配 5. echarts5.0 项目分辨率响应式创建 对插件…

arduino esp-01s开发环境配置(备忘)

很久没玩arduion了&#xff0c;前天一个网友提了一个问题要我帮忙&#xff0c;结果电脑重新做了系统&#xff0c;又要重新设置环境&#xff0c;结果忘记了&#xff0c;做个备忘&#xff0c;省得以后又要重新研究。 1、附加开发板管理器网址&#xff1a;http://arduino.esp8266…

L1-002 打印沙漏

L1-002 打印沙漏 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中…

机器学习——为什么逻辑斯特回归(logistic regression)是线性模型

问&#xff1a;逻辑斯蒂回归是一种典型的线性回归模型。 答&#xff1a;正确。逻辑斯蒂回归是一种典型的线性回归模型。它通过将线性回归模型的输出结果映射到[0,1]区间内&#xff0c;表示某个事物发生的概率&#xff0c;从而适用于二分类问题。具体地说&#xff0c;它使用sig…

Flink CDC 在易车的应用实践

摘要&#xff1a;本文整理自易车数据平台负责人王林红&#xff0c;在 Flink Forward Asia 2022 数据集成专场的分享。本篇内容主要分为四个部分&#xff1a; Flink 应用场景DTS 平台建设Flink CDC Hudi 应用实践未来规划 点击查看直播回放和演讲 PPT 一、Flink 应用场景 Flink…

Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页,前后端分离式开发)

Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页&#xff0c;前后端分离式开发) MyBatis-Plus(opens new window) (简称MP) 是一个MyBatis(opens new window)的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变…

【牛客网】最难的问题与因子个数

目录 一、编程题 1.最难的问题 2.因子个数 一、编程题 1.最难的问题 链接&#xff1a;最难的问题__牛客网 (nowcoder.com) NowCoder生活在充满危险和阴谋的年代。为了生存&#xff0c;他首次发明了密码&#xff0c;用于军队的消息传递。假设你是军团中的一名军官&#xff…

Linux网络服务之yum仓库

目录 一、yum仓库简介二. ftp搭建yum源三. 搭建国内在线源四. 本地源和在线yum同时使用五. 通过缓存的方式保存所下载的软件包六 . 制作yum仓库 一、yum仓库简介 yum是一个基于RPM包&#xff08;是Red-Hat Package Manager红帽软件包管理器的缩写&#xff09;构建的软件更新机…

TortoiseSVN使用-权限配置

文章目录 3.5 权限配置3.5.1 单一版本库权限配置3.5.2 多版本库共享配置 3.5 权限配置 3.5.1 单一版本库权限配置 ①要设置授权访问就需要创建用户&#xff0c;并为用户设定权限 ②打开授权访问的配置 [1]打开 D:\DevRepository\Subversion\ERP\conf\svnserve.conf [2]将第 …

Day953.以假设驱动为指引 -遗留系统现代化实战

以假设驱动为指引 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于以假设驱动为指引的内容。 很多人在做遗留系统现代化的时候呢&#xff0c;总觉得它是一个十分复杂的技术问题。 本来嘛&#xff0c;无论是代码的重构、架构的拆分&#xff0c;还是 DevOps 平台的搭…

2023年 团体程序设计天梯赛个人感悟及总结(附题解)——遗憾国三

今年也是第一次参加了天梯赛&#xff0c;在这里也写一下自己的一些赛前准备、比赛过程的一些问题&#xff0c;以及赛后的一些总结以及感悟叭&#xff01;首先赛前准备的话也不能说我准备的非常的充分吧&#xff0c;但是L2阶的题目我是真的刷的很猛很疯的呢&#xff0c;这样看来…

Python类的继承

一、类的继承 1、什么是继承 通过继承基类来得到基类的功能 所以我们把被继承的类称作父类或基类&#xff0c;继承者被称作子类 代码的重用 2、父&#xff08;基&#xff09;类与子类 子类拥有父类的所有属性和方法 父类不具备子类自有的属性和方法 3、继承的用法 定义…