Construct Power of Matrix without for loop

Hi, everyone:
Suppose I have a 2 by 2 matrix A, if I want construct a larger matrix B that is defined as:
B=[A, A^2, A^3, A^4, ... A^N];
is it possible to do it without for loop?
Thanks

 Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 11 Août 2013
Modifié(e) : Azzi Abdelmalek le 11 Août 2013
Example
A=magic(2);
N=3;
B=cell2mat(arrayfun(@(x) A^x,1:N,'un',0))

Plus de réponses (2)

Jan
Jan le 12 Août 2013
Azzi's suggestion is fine for N=3. If you are talking about larger N, neither the repeated power operator nor arrayfun nor cell2mat are efficient:
N = 10000
A = rand(2, 2);
tic;
B = cell2mat(arrayfun(@(x) A^x,1:N,'un',0));
toc
tic;
B = zeros(2, 2, N);
P = 1;
for k = 1:N
P=P*A;
B(:,:,k) = P;
end
B = reshape(B, 2, N * 2);
toc
Elapsed time is 0.199776 seconds.
Elapsed time is 0.039983 seconds.
So I'd prefer the more efficient FOR loop.

2 commentaires

Andrei Bobrov
Andrei Bobrov le 12 Août 2013
+1
Azzi Abdelmalek
Azzi Abdelmalek le 12 Août 2013
Good idea to avoid repeating power operation.

Connectez-vous pour commenter.

Ming
Ming le 11 Août 2013
Modifié(e) : Ming le 11 Août 2013

0 votes

Thanks very much!
Do you know if A is a 2 by 2 by N matrix, can I use "arrayfun" or any other way to do:
B=[A(:,:,1), A(:,:,1)*A(:,:,2), A(:,:,1)*A(:,:,2)*A(:,:,3), ... , A(:,:,1)*A(:,:,2)*A(:,:,3)* ... *A(:,:,N)]
without for loop?

1 commentaire

Walter Roberson
Walter Roberson le 11 Août 2013
Note: arrayfun() just hides the "for" loop. If you are willing to use it, then Azzi's example does what you ask.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by