Matlab中矩阵的求和表示法

时间:2017-09-04 21:00:49

标签: matlab

我在Matlab中有一个名为P的4x4矩阵。我想将P提升到一个幂(比方说,X)来创建一个新的4x4矩阵。然后,我想将该矩阵从0加到51(即P ^ 0 + P ^ 1 + ... + P ^ 52)

当然,这要花很长时间才能完全解决。有没有办法缩短这个?

我已经尝试过以下代码:

 syms k

 symsum(P^k, k, [0 51])

不返回我想要的东西。

由于

4 个答案:

答案 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))