MATLAB:求和方程中的一个变量

时间:2018-09-23 11:31:58

标签: matlab

我有变量
X = 1x20 vector of doubles i = 0:M j = 0:M
和方程式
sum n=1 to length(X) : (X(n)^(i+j))

有没有办法在每个单元格中加总n时获得MxM矩阵(通过索引i,j)?我用symsum尝试了此操作,但不允许使用n进行索引。
任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

通过将X整形为大小为[1 x 1 x 20]的向量,并使用implicit expansion创建3D [M+1 x M+1 x 20]数组,然后通过沿第三维进行求和即可获得结果。

X = rand(1,20);
M = 30;
ii = 0:M;
jj = (0:M).';

Y = reshape(X,1,1,[]);
result = sum(Y.^(ii+jj), 3);

但是,表达式Y.^(ii+jj)创建3D [M+1 x M+1 x 20]数组时,可能需要大量内存,从而导致性能下降。

我们知道x^(i+j)可以写成x^i * x^j,因此表达式可以写成:

result = sum(Y.^ii .* Y.^jj,3);

它具有与先前方法相同的内存消耗。但是,当我们得出包含乘积和的表达式时,应该考虑将其转换为非常快的矩阵乘法

Z = X .^ jj;      % A [M+1 x 20] matrix is created(implicit expansion)
result = Z * Z.'  % multiply Z by its transpose

因此获得了相同的结果,而没有其他解决方案的复杂性。