Exemple d'appel de la routine DGTSV en C

#include <stdio.h>
#define NMAX 1000

extern void dgtsv_(int *, int *, 
                   double *, double *, double *, double *, 
                   int *, int *);

void main()
{
        int i, n=10, one=1, info;
        double dl[NMAX-1],d[NMAX],du[NMAX-1],b[NMAX];
/*
        initialisations
*/
        for (i=0;i<n-1;i++) {
          dl[i]        =-1.;
          d[i]         = 2.;
          du[i]        =-1.;
          b[i]         = 1.; 
        }
        d[n-1]        =2.;
        b[n-1]        =1.;
/*
        appel de DGTSV (LAPACK)
        tous les parametres sont passes par adresse en fortran
*/
        dgtsv_(&n,&one,dl,d,du,b,&n,&info);
/*
        resultats
*/
        if (info==0) {
         for (i=0;i<n;i++) {
           printf(" i %d b(i) %le erreur %le \n",
                          i,b[i],b[i]-(i+1)*(n+1-i-1)/2.);

         }
        }

}
Voilà le résultat du programme :

 i 0 b(i) 5.000000e+00 erreur -8.881784e-16 
 i 1 b(i) 9.000000e+00 erreur -1.776357e-15 
 i 2 b(i) 1.200000e+01 erreur -1.776357e-15 
 i 3 b(i) 1.400000e+01 erreur 0.000000e+00 
 i 4 b(i) 1.500000e+01 erreur 0.000000e+00 
 i 5 b(i) 1.500000e+01 erreur 1.776357e-15 
 i 6 b(i) 1.400000e+01 erreur 0.000000e+00 
 i 7 b(i) 1.200000e+01 erreur 0.000000e+00 
 i 8 b(i) 9.000000e+00 erreur 0.000000e+00 
 i 9 b(i) 5.000000e+00 erreur 0.000000e+00

EPFL-IACS-ASN