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

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

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

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


全格式动态线性化(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_uLy+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估计

跟踪误差

相关文章
|
2月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
123 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
2月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
95 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
2月前
|
存储
MATLAB - 使用 MPC Designer 线性化 Simulink 模型
MATLAB - 使用 MPC Designer 线性化 Simulink 模型
37 1
|
2月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
71 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
2月前
|
自然语言处理
一级倒立摆控制 - 非线性 MPC 控制及 MATLAB 实现
一级倒立摆控制 - 非线性 MPC 控制及 MATLAB 实现
41 0
|
5月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
5月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
5月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
5月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)

热门文章

最新文章

下一篇
无影云桌面