logo资料库

Lapack中文帮助手册.pdf

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 dccdccdccdcc 提供提供提供提供 LAPACK 1.1.1.1.LAPACK LAPACK LAPACK 简介 1.11.11.11.1 概述 LAPACK API 支持两种形式:一是标准的 ANSI C;另一种是标准的 FORTRAN77。LAPACK 是开源的,官方网站是:http://www.netlib.org/lapack/。 每个 LAPACK 例程都有四个形式,具体描述如下: 例程前缀 S D C Z 精度 REAL 精度 REAL DOUBLE 精度 COMPLEX 单精度 COMPLEX 双精度 下面例程是经过优化的。 DGETRF 对一般矩阵进行 LU 分解。 DGETRS 线性方程组求解。 DGETRI 用 LU 分解求解一般矩阵的逆矩阵。 DGEQRF 对一般矩阵进行 QR 分解。 DGELQF 对一般矩阵进行 LQ 分解。 DPOTRF 对对称正定矩阵进行 Cholesky 分解。 DPOTRS 对线性方程组(对称正定)求解。 1.21.21.21.2 函数的命名规则: LAPACK 里的每个函数名已经说明了该函数的使用规则。所有函数都是以 XYYZZZ 的形 式命名,对于某些函数,没有第六个字符,只是 XYYZZ 的形式。 第一个字母 X 代表以下的数据类型: S D C Z DS ZC REAL,单精度实数 DOUBLE PRECISION,双精度实数 COMPLEX,单精度复数 COMPLEX*16 或 DOUBLE COMPLEX 注: 在新版 LAPACK 中含有使用重复迭代法的函数 DSGESV 和 ZCDESV。 头 2 个字母表示使用的精度: 输入数据是 double 双精度,算法使用单精度 输入数据是 complex*16,算法使用 complex 单精度复数 接下面两个字母 YY 代表数组的类型。 BD DI GB GE GG GT HB HE bidiagonal,双对角矩阵 diagonal,对角矩阵 general band,一般带状矩阵 general (i.e., unsymmetric, in some cases rectangular),一般情形(即非对称, 在有些情形下为矩形) general matrices, generalized problem (i.e., a pair of general matrices),一般矩 阵,广义问题(即一对一般矩阵) general tridiagonal,一般三对角矩阵 (complex) Hermitian band,(复数)厄尔米特带状阵 (complex) Hermitian,(复数)厄尔米特矩阵
输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 dccdccdccdcc 提供提供提供提供 upper Hessenberg matrix, generalized problem (i.e a Hessenberg and a triangular matrix),上海森伯格矩阵,广义问题(即一个海森伯格矩阵和一 个三角矩阵) (complex) Hermitian, packed storage,(复数)压缩储存的厄尔米特矩阵 upper Hessenberg,上海森博格矩阵 (real) orthogonal, packed storage,(实数)压缩储存的正交阵 (real) orthogonal,(实数)正交阵 symmetric or Hermitian positive definite band,对称或厄尔米特正定带状矩 阵 symmetric or Hermitian positive definite,对称或厄尔米特正定矩阵 symmetric or Hermitian positive definite, packed storage,压缩储存的对称或 厄尔米特正定矩阵 symmetric or Hermitian positive definite tridiagonal,对称或厄尔米特正定三 对角阵 (real) symmetric band,(实数)对称带状阵 symmetric, packed storage,压缩储存的对称阵 (real) symmetric tridiagonal,(实数)对称三对角阵 symmetric,对称阵 triangular band,三角形带状矩阵 triangular matrices, generalized problem (i.e., a pair of triangular matrices),三 角形矩阵,广义问题(即一对三角形阵) triangular, packed storage,压缩储存的三角形阵 triangular (or in some cases quasi-triangular),三角形阵(在某些情形下为类 三角形阵) trapezoidal,梯形阵 (complex) unitary,(复数)酉矩阵 (complex) unitary, packed storage,(复数)压缩储存的酉矩阵 HG HP HS OP OR PB PO PP PT SB SP ST SY TB TG TP TR TZ UN UP 最后三个字母 ZZZ 代表计算方法。比如,SGEBRD 是一个单精度函数,用于把一个实 数一般阵压缩为双对角阵(a bidiagonal reduction,即 BRD)。 LAPACK 2.2.2.2.LAPACK LAPACK LAPACK 详解 本部分以 SSSS 系列例程为例,本部分共有 334334334334 个例程(3.0(3.0(3.0(3.0 版本))))。其他的就大家参考本部分就 FORTRAN 版本的,CCCC 版本的在以后做介绍,或者参照本部分亦可以。 FORTRAN FORTRAN 可以了。此次先介绍 FORTRAN SBDSDC 2.12.12.12.1 SBDSDC SBDSDC SBDSDC 子程序 原型: LDVT, Q,Q,Q,Q, IQ, LDVT, LDU, VT,VT,VT,VT, LDVT, LDU, COMPQ, N,N,N,N, D,D,D,D, E,E,E,E, U,U,U,U, LDU, COMPQ, UPLO, SBDSDC( SUBROUTINE IQ,IQ,IQ, SUBROUTINE SBDSDC( UPLO, COMPQ, LDU, LDVT, UPLO, COMPQ, SBDSDC( UPLO, SUBROUTINE SBDSDC( SUBROUTINE $$$$ IWORK, WORK, IWORK, INFOINFOINFOINFO )))) WORK, IWORK, WORK, IWORK, WORK, 例程说明: SBDSDC 是对 real 型的 N×N 阶对角矩阵 B(B = U * S * VT)进行 SVD 计算。 【注:奇异值分解 (sigularvaluedecomposition,SVD) 是一种正交矩阵分解法;SVD是最可靠的分解法,但 是它比QR 分解(QR分解法是将矩阵分解成一个正规正交矩阵与上三角形矩阵。)法要花上近十倍的计算 时间。】 参数说明: UPLO 输入参数(CHARACTER*1) = ‘U’ :B 是上对角矩阵(upper bidiagonal)
输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 dccdccdccdcc 提供提供提供提供 = ‘L’ :B 是下对角矩阵(lower bidiagonal); COMPQ 输入参数(CHARACTER*1) 指定是否奇异向量按照如下方式计算: = ‘N’ 只计算奇异值 = ‘P’ 计算奇异值和紧式(compact form)奇异向量 = ‘I’ 计算奇异值和奇异向量 输入参数(INTEGER) B 矩阵的秩。N>=0。 输入/输出参数,real 型数组,dimension (N) 输入时,为 B 矩阵的 N 个对角元素 输出时,如果 INFO = 0,则为 B 矩阵的奇异值。 输入输出参数,real 型数组,dimension (N) 输入时,E 所包含的非对角矩阵元素, 输出时,E 被破坏。 输出参数,real 型数组,dimension (LDU,N) 如果 COMPQ = ‘I’ ,输出时并且 INFO = 0,U 接受对角矩阵的左奇异向量,对于 其他的 COMPQ 数值,U 不被采用。 N D E U LDU 输入参数(INTEGERT) VT 决定 U 数组的尺寸,LDU>=1 若果想得到奇异向量,LDU>=max(1,N)。 输出参数,real 型数组,dimension (LDVT,N) 如果 COMPQ = ‘I’ ,输出时并且 INFO = 0,VT 接受对角矩阵的右奇异向量,对 于其他的 COMPQ 数值,VT 不被采用。 LDVT 输入参数,(INTEGER) 决定 VT 数组的尺寸,LDVT>=1 若果想得到奇异向量,LDVT>=max(1,N)。 输出参数,real 型数组,dimension (LDQ) 如果 COMPQ = 'P' :输出时,如果 INFO = 0,Q 和 IQ 紧式存储左右奇异向量, 需要 O(N log N) 的空间代替 2*N**2。 对于其他的 COMPQ 值,Q 是不被使用的。 输出参数 real 型数组,dimension (LDIQ) 其他的类似于 Q。 Q IQ WORK real 型数组,dimension (LWORK) 如果, COMPQ = 'N' 则 LWORK >= (4 * N)。 如果, COMPQ = 'P' 则 LWORK >= (6 * N)。 如果, COMPQ = 'I' 则 LWORK >= (3 * N**2 + 4 * N)。 IWORK INTEGER 数组,dimension (8*N) INFO 输出参数,INTEGER = 0,成功退出, <0,如果 INFO = -i,则第 i 号参数值是不被接受的 >0,算法得不到奇异值。
参数介绍完了,我们来写个程序测试一下 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 dccdccdccdcc 提供提供提供提供 当然我们不知道这样对不对。所以我们还是请出 matlab 来验证一下吧。 上个例子是一个特殊情况,那其他情况呢?
输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 dccdccdccdcc 提供提供提供提供 2.22.22.22.2 SBDSQR SBDSQR SBDSQR SBDSQR 子程序 原型: LDVT, NCC,NCC,NCC, D,D,D,D, E,E,E,E, VT,VT,VT,VT, LDVT, LDVT, U,U,U,U, LDVT, NRU,NRU,NRU, NCC, NCVT, UPLO, N,N,N,N, NCVT, UPLO, SBDSQR( SUBROUTINE SUBROUTINE SBDSQR( UPLO, NCVT, SBDSQR( UPLO, SUBROUTINE SBDSQR( SUBROUTINE NCVT, NRU, LDU, LDU, C,C,C,C, LDC, LDC, WORK, WORK, INFOINFOINFOINFO )))) LDU, LDC, WORK, LDU, LDC, WORK, $$$$ 例程说明: SBDSQR 是对 real 型的 N×N 阶对角矩阵 B(B = Q * S * PT(PT 表示 P 的转置矩阵))进行 SVD 计算。S 是非负数的对角矩阵(B 的奇异值),Q 和 P 是正交矩阵。例程计算 S,选择 性的计算 U * Q, PT * VT, 或者 QT* C。 参数说明: UPLO 输入参数(CHARACTER*1) = ‘U’ :B 是上对角矩阵(upper bidiagonal) = ‘L’ :B 是下对角矩阵(lower bidiagonal); 输入参数(INTEGER) N
输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 dccdccdccdcc 提供提供提供提供 B 矩阵的秩。N>=0。 NCVT 输入参数 INTEGER VT 的列的维数,NCVT>=0。 NRU 输入参数 INTEGER U 的行的维数,NRU>=0。 NCC 输入参数 INTEGER D E VT C 的列的维数,NCC.=0。 输入/输出参数,real 型数组,dimension (N) 输入时,为 B 矩阵的 N 各对角元素 输出时,如果 INFO = 0,则为 B 矩阵降序的奇异值。 输入/输出参数,real 型数组,dimension (N) 输入时,E 包含了要进行 SVD 的矩阵非对角元。 输入/输出参数,real 型数组,dimension (LDVT, NCVT) 输入时,为 N×NCVT 的矩阵, 输出时,VT 被重写为 PT*VT。 如果 NCVT=0,VT 不被使用。 LDVT 输入参数 INTEGER U VT 数组的维数。 如果 NCVT > 0,则 LDVT >= max(1,N); 如果 NCVT = 0.则 LDVT >= 1 输出参数,real 型数组,dimension (LDU,N) 输入时,是 NRU×N 维矩阵, 输出时,U 被重写为 U*Q 如果 NRU = 0,则 U 不被使用。 LDU 输入参数 INTEGER C LDC U 的维数,LDU >= max(1,NRU)。 输入/输出参数,real 型数组,dimension (LDC, NCC) 输入时,为 N×NCC 维数组 输出时,C 被重写为 QT*C 如果 NCC = 0,C 则不被使用。 输入参数 INTEGER C 的维数, 如果 NCC>0,则 LDC >= max(1,N), 如果 NCC=0,则 LDC >=1 WORK (workspace) real 型数组,dimension (4*N) INFO 输出参数,INTEGER = 0,成功退出, <0,如果 INFO = -i,则第 i 号参数值是不被接受的 >0,算法得不到奇异值。如果 INFO = i, E 的第 i 号元素没转换为 0。 2.32.32.32.3 SGEES SGEES SGEES SGEES 子程序 原型: SDIM, LDA, SELECT, N,N,N,N, A,A,A,A, LDA, SELECT, SORT, JOBVS, SGEES( SUBROUTINE SDIM, WR,WR,WR,WR, WI,WI,WI,WI, SUBROUTINE SGEES( JOBVS, SORT, SELECT, LDA, SDIM, LDA, SDIM, SORT, SELECT, JOBVS, SORT, SGEES( JOBVS, SUBROUTINE SGEES( SUBROUTINE
输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 dccdccdccdcc 提供提供提供提供 $$$$ BWORK, LWORK, WORK, LDVS, VS,VS,VS,VS, LDVS, BWORK, INFOINFOINFOINFO )))) LDVS, WORK, LWORK, BWORK, LWORK, BWORK, WORK, LWORK, LDVS, WORK, = 'N': 不计算因式分解的向量; = 'V': 计算因式分解的向量。 决定数组 A 的尺寸. LDA >= max(1,N). 指定特征值是否构成在对角矩阵的分解量中。 = 'N': 特征值不被指定; = 'S': 特征值被指定 SELECT must be declared EXTERNAL in the calling subroutine. 如果 SORT = 'S', SELECT 被用来选择特征值储存在分解形式的顶部。 如果 SORT = 'N', SELECT 不被使用 如果 SELECT(WR(j),WI(j))是 true,则特征值 WR(j)+sqrt(-1)*WI(j) 被选择 输入参数 INTEGER 矩阵 A 的维数. N >= 0. 输////入输出参数 REAL 数组, dimension (LDA,N) 输入时, A[N][N]. 输出时, T. 例程说明: SGEES 例程计算 N×N real 型非对称矩阵 A 的特征值、real 型的矩阵 T(上三角矩阵),并 且选择的计算向量 Z,使 A = Z*T*(Z**T)成立。 参数说明: JOBVS 输入参数 CHARACTER*1 * * * SORT 输入参数 CHARACTER*1 * * * * SELECT 输入参数 LOGICAL FUNCTION of two REAL arguments * * * * * N * * A * * * LDA 输入参数 INTEGER * * SDIM 输出参数 INTEGER * * * * WR * WI * VS * * * LDVS 输入参数 INTEGER * * * WORK * * LWORK 输入参数 INTEGER * * * BWORK * * 如果 SORT = 'N', 则 SDIM = 0. 如果 SORT = 'S', 则 SDIM = 特征值的个数 (after sorting) SELECT 必须是 true. 输出参数 REAL 数组 dimension (N) 输出参数 REAL 数组 dimension (N) 输出参数 REAL 数组, dimension (LDVS,N) 如果 JOBVS = 'V', VS c 正交矩阵 Z 如果 JOBVS = 'N', VS 不被使用 数组 WORK 的尺寸. LWORK >= max(1,3*N). 为了得到较好的结果, LWORK 必须要大。 (workspace) LOGICAL 数组, dimension (N) 如果 SORT = 'N',不被使用。 决定数组 VS 的维数. LDVS >= 1; 如果 JOBVS = 'V',则 LDVS >= N. (workspace/output) REAL 数组, dimension (LWORK) 输出时, if INFO = 0, WORK(1) 包含最优的 LWORK.
输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 输电与有限元技术论坛 dccdccdccdcc 提供提供提供提供 * * * * * INFO 输出参数 INTEGER = 0:成功退出 < 0: 如果 INFO = -i, 第 i 号元素不被接受。 > 0:如果 INFO = i, 并且 i <= N: QR 算法计算失败 SGEEV 2.42.42.42.4 SGEEV SGEEV SGEEV 程序 原型: JOBVR, N,N,N,N, A,A,A,A, LDA, LDVL, LDA, WR,WR,WR,WR, WI,WI,WI,WI, VL,VL,VL,VL, LDVL, LDA, JOBVR, JOBVL, SGEEV( SUBROUTINE LDVL, VR,VR,VR,VR, JOBVR, JOBVL, SUBROUTINE SGEEV( LDA, LDVL, JOBVL, JOBVR, SGEEV( JOBVL, SUBROUTINE SGEEV( SUBROUTINE LWORK, LDVR, WORK, LWORK, INFOINFOINFOINFO )))) LDVR, WORK, LWORK, LDVR, LDVR, WORK, WORK, LWORK, $$$$ 例程说明: SGEEV 计算非对称矩阵 A(N*N)的特征值,选择性的左和/或右计算特征向量。A 矩阵的 右特征向量满足: A*V(j) = λ(j) *V(j),其中λ(j)是特征值。 A 矩阵的左特征向量满足: u(j)**H*A = λ(j) *u(j)**H,其中 u(j)**H 为 u(j)的共轭变换。 参数说明: JOBVL 输入参数,CHARACTER*1 = 'N': left eigenvectors of A are not computed; = 'V': left eigenvectors of A are computed. JOBVR 输入参数 CHARACTER*1 = 'N': right eigenvectors of A are not computed; = 'V': right eigenvectors of A are computed. N A 输入参数 INTEGER The order of the matrix A. N >= 0. 输入////输出参数 REAL array, dimension (LDA,N) On entry, the N-by-N matrix A. On exit, A has been overwritten. LDA 输入参数 INTEGER The leading dimension of the array A. LDA >= max(1,N). WR WI 输出参数 REAL array, dimension (N) 输出参数 REAL array, dimension (N) WR and WI contain the real and imaginary parts, respectively, of the computed eigenvalues. Complex conjugate pairs of eigenvalues appear consecutively
分享到:
收藏