#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