2012-02-26 3 views
0

C에서 호출 될 때 LAPACK의 DPOTRS 함수에 대한 도움을 얻고 싶습니다. 예를 들어, 작업 할 매트릭스가 긍정적이라는 것을 알고 있습니다. (실제적으로 Eigenvalues ​​3, 1과 함께)GNU/Linux의 C에서 LAPACK에서 DPOTRS 호출하기

지금 당장 제 기능이 올바르게 작동하지 않습니다. 잘못된 결과를 반환합니다.

double A[] = {2.0, 1.0, 1.0, 2.0}; 
double b[] = {1.5, 0.0}; 
printf("%5.3f %5.3f\n", b[0], b[1]); 
info = dpotrs('U',2,1,A,2,b,2); 
printf("%d\n", info); 
printf("%5.3f %5.3f\n", b[0], b[1]); 

이것은 코드입니다. dpotrs 수동으로이 코드를 사용하여 가져 :

static long dpotrs(char UPLO, long N, long NRHS, double* A, long LDA, double* B, long LDB) 
{ 
    extern void dpotrs_(char* UPLOp, long* Np, long* NRHSp, double* A, long* LDAp, double* B, long* LDBp, long* infop); 
    long info; 
    dpotrs_(&UPLO, &N, &NRHS, A, &LDA, B, &LDB, &info); 
    return info; 
} 

그것은 잘못된 결과를 반환! 그것은 잘 갔다 것처럼 정확한 결과는

하지만 위에 -0.188이 정보는 0을 반환합니다, 그러나, 나는 0.469를받을 1.000 -0.500

이 될 것입니다!

여러분, 그리고 신사 숙녀 여러분, 제 마음을 불끈 깁니다.

미리 감사드립니다.

답변

1

나는 당신이 어떤 문서를 읽을 필요가 있다고 생각 :

* 
* Purpose 
* ======= 
* 
* DPOTRS solves a system of linear equations A*X = B with a symmetric 
* positive definite matrix A using the Cholesky factorization 
* A = U**T*U or A = L*L**T computed by DPOTRF. 
* 

DPOTRS에 입력 행렬은 상위 LAPACK 이하 삼각 형식으로 이미 콜레 팩터 매트릭스해야합니다. 단계를 건너 뜁니다. ADPOTRF첫 번째으로 분해 한 다음 하나 이상의 오른쪽 측면을 DPOTRS으로 풀면됩니다.

+0

정확합니다. 감사합니다. – user1233977

+0

그러나 무례한 이유가 없다는 점을 강조하고 싶습니다. 설명서에 영어가 명확하지 않습니다. 저와 4 명의 교수가 기술 대학에서 읽는 방법은 양의 대칭 행렬 A를 사용하고 DPOTRF에서 계산 한 콜레 스키 인수 분해를 사용하여 시스템을 해석하는 것입니다. 그래도 고맙습니다. 너는 내 질문에 대답했다. – user1233977

+0

@ user1233977 : 답변자가 무례하다고 생각하지 않습니다. 커트, 아마도,하지만 무례하지 않습니다. –