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

 채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2013년 8월 11일
편집: Azzi Abdelmalek 2013년 8월 11일

0 개 추천

Example
A=magic(2);
N=3;
B=cell2mat(arrayfun(@(x) A^x,1:N,'un',0))

추가 답변 (2개)

Jan
Jan 2013년 8월 12일

2 개 추천

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

Andrei Bobrov
Andrei Bobrov 2013년 8월 12일
+1
Good idea to avoid repeating power operation.

댓글을 달려면 로그인하십시오.

Ming
Ming 2013년 8월 11일
편집: Ming 2013년 8월 11일

0 개 추천

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

Note: arrayfun() just hides the "for" loop. If you are willing to use it, then Azzi's example does what you ask.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터 및 File Exchange에서 MATLAB에 대해 자세히 알아보기

제품

질문:

2013년 8월 11일

Community Treasure Hunt

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

Start Hunting!

Translated by