MATLAB: суммирование одной переменной в уравнении - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть переменные
X = 1x20 vector of doubles i = 0:M j = 0:M
И уравнение
sum n=1 to length(X) : (X(n)^(i+j))

Есть ли способ получить матрицу MxM (через индексы i, j) при суммированиив каждой ячейке?Я пробовал это с symsum, но он не позволяет индексировать с помощью n.
Любая помощь приветствуется!

1 Ответ

0 голосов
/ 23 сентября 2018

Изменяя X до вектора размером [1 x 1 x 20] и используя неявное расширение , создается массив 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

Таким образом, тот же самый результат получается без усложнения другогорешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...