Multiplicação eficiente de matrizes muito grandes no MATLAB

Não tenho memória suficiente para simplesmente criar uma matriz diagonal de D-D, pois D é grande. Eu continuo recebendo um erro de 'falta de memória'.

Em vez de executar operações M x D x D na primeira multiplicação, eu faço operações M x D, mas ainda assim meu código leva anos para ser executado.

Alguém pode encontrar uma maneira mais eficaz de realizar a multiplicaçãoA'*B*A? Aqui está o que eu tentei até agora:

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)

questionAnswers(3)

yourAnswerToTheQuestion