2012-02-26 2 views
0

Я хотел бы получить некоторую помощь с функцией DPOTRS из LAPACK при вызове из C. Да, я знаю, что матрица, с которой я пытаюсь работать, является положительной (с собственными значениями 3, 1 на самом деле!)Вызов DPOTRS из LAPACK в C на GNU/Linux

В настоящее время моя функция работает неправильно. Он возвращает неверный результат.

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; 
} 

Он возвращает неправильный результат! Правильный результат будет +1,000, -0,500

Однако я получаю 0,469, -0,188

Но на вершине, что информация возвращает 0, как если бы это было хорошо!

И что, дамы и господа, ошеломляет мой разум.

Заранее благодарен!

ответ

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 должна быть уже Cholesky факторизованная матрица в LAPACK верхней или нижней треугольной форме. Вы пропустили шаг. Факторизуйте свой ADPOTRFпервым, а затем используйте его для решения одной или нескольких правых сторон с помощью DPOTRS.

+0

Это верно, спасибо. – user1233977

+0

Однако я хотел бы подчеркнуть, что нет причин быть грубыми. В документации используется нечеткий английский. То, как он читается мной и 4 профессорами в техническом университете, заключается в том, что он будет использовать любую положительно определенную симметричную матрицу A и использовать факторизацию Cholesky, рассчитанную DPOTRF для решения системы. Тем не менее, спасибо. Вы ответили на мой вопрос. – user1233977

+0

@ user1233977: Я не думаю, что ответчик был груб. Курт, может быть, но не грубо. –

 Смежные вопросы

  • Нет связанных вопросов^_^