您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > LAPACK函数介绍
为方便线性代数运算,现将LAPACK中的函数介绍如下:1.函数的命名规则:LAPACK里的每个函数名已经说明了该函数的使用规则。所有函数都是以XYYZZZ的形式命名,对于某些函数,没有第六个字符,只是XYYZZ的形式。第一个字母X代表以下的数据类型:SREAL,单精度实数DDOUBLEPRECISION,双精度实数CCOMPLEX,单精度复数ZCOMPLEX*16或DOUBLECOMPLEX注:在新版LAPACK中含有使用重复迭代法的函数DSGESV和ZCDESV。头2个字母表示使用的精度:DS输入数据是double双精度,算法使用单精度ZC输入数据是complex*16,算法使用complex单精度复数接下面两个字母YY代表数组的类型。BDbidiagonal,双对角矩阵DIdiagonal,对角矩阵GBgeneralband,一般带状矩阵GEgeneral(i.e.,unsymmetric,insomecasesrectangular),一般情形(即非对称,在有些情形下为矩形)GGgeneralmatrices,generalizedproblem(i.e.,apairofgeneralmatrices),一般矩阵,广义问题(即一对一般矩阵)GTgeneraltridiagonal,一般三对角矩阵HB(complex)Hermitianband,(复数)厄尔米特带状阵HE(complex)Hermitian,(复数)厄尔米特矩阵HGupperHessenbergmatrix,generalizedproblem(i.eaHessenbergandatriangularmatrix),上海森伯格矩阵,广义问题(即一个海森伯格矩阵和一个三角矩阵)HP(complex)Hermitian,packedstorage,(复数)压缩储存的厄尔米特矩阵HSupperHessenberg,上海森博格矩阵OP(real)orthogonal,packedstorage,(实数)压缩储存的正交阵OR(real)orthogonal,(实数)正交阵PBsymmetricorHermitianpositivedefiniteband,对称或厄尔米特正定带状矩阵POsymmetricorHermitianpositivedefinite,对称或厄尔米特正定矩阵PPsymmetricorHermitianpositivedefinite,packedstorage,压缩储存的对称或厄尔米特正定矩阵PTsymmetricorHermitianpositivedefinitetridiagonal,对称或厄尔米特正定三对角阵SB(real)symmetricband,(实数)对称带状阵SPsymmetric,packedstorage,压缩储存的对称阵ST(real)symmetrictridiagonal,(实数)对称三对角阵SYsymmetric,对称阵TBtriangularband,三角形带状矩阵TGtriangularmatrices,generalizedproblem(i.e.,apairoftriangularmatrices),三角形矩阵,广义问题(即一对三角形阵)TPtriangular,packedstorage,压缩储存的三角形阵TRtriangular(orinsomecasesquasi-triangular),三角形阵(在某些情形下为类三角形阵)TZtrapezoidal,梯形阵UN(complex)unitary,(复数)酉矩阵UP(complex)unitary,packedstorage,(复数)压缩储存的酉矩阵最后三个字母ZZZ代表计算方法。比如,SGEBRD是一个单精度函数,用于把一个实数一般阵压缩为双对角阵(abidiagonalreduction,即BRD)。2.函数讲解2.1dgesv_()函数用来求解对称矩阵问题,否则真的要出错!intdgesv_(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维。ThepivotindicesthatdefinethepermutationmatrixP;rowiofthematrixwasinterchangedwithrowIPIV(i).B(input/output)双精度数组,尺寸为N×NRHS。输入时,输入的是N×NRHS的B数组。输出时,如果INFO=0,输出N×NRHS为数组,即为方程组的解。LDB(input)INTEGERB数组的主尺寸。LDB=max(1,N).INFO(output)INTEGER=0:成功退出。0:如果INFO=-i,第i各自变量是一个不可接受的数值。0:如果INFO=i,U(i,i)为0。因式分解已经完成,但是因式U是一个单数,所以是不能够给出答案的。与之对应的单精度方式为:sgesv_()方程,只是把双精度的化为单精度就可以,另外一个就是zgesv_()方程,它解的是复数形式。2.2dgeev_()对于非对称矩阵特征向量密集复杂的问题应用此函数,此函数的工能是求特征值。d表示double。ge表示general,说明是普通矩阵,按照列主序存储。ev表示eigenvector(猜测),表达的是函数的功能。intdgeev_(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)INTEGERA矩阵的维数.N=0.A(input/output)DOUBLEPRECISION数组,尺寸是LDA×N。输入时,A是N×N输出时,A被覆盖重写。LDA(input)INTEGER矩阵A的主尺寸。LDA=max(1,N).WR(output)DOUBLEPRECISION数组,是N维的。可以这样分配空间:doublereal*wr=(doublereal*)malloc(sizeof(doublereal)*n);WI(output)DOUBLEPRECISION数组,是N维的。可以这样分配空间:doublereal*wi=(doublereal*)malloc(sizeof(doublereal)*n);WR和WI包含各自特征向量的实部和虚部分VL(output)DOUBLEPRECISION数组,尺寸为LDVL×Ndoublereal*vl=(doublereal*)malloc(sizeof(doublereal)*n*ldvl);如果JOBVL='V',左特征向量u(j)被存储oneafteranotherinthecolumnsofVL,inthesameorderastheireigenvalues.如果JOBVL='N',VL是不被引用的。如果第j特征向量是real,则u(j)=VL(:,j),thej-thcolumnofVL.Ifthej-thand(j+1)-steigenvaluesformacomplexconjugatepair,thenu(j)=VL(:,j)+i*VL(:,j+1)andu(j+1)=VL(:,j)-i*VL(:,j+1).LDVL(input)INTEGER矩阵VL的主尺寸。LDVL=1;如果JOBVL='V',LDVL=N.VR(output)DOUBLEPRECISION数组,尺寸为LDVR×Ndoublereal*vr=(doublereal*)malloc(sizeof(doublereal)*n*ldvr);如果JOBVR='V',有特征向量v(j)arestoredoneafteranotherinthecolumnsofVR,inthesameorderastheireigenvalues.IfJOBVR='N',VRisnotreferenced.Ifthej-theigenvalueisreal,thenv(j)=VR(:,j),thej-thcolumnofVR.Ifthej-thand(j+1)-steigenvaluesformacomplexconjugatepair,thenv(j)=VR(:,j)+i*VR(:,j+1)andv(j+1)=VR(:,j)-i*VR(:,j+1).LDVR(input)INTEGER矩阵VR的主尺寸.LDVR=1;如果JOBVR='V',LDVR=N.WORK(workspace/output)DOUBLEPRECISIONarray,尺寸(MAX(1,LWORK))输出时,如果INFO=0,WORK(1)返回LWORK.doublereal*work=(doublereal*)malloc(sizeof(doublereal)*lwork);LWORK(input)INTEGERWORK的尺寸.LWORK=max(1,3*N),如果JOBVL='V'或者JOBVR='V',LWORK=4*N.为了性能,LWORK通常会大一点。如果LWORK=-1,thenaworkspacequeryisassumed;theroutineonlycalculatestheoptimalsizeoftheWORKarray,returnsthisvalueasthefirstentryoftheWORKarray,andnoerrormessagerelatedtoLWORKisissuedbyXERBLA.INFO(output)INTEGER=0:成功退出0:如果INFO=-i,第i各自变量是一个不可接受的数值。0:如果INFO=i,QR算法没能够得出所有的特征向量,没有被计算出的特征向量元素i+1:NofWR和WI包含有融合的特征值。.一个例子:采用Matlab来验算:可见计算结果是真确的!网上查找到的一个例子:CLAPACK的dgeev_求特征值从这一个函数也可以认识LAPACK的一些习惯问题,进而可以使用其他的函数。》》特征值和特征向量我们平时使用的一般都是右特征向量,定义为:A*alpha=lamda*alpha另外还有一种定义的左特征向量:beta*A=lamda*beta而该函数被设
本文标题:LAPACK函数介绍
链接地址:https://www.777doc.com/doc-4525262 .html