转自http://www.cs.rochester.edu/~bh/cs400/using_lapack.html
Since many of you don't know how to use CLAPACK and have to turn to MATLAB, which, BTW, is just a pretty wrapper of LAPACK, I put together this small page to explain things a little. When I say CLAPACK, I mean LAPACK most of the time. The former is a f2c'ed version of the latter.
Naming conventions of CLAPACK routines
CLAPACK routines have names of the form XYYZZZ. The first letter X indicates the data type the routine is expecting. The following table shows the mapping.
S | Real, the same as float in C |
D | Double precision, the same as double in C |
C | Complex |
Z | Double complex |
Routines to solve Ax=b type linear systems
We'll be using simple drivers or least square drivers for double type general matrices, so the names of the routines are (or start with) either DGESV or DGELS. The C-prototype of DGESV isNotice that all parameters are passed by reference. That's the good old Fortran way. The meanings of the parameters are:
void dgesv_(const int *N, const int *nrhs, double *A, const int *lda, int
*ipiv, double *b, const int *ldb, int *info);
N | number of columns of A |
nrhs | number of columns of b, usually 1 |
lda | number of rows (Leading Dimension of A) of A |
ipiv | pivot indices |
ldb | number of rows of b |
You can guess what the parameters are and check the manual for details.
void dgels_(const char *trans, const int *M, const int *N, const int *nrhs,
double *A, const int *lda, double *b, const int *ldb, double *work, const
int * lwork, int *info);
Routines doing SVD
You might need to do SVD (singular value decomposition) at certain moment. The routines doing SVD are XGESVD. The C prototype of dgesvd_ is
dgesvd_(const char* jobu, const char* jobvt, const int* M, const int* N,
double* A, const int* lda, double* S, double* U, const int* ldu,
double* VT, const int* ldvt, double* work,const int* lwork, const
int* info);
Sample code
|