Matlab 仿真多智体一致性分析,附代码

本例程所有参数及状态均采用最简单的形式,使更容易理解一致性的收敛过程。

所使用拉普拉斯矩阵图为如下所示的无向图(undirected graph)
在这里插入图片描述

输入:

  1. 初始位置(状态)
  2. 图拉普拉斯矩阵

输出:

  1. 各智能体一致性位置收敛路径图
  2. 各智能体的输入变化曲线
%改变了Laplacian函数里面的FAI矩阵,使得状态收敛至静态值,
clc;
clear;

%% 输入初始化参数
X0  = [1, 5, 4]';

% 度矩阵,有向拓扑结构
D =[2 0 0;
    0 2 0;
    0 0 2;];
% 邻接矩阵,有向拓扑结构
A =[0 1 1;
    1 0 1;
    1 1 0];
% 拉普拉斯矩阵
L = D - A;

%% 收敛相关参数
tBegin = 0;                                                                 % 开始时间 
tEnd   = 3;                                                                 % 结束时间
h      = 0.1;                                                               % 最小时间间隔
times  = (tEnd-tBegin) / h;                                                 % 迭代计算次数
X(:,1) = X0;                                                                % Y的第一列等于Y1
U(:,1) = -L * X0;
t(1) = tBegin;                                                              % 时间间隔记录表

i = 1;
while(i <= times)
    Xt = X(:,i);
    Ut = -L * Xt;                                                           % u = -Lx
    Xt1 = Xt + h * Ut;                                                      % x = x + h*u
       
    X(:,i+1) = Xt1;                                                         % 添加更新后的Xt值
    U(:,i+1) = Ut;                                                          % 添加更新后的Ut值  
    t(i+1) = tBegin + i * h;                                                % 添加更新后的t值
    i = i+1;
end

%% 结果显示
% 绘制图像
subplot(2,1,1)
plot(t,X(1,:), t,X(2,:), t,X(3,:), 'linewidth',2.0)
legend("x_1","x_2","x_3");
xlabel('Times/收敛次数');
ylabel('States/状态值');

subplot(2,1,2)
plot(t,U(1,:), t,U(2,:), t,U(3,:), 'linewidth',2.0)
legend("u_1","u_2","u_3");
xlabel('Times/收敛次数');
ylabel('U/输入值');

结果如下图所示:
在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建,欢迎商务合作。wx: diudiu5555

更多推荐