矩阵的幂



我有一个方阵a (nxn)。我想创建这个矩阵的一系列k次幂到一个nxnxk多维矩阵(不是元素的,而是矩阵的实际幂),即得到[A^0 A^1 A^2..A^k]。这有点像矩阵的范德蒙德变换。

我能够做到这一点与循环,但它是恼人和缓慢。我试过使用bsxfun,但没有运气,因为我可能在这里错过了一些东西。

这是我做的一个简单的循环:

for j=1:1:100 
    final(:,:,j)=A^(j-1); 
end

您正在尝试使用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

基准——

%// Input
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.

相关内容

  • 没有找到相关文章

最新更新