文章目录
- [4 仿真验证](#4 仿真验证)
一篇很典型的领导跟随一致性研究
4 仿真验证
论文结果也很不错,个人暂时只复现了一部分,等有人需要再继续其余部分。
例1
论文中作者展示的效果为



当前本人已复现效果如下:

Matlab 程序代码如下:
matlab
% 2022_基于线性变换的领导−跟随多智能体系统动态反馈均方一致性控制
% Author: Jichao Zhao
% Date: 10-16-2026
clear
clc
%%
% Topology of system
L = [2 -1 -1
-1 2 -1
-1 -1 2];
% States
x_0(:,1) = [ 0; 0];
x_1(:,1) = [-1; 3];
x_2(:,1) = [-3; -2];
x_3(:,1) = [ 7; 6];
% Error
x_all = [x_1(:,1), x_2(:,1), x_3(:,1)];
e(:,1) = eFun(x_0(:,1), x_all);
% Properties
A = [-3 0
1 -1];
A_d = [-4 0
1 -1];
B_1 = [-0.8
1];
B_2 = [ 1 0
0 1];
C = [1.2
-0.6]';
D = [0.5
0.5];
G = 0.7;
G_1 = [1, 1, 1;
0, 1, 1;
1, 1, 0;];
K_1 = [-0.2964, 0.1512];
K_2 = [-0.2985, 0.1673];
K_3 = [-0.3665, 0.2027];
K_4 = [-0.3859, 0.1838];
%% Time parameters
tBegin = 0;
tFinal = 10;
dT = 0.01;
times = (tFinal - tBegin)/dT;
t(1,1) = 0;
% Iterations
for i = 1:times
% Time
t(:,i+1) = t(:,i) + dT;
% Time delay
tau = 0;
% Leader
dot_x_0 = A * x_0(:,i) + A_d * x_0(:,i-tau) + B_2 * fFun(x_0(:,i), t(:,i))+ D * omegaFun(t(:,i), 0);
x_0(:,i+1) = x_0(:,i) + dT * dot_x_0;
% Parameters
alpha = 3;
beta = 5;
b_1 = 1;
b_2 = 1;
b_3 = 1;
% Control inputs
x_all = [x_1(:,i), x_2(:,i), x_3(:,i)];
u_1 = K_2 * (controlInputFun(G_1, x_all, 1) + alpha * b_1 * (x_0(:,i+1) - x_1(:,i)));
u_2 = K_3 * (controlInputFun(G_1, x_all, 2) + alpha * b_2 * (x_0(:,i+1) - x_2(:,i)));
u_3 = K_4 * (controlInputFun(G_1, x_all, 3) + alpha * b_3 * (x_0(:,i+1) - x_3(:,i)));
% States
dot_x_1 = A * x_1(:,i) + A_d * x_1(:,i-tau) + B_1 * u_1 + B_2 * fFun(x_1(:,i), t(:,i)) + D * omegaFun(t(:,i), 1);
dot_x_2 = A * x_2(:,i) + A_d * x_2(:,i-tau) + B_1 * u_2 + B_2 * fFun(x_2(:,i), t(:,i)) + D * omegaFun(t(:,i), 2);
dot_x_3 = A * x_3(:,i) + A_d * x_3(:,i-tau) + B_1 * u_3 + B_2 * fFun(x_3(:,i), t(:,i)) + D * omegaFun(t(:,i), 3);
x_1(:,i+1) = x_1(:,i) + dT * dot_x_1;
x_2(:,i+1) = x_2(:,i) + dT * dot_x_2;
x_3(:,i+1) = x_3(:,i) + dT * dot_x_3;
% Error
x_all = [x_1(:,i+1), x_2(:,i+1), x_3(:,i+1)];
e(:,i+1) = eFun(x_0(:,i+1), x_all);
end
%% Plot results
figure;
tiledlayout(2, 2);
nexttile; hold on;
plot(t( 1, :), x_0( 1, :), '-', 'linewidth',1.5);
plot(t( 1, :), x_1( 1, :), '-', 'linewidth',1.5);
plot(t( 1, :), x_2( 1, :), '-', 'linewidth',1.5);
plot(t( 1, :), x_3( 1, :), '-', 'linewidth',1.5);
xlabel("$t~/~s$",'Interpreter','latex', 'FontSize',16);
ylabel("$x_{i1}(t)$",'Interpreter','latex', 'FontSize',16);
legend("$x_{01}(t)$", "$x_{11}(t)$", "$x_{21}(t)$", "$x_{31}(t)$",'Interpreter','latex', 'FontSize',16);
nexttile; hold on;
plot(t( 1, :), x_0( 2, :), '-', 'linewidth',1.5);
plot(t( 1, :), x_1( 2, :), '-', 'linewidth',1.5);
plot(t( 1, :), x_2( 2, :), '-', 'linewidth',1.5);
plot(t( 1, :), x_3( 2, :), '-', 'linewidth',1.5);
xlabel("$t~/~s$",'Interpreter','latex', 'FontSize',16);
ylabel("$x_{i2}(t)$",'Interpreter','latex', 'FontSize',16);
legend("$x_{02}(t)$", "$x_{12}(t)$", "$x_{22}(t)$", "$x_{32}(t)$",'Interpreter','latex', 'FontSize',16);
nexttile; hold on;
plot(t( 1, :), e, '-', 'linewidth',1.5);
xlabel("$t~/~s$",'Interpreter','latex', 'FontSize',16);
ylabel("$e(t)$",'Interpreter','latex', 'FontSize',16);
function input = controlInputFun(A, x_all, i)
alpha = 3;
% Controller
u = 0;
for j = 1:size(A, 1)
u = u + alpha * A(i, j) * (x_all(:,j) - x_all(:,i));
end
input = u;
end
function e = eFun(x_0, x_all)
e = 0;
for i = 1:size(x_all, 2)
e = e + norm(x_0 - x_all(:,i));
end
end
function f = fFun(x, t)
f = [sin(2*t) - 3*cos(x(1));
2 * cos(x(2))];
end
function omega = omegaFun(t, i)
omega = i * exp(-t);
end
最后,为自己专栏打个广告:若想系统性学习多智能体系统一致性控制,欢迎订阅本人专栏:多智能体系统一致性控制