2013-11-25 7 views
1

제가매트릭스 내부 매트릭스 MATLAB

A=[1 2;2 1]; 
C=[0 1]; 

하고 다음 입력 I 시도

D =[CA;CA^2;CA^3;........;CA^n] 

새로운 행렬의 행렬

n=40; 

a(1,1)=1; 
a(1,2)=1; 
a(2,1)=1; 
a(2,2)=1; 
C=[0,1]; 



for k=1:n 
    for i=1:2 
     for j=1:2 
      d(i,j)=c*a(i,j)*^n 
     end 
    end 
end 

때 N을 사용하는 매트릭스에 입력 행렬 시도 정수이지만 할 수 없다.

어떻게 해결할 수 있습니까?

는 각각의 요소를 선언 할 필요가 없습니다, 당신의 관심을 끌기 위해 당신에게

+0

"하지만 할 수 없다"는 질문은 아닙니다. –

+1

@ Okuma.Scott 질문이 잘못되었을 수도 있지만 해결해야 할 MATLAB 구문의 기본에 대한 몇 가지 오해가 있습니다. – Falimond

+1

@Falimond 미안하지만, 나는 지칠대로 지친다 고 생각합니다. 좋은 대답은 BTW. –

답변

2

먼저 대단히을 감사합니다. 첫 번째 코드 스 니펫에 표시 한대로 잘됩니다.

그래서 (실제로 여기 D =[CA;CA^2;CA^3;........;CA^n]를 표시하는 과정을 모방하지 않는다는 사실 외에) 루프이와 함께 주요 문제는 사실이되고있는 변수 kd(i,j)=c*a(i,j)*^n에서 변수 n을 사용하는 것입니다 첫 번째로 for 루프가 증가합니다. 그래서 항상 d(i,j)=c*a(i,j)*^40을 계산하고 있으며 kn의 속도로 사용해야합니다.

a(i,j)*^k도 올바르지 않습니다. *^은 곱하기도 아니고 지수도 아니기 때문에 잘못된 구문입니다. 이 때문에 MATLAB은 오류를 반환합니다.

또한 C는 1x2 행렬이고 A (i, j)는 하나의 요소이므로 Subscripted assignment dimension mismatch. 오류가 발생합니다.

이유는 내가 프로세스를 모방하지 않을 것이라고 말했다. D =[CA;CA^2;CA^3;........;CA^n]은 A와 함께 C에서 요소 현명한 연산을 수행하고 나서 D에 넣는 것이기 때문에 이것은 밀 매트릭스의 실행이 아니라는 것을 확신한다. 곱셈 - 올바르게 나누었을지라도 MATLAB이 처리 할 수 ​​있으므로 비효율적입니다.

clear D 
n=10; 

A=[1 2;2 1]; 
C=[0,1]; 

for k=1:n 
    D(k,:) = C*A^k; 
end 


D = 

     2   1 
     4   5 
     14   13 
     40   41 
    122   121 
    364   365 
    1094  1093 
    3280  3281 
    9842  9841 
    29524  29525 
2

위 답변은 Falimond입니다.
그러나, 행렬 곱셈의 상당수가 여기에 저장할 수 있습니다 : D(k,:) = C*A^k = D(k-1,:)*A :
를 대신 각 k에 대한 k의 힘에 A을 복용, 우리는 A 이전 반복의 결과를 곱해야합니다!

n = 10; 
A = [1 2;2 1]; 
C = [0 1]; 
D = zeros(n, size(C,2)); % pre-allocate always a good practice 
D(1,:) = C*A; % init recursive process 
for k=2:n 
    D(k,:) = D(k-1,:)*A; 
end