如何在 Matlab 上的 DDE 仿真中减少计算时间

问题描述

我需要模拟一个节点网络。边的权重在矩阵中给出。由于节点之间的非零距离,我们考虑时间延迟,这是在给定距离和任意速度的情况下计算的。已经计算了延迟值。鉴于 A 是对称的,对于 n × n 矩阵,我们有 m=n(n-1)/2 个不同的时间延迟。

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,z,A)),tau,@(t)(history(t,[0 tf]);
t = linspace(0,tf,200);
y = deval(sol,t);
figure
plot(t,y)

网络需要以其解析形式表示为一个动态系统:

x_dot = A0* x + A1 *x(t-tau1) + ... + Am *x(t-tau_m)

,其中A0是初始A矩阵的对角矩阵,这里已经考虑到由于节点与自身的距离为零,所以没有延迟。 在没有初始化 m 个不同的 n × n 矩阵的方法的情况下,我创建了一个 P 矩阵,如下所示。每一对 A 矩阵的对称对都将放在其各自的 P 位置并乘以各自的延迟。

function dydt = dde(t,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 秒。这使得它不能用于大型网络。 这有意义吗? 有什么办法可以减少计算时间吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)