Вычисление обратного числа условия с помощью lapack (т.е. rcond (x))

Я хочу делать именно то, что делает rcond в MATLAB / Octave, используя LAPACK из C. В руководстве по MATLAB сказано, что используется dgecon, и в нем используется норма, основанная на 1.

Я написал простую тестовую программу для чрезвычайно простого случая; [1,1; 1,0] Для этого ввода matlab и octave дают мне 0,25 с использованием rcond и 1 / cond (x, 1), но в случае использования LAPACK этот образец программы печатает 0,0. Для других случаев, таких как идентификация, он печатает правильное значение.

Поскольку MATLAB предположительно действительно успешно использует эту процедуру, что я делаю не так? Я пытаюсь расшифровать, что делает Octave, но без особого успеха, поскольку он завернут в

#include <stdio.h>

extern void dgecon_(const char *norm, const int *n, const double *a, 
     const int *lda, const double *anorm, double *rcond, double *work, 
     int *iwork, int *info, int len_norm);

int main()
{
    int i, info, n, lda;
    double anorm, rcond;

    double w[8] = { 0,0,0,0,0,0,0,0 };

    int iw[2] = { 0,0 };

    double x[4] = { 1, 1, 1, 0 };
    anorm = 2.0; /* maximum column sum, computed manually */
    n = 2;
    lda = 2;

    dgecon_("1", &n, x, &lda, &anorm, &rcond, w, iw, &info, 1);

    if (info != 0) fprintf(stderr, "failure with error %d\n", info);
    printf("%.5e\n", rcond);
    return 0;
}

Скомпилирован с помощью cc testdgecon.c -o testdgecon -llapack; ./testdgecon

7
задан Mikael Öhman 11 February 2011 в 21:38
поделиться