2012-10-24 8 views
1

안녕하세요! scipy.sparse.linalg.eigs 기능을 사용하여긍정적 인 semidefinite를 가진 scipy 일반화 된 고유 문제

Lf = lambda Af

하지만,이 오류를 얻을 : 나는 세 가지 인수를 전달하고

/usr/local/lib/python2.7/dist-packages/scipy/linalg/decomp_lu.py:61: RuntimeWarning: Diagonal number 65 is exactly zero. Singular matrix. RuntimeWarning) ** On entry to DLASCL parameter number 4 had an illegal value

나는 형태의 일반화 된 eigendecomposition을 계산하려면 , 대각 행렬, 양의 반 (PSD) 행렬 및 수치 K (제 1의 K 고유 값)를 포함한다. Matlab의 eigs 함수는 동일한 입력 매개 변수를 사용하여 잘 수행되지만, 내가 알고있는 SciPy에서는 PSD로 계산하기 위해 시그마 매개 변수도 지정해야합니다.

내 질문은 : 시그마 매개 변수를 설정하는 것을 피하는 방법이 있습니까? MatLab에 있거나 시그마 값을 선택하는 방법이 있습니까?

조언이나 힌트를 기대하고 있습니다 ... 미리 감사드립니다!

답변

1

오류는 일반화 eigenproblem

L x = lambda A x 

행렬 A에서 그 의미로 나타납니다 명확한 긍정적되지 않습니다 (문서화 문자열 eigs을 확인 - 귀하의 경우 매트릭스 아마 단수에). 이것은 ARPACK 모드 2에 대한 요구 사항입니다. 그러나 sigma=0을 지정하여 ARPACK 모드 3으로 전환 할 수 있습니다 (단, which 매개 변수의 의미는이 경우 반전됩니다).

이제 Matlab이하는 일은 확실하지 않지만 가능성은 A의 반대가 아닌 pseudoinverse를 계산한다는 것입니다. 이를 에뮬레이션하려면 do

from scipy.sparse.linalg import LinearOperator 
from scipy.linalg import lstsq 

Ainv = LinearOperator(matvec=lambda x: lstsq(A, x)[0], shape=A.shape) 
w, v = eigs(L, M=A, Minv=Ainv) 

결과를 확인하십시오 .-이 경우 어떻게 될지 모르겠습니다.

또는 0이 아닌 sigma을 지정하려고 할 수 있습니다. 선택한 매트릭스는 관련된 매트릭스에 따라 다릅니다. 예를 들어 which='LM'과 같이 선택되는 고유 값은 lambda' = 1/(lambda - sigma)이 큰 값입니다. 그렇지 않으면 아마 임의로 선택 될 수 있습니다. 물론 관심있는 변형 된 고유 값 lambda'이 다른 고유 값과 잘 분리되면 Krylov 진행에 더 좋습니다.

관련 문제