2011-10-29 7 views
3

Ax = b 시스템을 풀려면 라이브러리가 필요합니다. 여기서 A는 비대칭 스파 스 행렬이며 행당 8 개의 항목이 포함되어 있습니다 (그리고 상당히 클 수 있습니다). 나는 biconjugate 그래디언트를 구현하는 라이브러리가 잘되어야한다고 생각하지만 작동하는 라이브러리를 찾을 수 없다. (iml ++을 시도했지만, iml ++/sparselib ++ 패키지에는 헤더가 없다.) 어떤 팁?희소 행렬 과다 결정 선형 방정식 시스템

+0

http://www.boost.org/doc/libs/1_47_0/libs/numeric/ublas/doc/index.htm을 보셨습니까? – andand

+0

그래,하지만 난 그냥 템플릿 라이브러리, 나는 반복적 인 방법을 스파 스 시스템을 해결하기 위해 볼 수없는 것 같아, 내가 틀렸어? – tuccio

+0

스파 스 매트릭스 클래스가 있습니다. 나는 그것에 대한 해결사가 있는지 없는지에 대해 자세히 설명하지는 않았지만, http://www.boost.org/doc/libs/1_47_0/libs/numeric/ublas/doc를보고 싶을 수도있다. /matrix_sparse.htm 거기에 사용할 수있는 것이 있는지 확인하십시오. – andand

답변

3

과다한 시스템을 치료하는 표준 방법이 있습니다. 예를 들어, Wikipedia은 다음과 같이 말합니다.

일련의 선형 연립 방정식은 Ax = y와 같이 매트릭스 형태로 작성할 수 있습니다. 변수보다 방정식이 더 많으면 시스템은 과다하게 호출되며 일반적으로 솔루션이 없습니다. 그런 다음 시스템을 (A TA) x = A T y로 변경할 수 있습니다. 새로운 시스템은 변수와 같은 방정식을 가지고 있습니다 (행렬 A T A는 정사각 행렬입니다). 일반적인 방법으로 해결할 수 있습니다. 이 솔루션은 원래 시스템의 양 측 간의 불일치를 측정하는 Euclidean norm || Ax-y ||를 최소화하여 원래의 과다 확정 시스템의 최소 제곱 솔루션입니다.

따라서 표준 스퀘어 매트릭스 스파 스 솔버를 사용할 수 있습니다.

개인적으로 나는 Tim Davis의 CSparse에서 직접 솔버를 사용합니다. Tim은 우수한 직접 스파 스 솔버를 많이 작성했습니다. 실제로 그의 UMFPACK은 또 다른 훌륭한 옵션으로 MATLAB에서 사용됩니다. 이 두 솔버는 모두 C 인터페이스를 제공합니다. 네이티브 C++ 인터페이스로 무언가를 찾고 있다면 아무것도 제공 할 것이 없습니다.

저는 반복적 인 해결사에 대한 경험이 있습니다. 그러나, 내가보고있는 문제에 대해, 반복적 인 방법이 큰 행렬에 대해 불안정 해지는 것을 발견했습니다. 직접적인 솔버를 통해 훨씬 더 많은 성공을 거두었습니다. 물론, 문제가 발생하는 매트릭스의 유형에 따라 역으로 경험할 수있는 것은 당연합니다.

+0

대단히 고맙습니다.이게 도움이되었습니다. 지금은 umfpack을 사용하고 있습니다. (컴파일하는 데 시각적 인 스튜디오 프로젝트를 만드는 것은 상당히 짜증났습니다 : D), 잘 작동하는 것 같습니다. – tuccio

+0

대답을 받아 들일 수 없습니다. 문제있어? –

+0

그래, 나는 경련이고 나는 심지어 내가 그것을 토글 통지하지 않았다 : D – tuccio

0

ARPACK은 스파 스 비대칭 매트릭스 문제를 해결합니다. C++ 버전이 있습니다

+0

ARPACK은 고유 솔버입니다. 그것은 훌륭하지만 문제는 다른 문제에 관한 것입니다. –

0

David Heffernan의 대답 : 중요한 것은 하나의 중요한 점을 잊지 마십시오. 행렬 A는 선형 독립 열이 있는지 검사해야합니다. 그렇지 않으면 (A^TA)가 단수 일 수 있습니다. 코스).