@matcheek: технику разделения большой матрицы на более мелкие можно применять к оперативной памяти так же, как к кэш-памяти. Для вас кеш вообще не имеет значения, а ОЗУ имеет значение.

я недостаточно памяти, чтобы просто создать диагональную матрицу 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)

Ответы на вопрос(3)

Ваш ответ на вопрос