matlab - 矩阵的幂

标签 matlab matrix multiplication bsxfun

我有一个方阵 A (nxn)。我想将该矩阵的一系列 k 次幂创建为 nxnxk 多维矩阵(不是按元素而是矩阵的实际幂),即获取 [A^0 A^1 A^2..A^ k]。对于矩阵情况,它有点像范德蒙德。

我可以用循环来完成它,但它很烦人而且很慢。我尝试使用 bsxfun 但没有成功,因为我可能在这里遗漏了一些东西。

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

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

最佳答案

您正在尝试执行 mpower累积版本带有 k 值的向量。

可悲的是,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.

关于matlab - 矩阵的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32547973/

相关文章:

c - MEX 文件中 Matlab 矩阵的线性索引

c# - 具有骨骼及其矩阵的 3D 动画

c++ - 做一个有潜在溢出的乘法然后用除法验证有什么问题吗?

c# - 在 C# 中旋转图像的矩阵乘法

matlab - 在聚类 Matlab 之前从一组 3d 点中删除异常值

matlab - 如何使用 MATLAB 检索任意图像的背景颜色?

matlab - MATLAB 中的抗锯齿线和标记

c++ - 在 C++ 中使用模板参数进行矩阵乘法

c - 如何将值添加到value1[i]->value2?

Java 负数乘法