Другой вариант с использованием arrayfun
B = cell2mat(arrayfun(@(x)A^x,1:5,'UniformOutput',0).')
Результат:
B =
5 4
3 6
37 44
33 48
317 412
309 420
2821 3740
2805 3756
25325 33724
25293 33756
Но основной цикл for, вероятно, будет самым быстрым вариантом в этом случае.
Бенчмаркинг с октавой:
tic
iif = @(varargin) varargin{2*find([varargin{1:2:end}], 1, 'first')}();
recPower = @(A, B, n, f) iif(n > 1, @() [B; f(A, A * B, n - 1, f)], true, @() B);
nPower = @(A, n) recPower(A, A, n, recPower);
for ii = 1:1000
% Calculate for arbitrary n.
nPower(A, 5);
end
toc
Истекшее время составляет 1,023 секунды.
tic
for ii = 1:1000
B = cell2mat(arrayfun(@(x)A^x,1:5,'UniformOutput',0).');
end
toc
Истекшее время составляет 4,8684 секунды.
tic
for ii = 1:1000
B=[];
for jj = 1:5
B = [B;A^jj];
end
end
toc
Истекшее время составляет 0,039371 секунды