Multiplicación eficiente de matrices muy grandes en MATLAB

No tengo suficiente memoria para simplemente crear una matriz diagonal D-por-D, ya que D es grande. Sigo recibiendo un error de "falta de memoria".

En lugar de realizar operaciones M x D x D en la primera multiplicación, realizo operaciones M x D, pero aún así mi código tarda años en ejecutarse.

¿Alguien puede encontrar una manera más efectiva de realizar la multiplicación?A'*B*A? Esto es lo que he intentado hasta ahora:

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)

Respuestas a la pregunta(3)

Su respuesta a la pregunta