我在Matlab中有一个名为P的4x4矩阵。我想将P提升到一个幂(比方说,X)来创建一个新的4x4矩阵。然后,我想将该矩阵从0加到51(即P ^ 0 + P ^ 1 + ... + P ^ 52)
当然,这要花很长时间才能完全解决。有没有办法缩短这个?
我已经尝试过以下代码:
syms k
symsum(P^k, k, [0 51])
不返回我想要的东西。
由于
答案 0 :(得分:1)
矢量化解决方案可以使用bsxfun
完成,如下所示:
result = sum(bsxfun(@power, P, reshape(0:51, [1 1 52])), 3);
对于MATLAB版本R2016b及更高版本,可以使用implicit expansion(称为"广播"在其他语言中)来完成:
result = sum(P.^reshape(0:51, [1 1 52]), 3);
如果你真的想要symbolically并且没有得到你想要的结果,可能是因为你使用了错误的操作符。 matrix power operator为^
,而element-wise power operator为.^
。你可能想要这个(P
是一个4乘4的数字矩阵):
syms k
symsum(P.^k, k, [0 51])
答案 1 :(得分:0)
由于您使用的是符号数学,我希望您对循环没有任何问题。
req_sum = zeros(size(P));
for k=0:51 %loop for all the powers
req_sum = req_sum + P^k; %adding the results of each iteration
end
答案 2 :(得分:0)
您可以使用subs
(八度音阶)执行以下操作:
syms 'P' 'k';
subs(symsum(P^k, k, [0 51]), [1 1;1 1])
例如P = [1 1; 1 1]
。
答案 3 :(得分:0)
如果有一个地方,经过@gnovice的一些好主意,我的直觉就是简单地对它进行矢量化。这只是gnovice所做的另一种方式,但在我看来它比bsxfun
更具可读性。
result=reshape(sum(P(:).^[0:51],2),size(P))