Filter löschen
Filter löschen

Construct Power of Matrix without for loop

1 Ansicht (letzte 30 Tage)
Ming
Ming am 11 Aug. 2013
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

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 11 Aug. 2013
Bearbeitet: Azzi Abdelmalek am 11 Aug. 2013
Example
A=magic(2);
N=3;
B=cell2mat(arrayfun(@(x) A^x,1:N,'un',0))

Weitere Antworten (2)

Jan
Jan am 12 Aug. 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 Kommentare
Andrei Bobrov
Andrei Bobrov am 12 Aug. 2013
+1
Azzi Abdelmalek
Azzi Abdelmalek am 12 Aug. 2013
Good idea to avoid repeating power operation.

Melden Sie sich an, um zu kommentieren.


Ming
Ming am 11 Aug. 2013
Bearbeitet: Ming am 11 Aug. 2013
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 Kommentar
Walter Roberson
Walter Roberson am 11 Aug. 2013
Note: arrayfun() just hides the "for" loop. If you are willing to use it, then Azzi's example does what you ask.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by