径向基 | |
---|---|
1 | 径向基RBF(radial basis function)函数、RBF神经网络、 反推(back-stepping)控制 |
2 | 基于 RBF 径向基神经网络的自适应控制,原理推导,效果实现,Matlab 程序 |
3 | 使用 RBF神经网络,结合参考模型,通过神经网络输出被控模型的控制器,实现其对参考模型的跟踪,Matlab 程序 |
1. RBF神经网络在控制中的应用
这里再给出一个使用 RBF神经网络,结合参考模型,通过神经网络输出被控模型的控制器,实现其对参考模型的跟踪的程序。
关于原理讲解请参考RBF神经网络参考模型自适应MATLAB实现(分析)。
程序结果如下
%
% Author: Z-JC
% Data: 2022-10-16
clear
clc
%%
% reference model states
y_d(:,1) = 0.5 * sin(0);
y_m(:,1) = y_d(:,1);
% model states
u(:,1) = 0;
y(:,1) = u(:,1);
% output error
e_c(:,1) = y_m(:,1) - y(:,1);
% RBF
InpLayNum = 3;
HidLayNum = 7;
OutLayNum = 1;
x(:,1) = [y_d(:,1) e_c(:,1) y(:,1)]';
c = [-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3];
b = 2;
w = rands(7,1);
h = zeros(7,1);
% learning rate
alpha = 0.5;
%% Time state
t(1,1) = 0;
tBegin = 0;
tFinal = 10;
dT = 0.05;
times = (tFinal-tBegin)/dT;
% Iterations
for i = 1:times
% Record time
t(:,i+1) = t(:,i) + dT;
y_d(:,i+1) = 0.5 * sin(t(:,i+1));
% reference model output
y_m(:,i+1) = y_d(:,i+1);
% model output
y(:,i) = u(:,i);
% output error
e_c(:,i) = y_m(:,i) - y(:,i);
% RBF
x(:,i) = [y_d(:,i) e_c(:,i) y(:,i)]';
% 这里有 7 个隐含层节点 HidLayNum
for j = 1:HidLayNum
h(j) = exp( -norm(x(:,i)-c(:,j))^2/(2*b^2) ); % 节点高斯核函数
end
% update weight % 梯度下降法更新权值
d_w = e_c(:,i) * h;
w(:,i+1) = w(:,i) + alpha * d_w;
% RBF output
u(:,i+1) = w(:,i+1)' * h;
% update model output
y(:,i+1) = u(:,i+1);
% update output error
e_c(:,i+1) = y_m(:,i+1) - y(:,i+1);
end
figure(1);
plot(t,y_m,'r', t,y,'k:', 'linewidth',1.5);
xlabel('t (s)');ylabel('ym,y');
legend('Reference model output $y_m$','Model output $y$', 'interpreter','latex');
figure(2);
plot(t,u,'r', 'linewidth',1.5);
legend('Model control input $u$', 'interpreter','latex');
xlabel('t (s)');ylabel('Control input');