【问题标题】:efficient matrix power in MATLAB [duplicate]MATLAB中的高效矩阵功率
【发布时间】:2015-09-23 20:38:19
【问题描述】:

我一直在寻找一种方法来实现一个 MATLAB 函数“Pow(A,k)” 仅使用基本的线性代数运算(如矩阵向量或矩阵矩阵乘法)将矩阵 A 提高到 k 次方。

实现一定要高效,我在O(n^2)中找不到方法,有可能吗?

我唯一知道的是我们可能想要使用 MATLAB 函数“de2bi”来提取整数的二进制数字

【问题讨论】:

  • 为什么不能使用B = A^k;
  • 好吧,分配的目的是为我们自己编程。当然我们可以再用Matlab的“^”操作符来比较实现的效率
  • 好吧,那你肯定做不到 O(n^2)...
  • 检查重复的帖子。该帖子本质上使用了一个循环并将A与自身n相乘...实现A^n。但是,问题略有不同,因为问题是将循环的每次迭代中的每个功率作为切片存储到 3D 矩阵中,但这基本上可以满足您的需求……而且速度非常快。您只需要记住最后的结果,因此如果您忽略中间存储并查看最终结果矩阵,代码将运行得更快。永远不要直接打折循环。您会惊讶于它们在特定情况下的执行速度。
  • 我真的不明白它可以如何使用以及为什么......除非你没有告诉我们整个故事。

标签: matlab matrix linear-algebra


【解决方案1】:

C = mpower(A,B) 是执行 A^B 的另一种方式,但很少使用。它为类启用运算符重载。

【讨论】:

  • 谢谢,但我需要实现我自己的功能,而不是使用 Matlab 之一:)
  • function [ C ] = my_matrix_mult( A,B ) [m,n]=size(A); [k,l]=size(B); if(n~=k) C=[]; disp('Error, not able to multiply matrices'); return end C=zeros(m,1); for i=0:m; for j=0:l; for p=0:n; flag=1; C(i,j)=C(i,j)+ A(i,p)*B(p,j); end end end end
  • 你可以很容易地做到A*B。当 MATLAB 本身可以执行乘法运算时,不要为乘法编写循环。
  • @PrashantItaliya 你不应该在评论中放那么多代码。最好将其添加到答案中,然后您可以回来并在评论中 ping OP。
  • 请不要将代码添加为 cmets,而是更新答案。读3条连续线不是很方便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多