我需要模拟一个节点网络。边的权重在矩阵中给出。由于节点之间的非零距离,我们考虑时间延迟,它是在给定距离和任意速度的情况下计算的。延迟值已经计算过了。鉴于是对称的,对于经过矩阵,我们有 不同的时延。
load('A.mat'); % A is a symmetric matrix of dimensions n by n
load('tau.mat'); % tau is the delay array vector with n(n-1)/2 components
tf = 10;
sol = dde23(@(t,y,z)(dde(t,y,z,A)),tau,@(t)(history(t,A)),[0 tf]);
t = linspace(0,tf,200);
y = deval(sol,t);
figure
plot(t,y)
网络需要以其解析形式表示为一个动态系统:
, 在哪里是初始的对角矩阵矩阵,其中考虑到由于节点与自身之间的距离为零,因此没有延迟。在没有初始化方法的情况下不同的矩阵经过,我创建了一个矩阵如下。每个对称对矩阵将被放在其各自的位置并乘以相应的延迟。
function dydt = dde(t,y,yd,A)
n = length(A);
A0 = diag(diag(A));
m = n*(n-1)/2;
P = zeros(n,n*m);
k = 0;
for i = 1:n
for j = 1:n
if j>i
P(i,j+n*k) = A(i,j);
P(j,i+n*k) = A(i,j);
k = k+1;
end
end
end
dydt = A0*y;
for c = 0:m-1
dydt = dydt + P(:,n*c+1:(c+1)*n)*yd(:,c+1);
end
end
function y = history(t,A)
y = rand(length(A),1);
end
如果代码在技术上是正确的,那么它就不是有效的,因为即使对于少量节点,它产生结果的时间也会成倍增加。例如,对于 7 个节点的网络,需要 2.1 秒,8 个节点需要 7.6 秒,9 个节点需要 30 秒,10 个节点几乎需要 121 秒。这使得它对大型网络的使用令人望而却步。
这种指数级增长的计算成本有意义吗?
有什么办法可以减少计算时间?