Эффективное умножение очень больших матриц в MATLAB

У меня недостаточно памяти, чтобы просто создать диагональную матрицу D-by-D, поскольку D большое. Я все время получаю ошибку «нехватка памяти».

Вместо выполнения операций M x D x D при первом умножении я выполняю операции M x D, но все же мой код запускается долго.

Кто-нибудь может найти более эффективный способ выполнения умножения A ' * B * A ? Вот что я до сих пор пытался:

D=20000
M=25

A = floor(rand(D,M)*10);
B = floor(rand(1,D)*10);

for i=1:D
    for j=1:M
        result(i,j) = A(i,j) * B(1,j);
    end
end    

manual = result * A';
auto = A*diag(B)*A';
isequal(manual,auto)

alt text

12
задан matcheek 13 December 2010 в 06:54
поделиться