矩阵的幂
Powers of a matrix
我有一个方阵A(nxn)。我想将此矩阵的一系列 k 次幂创建为 nxnxk 多维矩阵(不是按元素而是矩阵的实际幂),i.e.getting [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.
我有一个方阵A(nxn)。我想将此矩阵的一系列 k 次幂创建为 nxnxk 多维矩阵(不是按元素而是矩阵的实际幂),i.e.getting [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.