首页/文章/ 详情

共轭梯度法解线性方程组

6月前浏览920

本文摘要(由AI生成):

共轭梯度法是一种迭代方法,适用于求解系数矩阵为对称正定的方程组,特别适合有限元求解。其原理是通过找到n个两两共轭的共轭方向,每次沿一个方向优化得到极小值,最终求得n维问题的最优解。该方法克服了梯度下降法收敛慢的缺点,又避免了牛顿法所需的二阶导数信息存储和计算。共轭梯度法适合并行计算,并在n维二次规划问题中最多n次迭代就能找到最优解。如需获取相关代码,可后台回复“梯度法”。


共轭梯度法是方程组求解的一种迭代方法。这种方法特别适合有限元求解,因为该方法要求系数矩阵为对称正定矩阵,而有限元平衡方程的系数矩阵正好是对称正定矩阵(考虑边界条件)。同时,共轭梯度法也适合并行计算。

●算法原理

对于方程组Ax = b,假定A(nxn)是对称正定矩阵,采用共轭梯度法算法步骤如下:
取初始值x0

这里k=0,1,2,...。迭代持续进行,直到向量gk的模达到一个较小的值,也就是误差允许范围之内。


后台回复“梯度法”可获取Fortran及python代码下载地址。


共轭梯度法是介于梯度下降法与牛顿法之间的一个方法,是一个一阶方法。它克服了梯度下降法收敛慢的缺点,又避免了存储和计算牛顿法所需要的二阶导数信息。
在n维的优化问题中,共轭梯度法最多n次迭代就能找到最优解(是找到,不是接近),但是只针对二次规划问题。
共轭梯度法的思想就是找到n个两两共轭的共轭方向,每次沿着一个方向优化得到该方向上的极小值,后面再沿其它方向求极小值的时候,不会影响前面已经得到的沿哪些方向上的极小值,所以理论上对n个方向都求出极小值就得到了n维问题的极小值。

来源:数值分析与有限元编程
python理论
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-01
最近编辑:6月前
太白金星
本科 慢慢来
获赞 5粉丝 8文章 317课程 0
点赞
收藏
作者推荐

调用MKL函数库

本文摘要(由AI生成):MKL是Intel公司推出的数学函数库,支持C和Fortran接口,集成了BLAS、LAPACK和ScalLAPACK等库。LAPACK特别适用于科学与工程计算中的数值线性代数问题。使用MKL时,需正确设置include和lib,确保编译器能识别函数接口和链接库文件。include指定函数接口,对于Fortran库,常包含*.mod文件或*.f90源代码文件;lib则包含函数的具体实现,用于最终可执行文件的链接。以矩阵LU分解为例,使用sgetrf函数,其命名规则反映了数据类型(s代表单精度)、矩阵类型(ge代表一般矩阵)和操作类型(f代表分解)。函数的参数包括矩阵的行列数、矩阵本身、矩阵维度以及输出参数如LU分解后的矩阵和行交换信息。在源代码中需添加use lapack95语句,并在项目属性中配置相应的库文件。MKL函数库中的关键字用于标识数据类型(如s表示单精度实数,d表示双精度实数)、矩阵类型(如ge表示一般矩阵,sy表示对称矩阵)和操作类型(如mv表示矩阵向量乘积)。这些关键字帮助用户选择和调用适当的函数进行数值计算。MKL是Intel公司出品的数学函数库,有C和Fortran接口。它集成BLAS, LAPACK 和 ScalLAPACK 等函数库。其中,Lapack 包含了求解科学与工程计算中最常见的数值线性代数问题。正确使用函数库,就是让编译器正确的识别 include 和 lib。具体要 use 哪个module?链接哪个 lib 文件?●include告诉编译器,我们使用到的这些函数是什么,需要多少个参数,每个参数是什么类型,返回什么值。它的作用就像 Interface 接口一样。它没有函数内部如何实现的说明,只有接口!对于 Fortran 函数库,通常 include 里包含的都是 *.mod 文件,有些也包含 *.f90 文件(源代码方式声明接口)。●lib 链接器在链接成最终可执行文件时,需要把 lib 中的函数库一起链接。它是函数内部的实现,是函数的实际作用体,也是可执行代码。下面结合矩阵LU分解来说明具体操作使用sgetrf函数对矩阵进行LU分解,函数的命名规则是这样的,s代表single也就是单精度,ge代表一般矩阵,f代表factorization。函数的具体参数如下:call sgetrf( m, n, a, lda, ipiv, info )输入参数为以下:m :代表输入矩阵a的行数n :代表输入矩阵a的列数a :代表输入矩阵lda :就是矩阵a的第一个维度,一般是m输出参数为:a :上三角部分为经过LU分解后的矩阵U,下三角部分(不包括主对角线元素)为L矩阵。注意这里不是纯上三角矩阵!!!ipiv :INTEGER类型。是一个数组,维度一般是max(1,min(m, n)),具体英文说明是The pivot indices; for 1 ≤ i ≤ min(m, n), row i was interchanged with row ipiv(i).info:INTEGER类型。执行标示符,成功是0,其他为失败标识,具体查看mkl帮助。★在源代码添加use lapack95语句。★★在项目属性里按如下配置即可输出结果为:代码点击这里下载MKL函数库的关键字理解:数据类型关键字:s:real, single precision,单精度实数c:complex, single precision,单精度复数d:real, double precision,双精度实数z:complex, double precision,双精度复数常用矩阵类型关键字:ge:general matrix,一般矩阵gb:general band matrix,一般带状矩阵sy:symmetric matrix,对称矩阵sp:symmetric matrix (packed storage)s b:symmetric band matrixtr:triangular matrix,三角阵tp:triangular matrix (packed storage)tb:triangular band matrix.常用操作类型关键字:mv: matrix-vector product,矩阵向量乘积sv:solving a system of linear equations with a single unknown vectormm:matrix-matrix product,矩阵矩阵乘积s m:solving a system of linear equations with multiple unknown vectors来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈