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

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

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

相关文章
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
本项目展示了用于分析和模拟电磁干扰对数据链系统影响的算法。通过Matlab 2022a运行,提供无水印效果图预览。完整代码包含详细中文注释及操作视频。理论部分涵盖五种常见干扰模型:噪声调频、线性调频、噪声、扫频和灵巧干扰,详细介绍其原理并进行对比分析。灵巧干扰采用智能技术如认知无线电和机器学习,自适应调整干扰策略以优化效果。
|
2月前
|
算法
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
213 13
|
2月前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于BP神经网络的苦瓜生长含水量预测模型matlab仿真
本项目展示了基于BP神经网络的苦瓜生长含水量预测模型,通过温度(T)、风速(v)、模型厚度(h)等输入特征,预测苦瓜的含水量。采用Matlab2022a开发,核心代码附带中文注释及操作视频。模型利用BP神经网络的非线性映射能力,对试验数据进行训练,实现对未知样本含水量变化规律的预测,为干燥过程的理论研究提供支持。
|
3月前
|
算法
基于HASM模型的高精度建模matlab仿真
本课题使用HASM进行高精度建模,介绍HASM模型及其简化实现方法。HASM模型基于层次化与自适应统计思想,通过多层结构捕捉不同尺度特征,自适应调整参数,适用于大规模、高维度数据的分析与预测。MATLAB2022A版本运行测试,展示运行结果。
|
4月前
|
机器学习/深度学习 算法 数据处理
基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真
本项目基于最小二乘法,利用Matlab对太阳黑子活动进行模型参数辨识和预测。通过分析过去288年的观测数据,研究其11年周期规律,实现对太阳黑子活动周期性的准确建模与未来趋势预测。适用于MATLAB2022a版本。
|
4月前
|
算法
基于Kronig-Penney能带模型的MATLAB求解与仿真
基于Kronig-Penney能带模型的MATLAB求解与仿真,利用MATLAB的多种数学工具简化了模型分析计算过程。该模型通过一维周期势垒描述晶体中电子运动特性,揭示了能带结构的基本特征,对于半导体物理研究具有重要价值。示例代码展示了如何使用MATLAB进行模型求解和图形绘制。
|
6月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
272 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
6月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
162 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
6月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
138 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

热门文章

最新文章