Changeset 995 in Sophya
- Timestamp:
- May 2, 2000, 5:48:24 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaProg/Tests/tsttminv.cc
r975 r995 1 1 // Test de l'inversion de matrice (cmv 14/04/00) 2 // Pb numeriques: dapax22 et daplxa115 3 // tsttminv -v 55,100,130,1000000000 -l 0 -a 1 4 5 // if defined COMPLEX , if not REAL 6 //#define COMPLEX 7 // if defined 32 bits precision, if not 64 bits 8 // #define PRECIS32 9 #define ALSO_LAPACK 10 2 11 #include "machdefs.h" 3 12 #include <iostream.h> … … 12 21 #include "srandgen.h" 13 22 14 // if defined COMPLEX , if not REAL 15 # define COMPLEX16 // if defined 32 bits precision, if not 64 bits 17 // #define PRECIS32 23 #ifdef ALSO_LAPACK 24 #include "intflapack.h" 25 #endif 26 18 27 19 28 #if defined(COMPLEX) … … 79 88 //-- Initialization arrays 80 89 SophyaInit(); 90 #ifdef ALSO_LAPACK 91 BaseArray::SetDefaultMemoryMapping(BaseArray::FortranMemoryMapping); 92 #endif 81 93 82 94 //-- Definition arrays … … 85 97 TMatrix< TYPE > AiA(N,N); 86 98 TMatrix< TYPE > B(N,N); 87 TMatrix< TYPE > C(N,N);99 TMatrix< TYPE > Adum(N,N); 88 100 TVector< int > Vind(N*N); 89 101 A.Show(); … … 94 106 AiA = (TYPE) 0; 95 107 B = (TYPE) 0; 96 C= (TYPE) 0;108 Adum = (TYPE) 0; 97 109 BaseArray::SetMaxPrint(nprline*N,0); 98 110 … … 122 134 #endif 123 135 cout<<"Nombre de valeurs BIG reelles = "<<nbr<<", imaginaires = "<<nbi<<endl; 136 Adum = A; 124 137 125 138 //-- Print matrice A … … 154 167 cout<<"Ecart maximum par rapport a 0 hors diagonale = "<<vmax<<endl; 155 168 169 //////////////////////////////////// 170 ///////// Test avec Lapack ///////// 171 //////////////////////////////////// 172 #ifdef ALSO_LAPACK 173 174 cout<<endl<<"LAPACK Cross-Check"<<endl; 175 InvA = IdentityMatrix(1.,N); 176 LapackLinSolve(Adum,InvA); 177 AiA = A * InvA; 178 vmax=-1.; 179 for(i=0;i<N;i++) { 180 double absv = ABS_VAL( 1. - AiA(i,i) ); 181 if( absv > vmax ) vmax = absv; 182 } 183 cout<<"Ecart maximum par rapport a 1 sur diagonale = "<<vmax<<endl; 184 vmax = -1.; 185 for(i=0;i<N;i++) for(j=0;j<N;j++) { 186 if( i == j ) continue; 187 double absv = ABS_VAL( AiA(i,j) ); 188 if( absv > vmax ) vmax = absv; 189 } 190 cout<<"Ecart maximum par rapport a 0 hors diagonale = "<<vmax<<endl; 191 192 #endif 193 156 194 exit(0); 157 195 }
Note:
See TracChangeset
for help on using the changeset viewer.