No tengo suficiente memoria para crear simplemente una matriz D-by-D diagonal, ya que D es grande. Sigo recibiendo un error de 'falta de memoria'.Multiplicación eficiente de matrices muy grandes en MATLAB
En lugar de realizar operaciones M x D x D en la primera multiplicación, hago 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)
Estoy confundido. ¿Se supone que la matriz B es D-by-D o M-by-M? Tu imagen dice lo primero, pero tu código sugiere lo último. – gnovice
bien descubierto, ahora corregido – matcheek
Además, ¿está tratando de calcular A '* B * A, que le daría un resultado M-por-M? – gnovice