2013-06-28 5 views
-1

고유 값 및 고유 벡터는 다음 방정식에 따라 Tensor T에서 파생 될 수 있습니다.고유 값 및 고유 벡터 방정식 시스템

내가

T 행렬 방정식은 T.를 도출하는 고유 값, 고유 벡터와 텐서 T에 대한 방정식의 시스템을 얻기 위해 노력하고 있어요 :

(T(i,k)-L(r)*I) * A(r,k) = 0 

첫 번째 항목은 다음과 같아야합니다

[(T11-L1)*A11 T12*A12  T13*A13  T14*A14  ] 
[T21*A11  (T22-L1)*A12 T23*A13  T24*A14  ] 
[T31*A11  T32*A12  (T33-L1)*A13 T34*A14  ] 
[T41*A11  T42*A12  T43*A13  (T44-L1)*A14] 
+1

질문은 무엇입니까? – Schorsch

+1

['eig'] (http://www.mathworks.com/help/matlab/ref/eig.html)의 문제점은 무엇입니까? –

+0

귀하의 equaton (T (i, k) -L (r) * I) * A (r, k) = 0의 고유치는 무엇입니까? – freude

답변

2

먼저 심볼을으로 지정해 보겠습니다. sym :

T = sym('T%d%d', [4 4]); 
A = sym('A%d%d', [4 4]); 
L = sym('L', [4 1]); 

원본 코드에는 몇 가지 문제점이 있습니다. f은 각각의 내부 반복에서 대체되고 있습니다. 2. 내부 결과는 스칼라이어야하므로 I은 나타나지 않아야합니다. (당신은 또한 수동으로 작성하는 대신 Ieye(4)과 같이 정의 할 수 있습니다.)

여기

는 수정 된 버전입니다 :

f = cell(4,1); % Initialize equation system 

for r = 1:k 
    for k = 1:4 
     for i = 1:4 
      f{r}(i,k) = T(i,k) * A(r,k); 
     end 
    end 
    f{r} = f{r} - L(r)*diag(A(r,:)); 
end 

f{i}ith 조각이 될 것입니다.

: @Schorsch 지적 (Matlab과도 경고를 보여줍니다)으로 항상이 imaginary unit을 대표하기 때문에, i (또는 j) 이외의 다른 변수 이름을 사용하려고합니다.

그냥 재미를 위해 당신은 두 개의 내부 루프를 제거하는 repmat를 사용할 수 있습니다

for r = 1:4 
    f{r} = T .* repmat(A(r,:), [4 1]) - L(r)*diag(A(r,:)); 
end 
+1

+1 설명과 루프의 일부를 제거하기 위해'repmat'을 소개했습니다. 또 하나의 추가 설명 인'i' (그리고'j')는 iterators로 사용되어서는 안됩니다. 왜냐하면 그것도 [imaginary unit]이기 때문입니다 (http://www.mathworks.com/help/matlab/ref/i). HTML) Matlab. – Schorsch

+0

글쎄, 거기에 덧글을 추가 할 것이지만, 나는 원래 코드를 가능한 한 멀리 유지하려고했습니다. – pm89

+1

나는 그것이 그것을 이해하고 그것에 동의한다. 그것은 완전성을 위해 언급하고 싶었던 것입니다. – Schorsch