00001 #ifndef TNT_LAPACK_HPP
00002 #define TNT_LAPACK_HPP
00003
00004 extern "C"
00005 {
00006 #include "f2c.h"
00007 #include "clapack.h"
00008 }
00009
00010
00027 namespace TNT
00028 {
00029
00030 Fortran_Array2D<double> Lapack_LinearSolve( const Fortran_Array2D<double> &A,
00031 const Fortran_Array2D<double> &B)
00032 {
00033
00034 integer m = A.dim1();
00035 integer n = A.dim2();
00036
00037 if (m != n)
00038 return Fortran_Array2D<double>();
00039
00040 integer nrhs = B.dim2();
00041
00042 if (n != B.dim1())
00043 return Fortran_Array2D<double>();
00044
00045
00046 Fortran_Array2D<double> X(B.copy());
00047 Fortran_Array2D<double> lu(A.copy());
00048 Fortran_Array1D<integer> ipiv(m, integer(0));
00049
00050 integer info=0;
00051
00052 dgesv_( &n, &nrhs, &lu(1,1), &m, &ipiv(1), &X(1,1), &n, &info);
00053
00054 return X;
00055 }
00056
00057
00058
00059 }
00060
00061
00062 #endif
00063
00064