为方便线性代数运算,现将LAPACK中的函数介绍如下:
1.函数的命名规则:
LAPACK里的每个函数名已经说明了该函数的使用规则。所有函数都是以XYYZZZ的形式命名,对于某些函数,没有第六个字符,只是XYYZZ的形式。
第一个字母X代表以下的数据类型:
S | REAL,单精度实数 |
D | DOUBLE PRECISION,双精度实数 |
C | COMPLEX,单精度复数 |
Z | COMPLEX*16 或 DOUBLE COMPLEX |
注:
在新版LAPACK中含有使用重复迭代法的函数DSGESV和ZCDESV。
头2个字母表示使用的精度:
DS | 输入数据是double双精度,算法使用单精度 |
ZC | 输入数据是complex*16,算法使用complex单精度复数 |
接下面两个字母YY代表数组的类型。
BD | bidiagonal,双对角矩阵 |
DI | diagonal,对角矩阵 |
GB | general band,一般带状矩阵 |
GE | general (i.e., unsymmetric, in some cases rectangular),一般情形(即非对称,在有些情形下为矩形) 字符串函数传参 |
GG | general matrices, generalized problem (i.e., a pair of general matrices),一般矩阵,广义问题(即一对一般矩阵) |
GT | general tridiagonal,一般三对角矩阵 |
HB | (complex) Hermitian band,(复数)厄尔米特带状阵 |
HE | (complex) Hermitian,(复数)厄尔米特矩阵 |
HG | upper Hessenberg matrix, generalized problem (i.e a Hessenberg and a triangular matrix),上海森伯格矩阵,广义问题(即一个海森伯格矩阵和一个三角矩阵) |
HP | (complex) Hermitian, packed storage,(复数)压缩储存的厄尔米特矩阵 |
HS | upper Hessenberg,上海森博格矩阵 |
OP | (real) orthogonal, packed storage,(实数)压缩储存的正交阵 |
OR | (real) orthogonal,(实数)正交阵 |
PB | symmetric or Hermitian positive definite band,对称或厄尔米特正定带状矩阵 |
PO | symmetric or Hermitian positive definite,对称或厄尔米特正定矩阵 |
PP | symmetric or Hermitian positive definite, packed storage,压缩储存的对称或厄尔米特正定矩阵 |
PT | symmetric or Hermitian positive definite tridiagonal,对称或厄尔米特正定三对角阵 |
SB | (real) symmetric band,(实数)对称带状阵 |
SP | symmetric, packed storage,压缩储存的对称阵 |
ST | (real) symmetric tridiagonal,(实数)对称三对角阵 |
SY | symmetric,对称阵 |
TB | triangular band,三角形带状矩阵 |
TG | triangular matrices, generalized problem (i.e., a pair of triangular matrices),三角形矩阵,广义问题(即一对三角形阵) |
TP | triangular, packed storage,压缩储存的三角形阵 |
TR | triangular (or in some cases quasi-triangular),三角形阵(在某些情形下为类三角形阵) |
TZ | trapezoidal,梯形阵 |
UN | (complex) unitary,(复数)酉矩阵 |
UP | (complex) unitary, packed storage,(复数)压缩储存的酉矩阵 |
最后三个字母ZZZ代表计算方法。比如,SGEBRD是一个单精度函数,用于把一个实数一般阵压缩为双对角阵(a bidiagonal reduction,即BRD)。
2.函数讲解
2.1 dgesv_()函数 用来求解对称矩阵问题,否则真的要出错!
int dgesv_(
integer *n,
integer *nrhs,
doublereal *a,
integer *lda,
integer *ipiv,
doublereal *b,
integer *ldb,
integer *info
);
从名字的意义上可以看出是用来解决双精度一般型的线性方程(组)的问题。
DGESV是用来求解实数的线性方程组AX=B的。A是N×N型矩阵,X和B是N×NRHS型矩阵。
参数介绍 :
N (input) INTEGER
. 线性方程组的个数,例如A矩阵的行数。N >= 0.
NRHS (input) INTEGER
右边矩阵的尺寸, 例如:B矩阵的列数. NRHS >= 0.
A (input/output) 双精度数组, 尺寸为LDA×N。
输入时为矩阵A的系数。
输出时, L和U是来自 A = P*L*U的因式分解;L对角线的元素不被存储。.
LDA (input) INTEGER
数组A的主尺寸 LDA >= max(1,N).
IPIV (output) INTEGER数组, 尺寸是N维。
The pivot indices that define the permutation matrix P;
row i of the matrix was interchanged with row IPIV(i).
B (input/output) 双精度数组, 尺寸为N×NRHS 。
输入时, 输入的是N×NRHS的B数组。
输出时, 如果 INFO = 0, 输出N×NRHS为数组,即为方程组的解。
LDB (input) INTEGER
B数组的主尺寸。 LDB >= max(1,N).
INFO (output) INTEGER
= 0: 成功退出。
< 0: 如果 INFO = -i, 第i各自变量是一个不可接受的数值。
> 0: 如果INFO = i, U(i,i) 为0。 因式分解已经完成,但是因式U是一个单 数,所以是不能够给出答案的。
与之对应的单精度方式为:sgesv_()方程,只是把双精度的化为单精度就可以,另外一个就是zgesv _()方程,它解的是复数形式。
2.2 dgeev_()
对于非对称矩阵特征向量密集复杂的问题应用此函数,此函数的工能是求特征值。
d表示double。
ge表示general,说明是普通矩阵,按照列主序存储。
ev表示eigenvector(猜测),表达的是函数的功能。
int dgeev_(
char *jobvl,
char *jobvr,
integer *n,
doublereal *a,
integer *lda,
doublereal *wr,
doublereal *wi,
doublereal *vl,
integer *ldvl,
doublereal *vr,
integer *ldvr,
doublereal *work,
integer *lwork,
integer *info
);
ZGEEV是用来求解N×N的非对称矩阵A,特征向量,或左面的特征向量或右边的特征向量是不对称的。
矩阵A的有特征向量满足:
A*V(j)= λ(j)*V(j); λ(j)是A的特征向量。
矩阵A的左特征向量满足:
u(j)**H * A = λ(j) * u(j)**H ;u(j)**H 表示的意思是u(j)的共轭转置。
参数介绍:
JOBVL (input) CHARACTER*1
= 'N': A的左特征向量没有被计算;
= 'V':A的左特征向量被计算了。
JOBVR (input) CHARACTER*1
= 'N': A的右特征向量没有被计算;
= 'V':A的右特征向量被计算了。
N (input) INTEGER
A矩阵的维数. N >= 0.
A (input/output) DOUBLE PRECISION数组, 尺寸是LDA×N。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论