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

👉对应书本 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λ 减小，闭环响应速度变快，但超调也变大。

## 例题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 时：

|
4天前
|

MATLAB用GARCH模型对股票市场收益率时间序列波动的拟合与预测
MATLAB用GARCH模型对股票市场收益率时间序列波动的拟合与预测
|
5天前
|

matlab用高斯曲线拟合模型分析疫情数据
matlab用高斯曲线拟合模型分析疫情数据
|
5天前
|

Matlab建立SVM，KNN和朴素贝叶斯模型分类绘制ROC曲线
Matlab建立SVM，KNN和朴素贝叶斯模型分类绘制ROC曲线
31 5
|
6天前
|

matlab贝叶斯隐马尔可夫hmm模型实现
matlab贝叶斯隐马尔可夫hmm模型实现
20 0
|
6天前
|

matlab中的隐马尔可夫模型(HMM)实现
matlab中的隐马尔可夫模型(HMM)实现
|
14天前
|

【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
28 0
|
28天前
|

23 3
|
2月前
|

30 2
|
3月前
|

【MFAC】基于紧格式动态线性化的无模型自适应控制
【MFAC】基于紧格式动态线性化的无模型自适应控制
42 0
|
3月前
|
Perl
【MFAC】基于全格式动态线性化的无模型自适应控制（Matlab代码）
【MFAC】基于全格式动态线性化的无模型自适应控制（Matlab代码）
34 0