Вызов DPOTRS из LAPACK в C в GNU/Linux

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

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

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

Но вдобавок info возвращает 0, как будто все прошло хорошо!

И это, дамы и господа, уму непостижимо.

Заранее спасибо!


person Ishayu    schedule 26.02.2012    source источник


Ответы (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. Вы пропустили шаг. Разложите A на множители с помощью DPOTRF сначала, а затем используйте его для решения одной или нескольких правых частей с помощью DPOTRS.

person talonmies    schedule 26.02.2012
comment
Тем не менее, я хотел бы подчеркнуть, что нет причин быть грубым. В документации используется непонятный английский язык. То, как это читается мной и четырьмя профессорами технического университета, заключается в том, что для решения системы будет использоваться любая положительно определенная симметричная матрица A и факторизация Холецкого, вычисленная DPOTRF. Все равно спасибо. Вы ответили на мой вопрос. - person Ishayu; 26.02.2012
comment
@ user1233977: Я не думаю, что ответчик был груб. Коротко, может быть, но не грубо. - person Stephen Canon; 06.03.2012