Вы пытаетесь выполнить кумулятивную версию mpower
с вектором из k
значений.
К сожалению, bsxfun
еще не разработан для обработки таких случаев. Итак, лучшее, что я мог бы предложить на данный момент, это работающее хранилище, которое накапливает матричный продукт на каждой итерации, чтобы использовать его на следующей.
Ваш исходный код цикла выглядел примерно так:
final = zeros([size(A),100]);
for j=1:1:100
final(:,:,j)=A^(j-1);
end
Таким образом, с предложением модифицированный зацикленный код будет -
final = zeros([size(A),100]);
matprod = A^0;
final(:,:,1) = matprod;
for j=2:1:100
matprod = A*matprod;
final(:,:,j)= matprod;
end
Бенчмаркинг -
%// Input
A = randi(9,200,200);
disp('---------- Original loop code -----------------')
tic
final = zeros([size(A),100]);
for j=1:1:100
final(:,:,j)=A^(j-1);
end
toc
disp('---------- Modified loop code -----------------')
tic
final2 = zeros([size(A),100]);
matprod = A^0;
final2(:,:,1) = matprod;
for j=2:1:100
matprod = A*matprod;
final2(:,:,j)= matprod;
end
toc
Время выполнения -
---------- Original loop code -----------------
Elapsed time is 1.255266 seconds.
---------- Modified loop code -----------------
Elapsed time is 0.205227 seconds.
person
Divakar
schedule
13.09.2015