Matlab 矩阵的幂
我有一个方阵a(nxn)。我想将这个矩阵的一系列k次幂创建成一个nxk多维矩阵(不是元素而是矩阵的实际幂),即获取Matlab 矩阵的幂,matlab,matrix,multiplication,bsxfun,Matlab,Matrix,Multiplication,Bsxfun,我有一个方阵a(nxn)。我想将这个矩阵的一系列k次幂创建成一个nxk多维矩阵(不是元素而是矩阵的实际幂),即获取[a^0 a^1 a^2..a^k]。这是一种不同的范德蒙矩阵情形 我可以做它与循环,但它是恼人的和缓慢的。我尝试使用bsxfun,但没有成功,因为我可能在这里遗漏了一些东西 下面是我做的一个简单循环: for j=1:1:100 final(:,:,j)=A^(j-1); end 您正在尝试使用k值的向量执行的累积版本 可悲的是,他还没有进化到处理这样的案件。因此,在
[a^0 a^1 a^2..a^k]
。这是一种不同的范德蒙矩阵情形
我可以做它与循环,但它是恼人的和缓慢的。我尝试使用bsxfun,但没有成功,因为我可能在这里遗漏了一些东西
下面是我做的一个简单循环:
for j=1:1:100
final(:,:,j)=A^(j-1);
end
您正在尝试使用k
值的向量执行的累积版本
可悲的是,他还没有进化到处理这样的案件。因此,在这一点上,我所能建议的最好方法是拥有一个正在运行的存储,它在每次迭代中累积矩阵积,以便在下一次迭代中使用
您的原始循环代码如下所示-
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。这是一个^k,而不是一个^k。我希望我的问题清楚。再次感谢!好啊我会再解释清楚的。k是0:1:m的向量(例如m=100)。我想得到矩阵a(nxn)的m次幂。这是一个[a^0 a^1 a^2…a^m]的多数组。在所有m矩阵中。或者是NXM阵列。我希望我现在更清楚了。抱歉搞混了。@imtl是的,我想现在清楚了,谢谢。另外,您是否可以添加一些您可能尝试过的for循环代码来解决问题?我已经将循环添加到发布的问题中。很抱歉,我是这个网站的新手,对格式不熟悉。谢谢大家的帮助。我很感激。