矩阵的幂

3
我有一个正方形矩阵A(nxn)。我想创建一个nxnxk的多维矩阵,其中包含这个矩阵的k次幂(不是元素级别的幂,而是实际的矩阵幂),即[A^0 A^1 A^2..A^k]。这在矩阵情况下类似于Vandermonde矩阵。
我可以使用循环来完成,但是很麻烦且速度慢。我尝试使用bsxfun,但没有成功,因为我可能遗漏了某些内容。
以下是我所做的一个简单循环:
for j=1:1:100 
    final(:,:,j)=A^(j-1); 
end
1个回答

2
您正在尝试对一个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.

非常感谢您的快速回复。这给出了矩阵的逐元素幂。我正在寻找矩阵的mpower,即A^k而不是A.^k。希望我的问题表述清楚了。再次感谢! - imtl
好的,我会再试着更好地解释一下。k是一个0:1:m(例如m=100)的向量。我想要得到矩阵A(nxn)的m个幂次方。也就是一个多维数组[A^0 A^1 A^2....A^m],总共有m个矩阵。或者是一个nxnxm的数组。 我希望现在更清楚了。对于之前的混淆,我很抱歉。 - imtl
@imtl 是的,我现在明白了,谢谢。另外,你能否在问题中添加你尝试过的任何for循环代码? - Divakar
感谢大家的帮助,我非常感激。 - imtl
哦,天哪,你把 j 当作一个变量使用了... 我需要链接到Shai的优秀帖子吗? ;) - Adriaan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接