scipy.linalg.eig가 왼쪽 및 오른쪽 고유 벡터를 계산하는 방법에 관한 질문이 있습니다. 어쩌면 내가 모든 것을 오해했을 지 모르지만 상황이 내게 맞지 않는 것처럼 보입니다 ...scipy.linalg.eig가 올바른 왼쪽 고유 벡터를 제공합니까?
처음부터. i 번째 열은을 의미 어디 기대한다 함수가 left_v
의 열로 고유 벡터를 왼쪽으로 얻을 호출하는 동안 left=True
을 설정 한 후
ev, left_v, right_v = scipy.linalg.eig(A, left=True)
manual에 따르면, : 고유 모두 고유 벡터를 얻기 위해 나는 다음을 사용 i 번째 고유치. 그러나 결과는 내가 예상 한 것이 아니므로 간단한 점검을 수행했습니다.
I는 (자세한 내용 here 모양) 함수를 두 번 호출 우측 및 좌측 고유 벡터를 계산 :
left_v_2
의 열
left_ev
에 대응하는 값과 관련된 고유 벡터이다
right_ev, right_v_2 = scipy.linalg.eig(A)
left_ev, left_v_2 = scipy.linalg.eig(A.T)
. right_ev_2
과 left_ev_2
모두 동일한 고유치를 제공하지만, 순서가 다르므로이를 고려해야 만합니다.
하나는 전자가 후자의 공액 따라서 left_ev
left=True
으로 scipy.linalg.eig
로부터 얻어진 유효 좌측 고유 벡터 아니라고 빠르게 자리 (고유 값에 대한 재 배열)과 left_ev
left_ev_2
수를 비교.
고유 벡터의 유효성에 대한 또 다른 검사는 임의의 실제 사각 매트릭스 좌우 고유 벡터, 즉 biorthogonal 있습니다에 대한 사실을 기반으로 수행 할 수 있습니다
left_v.T.dot(right_v)
는 대각 행렬을 제공해야하지만, '아무튼 (I)이 변경 될 때까지 t는 는 : left_v.T.conj().dot(right_v)
는
동안 :
left_v_2.T.dot(right_v_2)
는 예상 된 대각 행렬을 준다.
비슷한 문제가 발생 했나요? 내가하는 말로 바른가? eig
을 설명하는 동안 sciPy 설명서가 약간 부정확합니까? 조언 해 줄 수 있어요?
감사합니다. 신원을하는 복합체 (.H 의미이다) 양쪽의 (즉, 에르 미트 전치)를 바꾸어 복용하고 b
가정,
a.H vl[:,i] = w[i].conj() b.H vl[:,i]
을 또는 :
감사합니다. 워렌. 나는 당신이 vl의 켤레 전치가 일반적으로 사용되는 관습에 따라 왼쪽 고유 벡터임을 확인했다. 이제 질문은 왜 'eig' doscstring이이 모호한 정보를 제공 했는가? –
Fwiw, A = np.array ([[0., -1], [1, 0]]); w, L, R = eig (A, 왼쪽 = True, 오른쪽 = True); "L *. R : \ n", L.conj(). T.dot (R)' 은'I'를 기대한다면'- I' - 문제를 일으 킵니다. 일반적으로'np.diag (1 -1 -1 1)'일 수 있으니 빠른 수정이 필요하지 않습니까? (버전 : numpy 1.14.1 scipy 1.0.0 python 2.7.14 mac 10.10.5) – denis
일반적으로 L.conj(). T.dot (R)은 * 대각선이어야하지만 반드시 ID 일 필요는 없습니다 . 생성물이 신원이라는 좌/우 고유 벡터가 존재하지만, '고유 벡터'는 그러한 고유 벡터를 계산할 수 없다. –