我有变量
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进行索引。
任何帮助表示赞赏!
答案 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
因此获得了相同的结果,而没有其他解决方案的复杂性。