2014-07-05 2 views
1

큰 행렬의 고유 벡터 (처음 10 개를 말합니다)를 계산하려고합니다. 필자의 초기 문제는 인텔 MKL 라이브러리에 대한 오해가 원인이었습니다. 제 질문을 명확하고 이해하기 쉽게하기 위해 일반화하고 불필요한 세부 사항을 제거하기로했습니다.큰 (희소) 행렬의 고유 값과 고유 벡터 찾기

기본적인 질문은 다음과 같습니다. 큰 스파 스 매트릭스의 고유 값을 찾기 위해 어떤 컴퓨터 코드를 사용해야합니까?

내가 가지고있는 행렬은 특정 근사치 아래에서 드문 것으로 간주 될 수 있습니다. 즉, 대각선에서 멀리 떨어지면 값이 매우 작아집니다. 그 중 일부는 통계적 영향 (매트릭스가 MC 코드에 의해 생성 됨)으로 인해 비 물리적입니다. 이것이 희소라는 용어가 괄호 안에 들어있는 이유입니다.

누군가가 코드 예제를 제공 할 수 있으면 감사하겠습니다.

+0

인텔에서는 설명서에 코드 예제를 제공하지 않습니까? 코드를 사용하여 수행 한 작업을 SO를 표시 할 수있는 경우가 아니면, 여기에 많은 도움을 얻지 못할 가능성이있는 프로그래밍 문제에 대해 구체적으로 설명하십시오. 당신은 투표를하지 않을 수도 있으며 귀하의 질문은 가까운 투표를 유치 할 수도 있습니다. –

+0

이 루틴은'DGEEV'라고 불립니다 (double로 작업하는 경우). 여기에 예제가 있습니다 : https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/dgeev.htm – francis

+0

안녕하세요, Francis, 답장을 보내 주셔서 감사합니다. 이것은 정확히 내가 필요로하는 것이지만, 그것이 나왔을 때 드문 드문 한 저장 장치가 필요합니다. 밀도가 높은 저장소를 사용할 때 내가 가지고있는 행렬이 너무 커서 메모리에 적합하지 않습니다. –

답변

1

ARPACK 아마 사용할 수있는 권리 일이 사전에

알렉스 주셔서 감사합니다. 그것은 오래된 포트란 코드이며 설치하는 데 어려움이 있습니다 (아마도 유지 관리 된 arpack-ng이 더 낫습니다).

또는 libiglEigen 위에 구축 된 반복적 인 전력 반복을 구현합니다. 당신은 MATLAB의 eigs처럼 libigl 버전을 사용할 수 있습니다

Eigen::SparseMatrix<double> A; 
Eigen::SparseMatrix<double> B; 
... 
Eigen::MatrixXd V; 
Eigen::VectorXd D; 
igl::eigs(A,B,3,igl::EIGS_TYPE_SM,V,D); 

이 3 개 작은 고유 값에 대한 DV의 열의 고유 벡터와 고유 값을 계산합니다.

+0

http://yixuan.cos.name/spectra가 재미있어 해 보입니다. –

관련 문제