Matlab 仿真多智体一致性分析,附代码
本例程所有参数及状态均采用最简单的形式,使更容易理解一致性的收敛过程。
所使用拉普拉斯矩阵图为如下所示的无向图(undirected graph)
输入:
- 初始位置(状态)
- 图拉普拉斯矩阵
输出:
- 各智能体一致性位置收敛路径图
- 各智能体的输入变化曲线
%改变了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/输入值');
结果如下图所示: