当前位置:文档之家› 线性代数

线性代数

线性代数线性代数计算库使用BLAS、LAPACK、ATLAS1和cpplapack2库。

BLAS和LAPACK这两个库有很多函数,满足通常对线性代数的需求。

常见参数:trans: 转置标志m: 行数n: 列数alpha: 系数beta: 系数A、B:矩阵(数组)lda、ldb: leading dimension of A、B。

incx、incy: 增量x、y: 向量work, lwork, ipiv: 计算过程中需要的临时空间info: 返回信息:向量与矩阵相乘dgemv(trans,m,n,alpha,A,lda,x,incx,beta,y,incy)计算y:=alpha*A*x+beta*y,或者y:=alpha*A’*x+beta*y矩阵与矩阵相乘dgemm(transa,transb,m,n,k,alpha,A,lda,B,ldb,beta,C,ldc)计算 C:=alpha*op(A)*op(B)+beta*C,其中 op(X)表示 x 和x’ 中的一个LU 分解dgetrf(m,n,A,lda,ipiv,info)对矩阵A进行LU分解,A=P*L*U其中 P 是置换矩阵,L 是对角线为1的下三角矩阵U是上三角矩阵QR 分解dgeqr2(m,n,A,lda,tau,work,info)对矩阵 A 进行 QR 分解, A=Q*R Q 是正交矩阵,R 是上三角矩阵矩阵求逆先dgetrf(m,n,A,lda,ipiv,info) LU分解再dgetri(n,A,lda,iniv,work,lwork,info)通过 inv(A)*L=inv(U) 解出 inv(A) ;还可通过解方程组 A*X=I,I为单位阵,来求A的逆参见“求解线性方程”特征值与特征向量dgeev(jobvl,jobvr,n,A,lda,wr,wi,vl,ldvl,vr,ldvr,work,lwork,info)右特征向量 v(j) 满足: A*v(j)=lambda(j)*v(j)其中 lambda(j) 是特征值左特征向量 u(j) 满足: u(j)**H*A=lambda(j)*u(j)**H其中 u(j)**H 是 u(j) 的共轭变换SVD 分解dgesvd(jobu,jobvt,m,n,A,lda,S,U,ldu,vt,ldvt,work,lwork,info)其中 A=U*SIGMA*transpose(V)U,V是矩阵 A 的左右奇异值向量,SIGMA是主对角线元素不为0,其余为0的矩阵其对角线元素是A的奇异值。

求解线性方程先dgetrf(m,n,A,lda,ipiv,info) LU分解A=P*L*U再dgesv(n,nrhs,A,lda,ipiv,B,ldb,info)计算 A*X=B最小二乘算法1.一般最小二乘dgels(trans,m,n,nrhs,A,lda,B,ldb,work,lwork,info)如果trans=’N’,m>=n:解 minimize||B-A*X||;如果trans=’N’,m<n:解 A*X=B;如果trans=’T’,m>=n:解 A**T*X=B;如果trans=’T’,m<n:解 minimize||B-A**T*X||;2.极小化范数最小二乘dgelsd(m,n,nrhs,A,lda,B,ldb,S,rcond,rank,work,lwork,iwork,info) minimize 2-norm(| b - A*x |)3.dgelss(m,n,nrhs,A,lda,B,ldb,S,rcond,rank,work,lwork,info)minimize 2-norm(| b - A*x |)4.dgelsx(m,n,nrhs,A,lda,B,ldb,jpvt,rcond,rank,work,info) minimize||A*X-B|5.dgelsy(m,n,nrhs,A,lda,B,ldb,jpvt,rcond,rank,work,lwork,info) minimize||A*X-B||条件数dgecon(norm,n,A,lda,anrom,rcond,work,iwork,info) rcond=1/(norm(A)*norm(inv(A)))cpplapack由于BLAS和LAPACK的每个函数的参数都很多,传递起来比较麻烦,有很多包都实现了对LAPACK和BLAS的封装,cpplapack是其中一个,编译的时候需要BLAS和LAPACK库支持。

开发组使用cpplapack并对其进行了补充。

cpplapack库模型中常用的类dgematrix(矩阵),dcovector(列向量)和drovector(行向量)类名:dgematrixdgematrix成员变量变量名变量类型变量描述m public long const矩阵行数n public long const矩阵列数array public double *const一维数组储存矩阵数据(列优先原则)darray public double**const 二维数组储存矩阵数据M private long矩阵行数N private long矩阵列数Array private double*一维数组储存矩阵数据(列优先原则)Darray private double**二维数组储存矩阵数据函数函数名函数返回类型函数描述dgematrix ()构造函数dgematrix (const dgematrix &)复制构造函数dgematrix(const long &, constlong &)带参数的构造函数clear ()void清空矩阵中所有的数据,并且收回矩阵所占的内存空间zero ()void将矩阵中的所有元素都赋值为0.0 identity ()void将矩阵变成一个单位阵chsign ()void将矩阵中的数据全变为它的相反数copy (const dgematrix &)void将参数矩阵赋值给原矩阵resize (const long &, const long &)void重新为矩阵在内存中开辟空间dgesv (dcovector &)long解决A*x=ydgels (dcovector &)long普通最小二乘dgeev(std::vector< double > &, std::vector< double > &, std::vector< dcovector> &, std::vector< dcovector > &)long求右特征值和右特征向量dgesvd(dcovector&, dgematrix long SVD分解&, dgematrix &)operator= (const dgematrix &)dgematrix & 赋值运算符operator+= (const dgematrix &)dgematrix & 矩阵与矩阵加法运算符operator-= (const dgematrix &)dgematrix & 矩阵与矩阵减法运算符operator *= (const dgematrix &)dgematrix & 矩阵与矩阵乘法运算符operator *= (const double &)dgematrix & 矩阵与单个值点乘运算符operator/= (const double &)dgematrix & 矩阵与单个值点除运算符t (const dgematrix &)_dgematrix矩阵转置i (const dgematrix &)_dgematrix矩阵求逆idamax(long &, long &, const dgematrix &)void返回矩阵的数值中绝对值最大的元素所在的行和列damax (const dgematrix &)double返回矩阵中数值绝对值的最大值operator+(const dgematrix&, const dgematrix &)_dgematrix矩阵与矩阵加法运算符operator-(const dgematrix&, const dgematrix &)_dgematrix矩阵与矩阵减法运算符operator *(const dgematrix&, const dgematrix &)_dgematrix矩阵与矩阵乘法运算符operator *(const dgematrix&, const dcovector &)_dcovector矩阵与列向量乘法运算符operator *(const drovector&, const dgematrix &)_drovector行向量与矩阵乘法运算符operator *(const dgematrix&, const double &)_dgematrix矩阵与单个值点乘运算符operator *(const double &, const dgematrix &)_dgematrix单个值与矩阵点乘运算符operator/(const dgematrix&, const double &)_dgematrix矩阵与单个值点除运算符operator()(const long &, constlong &)double&矩阵的()运算符operator()(const long &, constlong &) constdouble矩阵的()运算符operator+ (const dgematrix &)const dgematrix& 矩阵与矩阵的加法运算符operator- (const dgematrix &)_dgematrix矩阵与矩阵的减法运算符set(const long &, const long &, const double &) const void将矩阵的第几行第几列的元素赋值为几swap (dgematrix &, dgematrix &)void两个矩阵互换_ (dgematrix &)_dgematrix将参数矩阵的值赋值给原矩阵,将参数矩阵所占空间清空~dgematrix ()析构函数,释放空间dgematrix新开发添加的方法函数名函数返回类型函数描述dgematrix(const long&, const long&, const double*)将一维数组赋值给矩阵的构造函数dgematrix(const long& _m, const long& _n, const double x)将矩阵的每个元素都赋值为x的构造函数dgematrix& operator=(const dgematrix将矩阵的每个元素double &t)都赋值为tvoid set_range(const long& _mbegin, const long& _mend, const double& d)void将矩阵一维数组下标从_mbegin到_mend全赋值为dvoid set(const long& _mbegin, const long& _mend, const double* array)void将数组元素(从0开始)赋值给矩阵一维数组从_mbegin到_mendset(const long& _mbegin, const long& _mend, const long& step, const double* array)void将数组元素(从0开始)赋值给矩阵一维数组从_mbegin到_mend,步长为stepsub_mat(long n, long m, dgematrix &x, std::vector<int> rows, std::vector<int> cols, dgematrix &y)void根据提供的行数,列数取出子矩阵diag_mat(int k, int *array, dgematrix &q)void将整型数组中的元素变换成一个对角阵(数组元素在对角线上)diag_mat(int k, double *array, dgematrix &q)void将实型数组中的元素变换成一个对角阵(数组元素在对角线上类名:dcovector(注:drovector 成员变量和成员方法跟dcovector一样)dcovector成员变量变量名变量类型变量描述l public long const列向量的行数array public double *const一维数组储存列向量的数据L private long列向量的行数Array private double*一维数组储存列向量的数据dcovector函数函数名函数返回类函数描述型dcovector ()构造函数dcovector (const dcovector &)复制构造函数dcovector (const long &)在内存中开辟空间的构造函数clear ()void清空列向量中所有的数据,并且收回列向量中所占的内存空间zero ()void将列向量中的所有元素都赋值为0.0 chsign ()void将列向量中的数据全变为它的相反数copy (const dcovector &)void将参数列向量赋值给原列向量resize (const long &)void重新为列向量在内存中开辟空间operator= (const dcovector &)dcovector & 赋值运算符operator+= (const dcovector &)dcovector & 列向量与列向量加法运算符operator-= (const dcovector &)dcovector & 列向量与列向量减法运算符operator *= (const double &)dcovector & 列向量与单个数值点乘运算符operator/= (const double &)dcovector & 列向量与单个值点除运算符t (const dcovector &)_drovector列向量转置idamax (const dcovector &)long列向量中绝对值最大的值对应的行数damax (const dcovector &)double返回列向量的数值中绝对值最大的元素swap (dcovector &, dcovector &)void两个列向量互相交换operator+ (const dcovector &)const dcovector&列向量与列向量加法运算符operator- (const dcovector &)_dcovector列向量与列向量减法运算符operator+(const dcovector&, const dcovector &)_dcovector列向量与列向量加法运算符operator-(const dcovector&, const dcovector &)_dcovector列向量与列向量减法运算符operator *(const dgematrix&, const dcovector &)_dcovector矩阵与列向量乘法运算符operator *(const dcovector&, const drovector &)_dgematrix行向量与列向量乘积运算符operator *(const double &, const dcovector &)_dcovector单个值与列向量点乘运算符operator *(const dcovector&, const double &)_dcovector列向量与单个值点乘运算符operator *(const drovector&, const dcovector &)double 行向量与列向量乘积运算符_ (dcovector &)_dcovector将参数列向量赋值给原列向量,将参数列向量在内存中清除operator/(const dcovector&, const double &)double列向量与单个值除法运算符operator() (const long &)double&列向量的()运算符operator() (const long &) const double列向量的()运算符set (const long &, const double &) const void列向量中的每个元素赋值为常数~dcovector ()析构函数,释放空间dcovector新开发添加的方法函数名函数返回类型函数描述dcovector(const long&, const double*)将长度为几的数组赋值给列向量的构造函数dcovector& linspace(const double& a, const double& b, const long& n)dcovector将a,b之间均分成n-1份,n个数据赋值给列向量drovector新开发添加的方法函数名函数返回类型函数描述drovector(const long&, const double*)将长度为几的数组赋值给行向量的构造函数drovector& linspace(const double& a, const double& b, const long& n)drovector将a,b之间均分成n-1份,n个数据赋值给行向量描述[←1][←2]/。

相关主题