您正在尝试对一个
k
值向量执行
累积版本mpower
。
遗憾的是,bsxfun
还没有发展到处理这种情况的地步。因此,在这一点上,我最好建议您拥有一个运行存储器,在每次迭代中累积矩阵乘积以在下一次迭代中使用。
您的原始循环代码类似于以下内容-
final = zeros([size(A),100]);
for j=1:1:100
final(:,:,j)=A^(j-1);
end
因此,在建议下,修改后的循环代码将是 -
final = zeros([size(A),100]);
matprod = A^0;
final(:,:,1) = matprod;
for j=2:1:100
matprod = A*matprod;
final(:,:,j)= matprod;
end
基准测试 -
A = randi(9,200,200);
disp('---------- Original loop code -----------------')
tic
final = zeros([size(A),100]);
for j=1:1:100
final(:,:,j)=A^(j-1);
end
toc
disp('---------- Modified loop code -----------------')
tic
final2 = zeros([size(A),100]);
matprod = A^0;
final2(:,:,1) = matprod;
for j=2:1:100
matprod = A*matprod;
final2(:,:,j)= matprod;
end
toc
运行时 -
---------- Original loop code -----------------
Elapsed time is 1.255266 seconds.
---------- Modified loop code -----------------
Elapsed time is 0.205227 seconds.
j
当作一个变量使用了... 我需要链接到Shai的优秀帖子吗? ;) - Adriaan