首页 > 编程语言 > 详细

Ax = b 的迭代解法 —— 共轭梯度 (算法步骤)

时间:2021-03-28 11:20:42      阅读:101      评论:0      收藏:0      [点我收藏+]

线性方程组 Ax =b 除了高斯消元法以外,还有其它的迭代解法,这里我们说的是共轭梯度法。

 

 

这里只针对 A 满足 对称 ( 技术分享图片 ), 正定(即 技术分享图片 ),并且是实系数的,那么我们可以用 梯度下降 和 共轭梯度 来解线性方程组 :

技术分享图片

 

 

 

 

向量 技术分享图片 和 技术分享图片 是共轭的 (相对于A )如果满足:

 

技术分享图片

 

 

 

 

 

 

下图两两向量都是针对所在梯度处的矩阵‘共轭’的:

 技术分享图片

 

 

 

 

 

 

把梯度变换一下,就可以看出‘共轭’其实也就是某种正交:

技术分享图片

 

 

 

 

=============================================

 

共轭梯度法解:

技术分享图片

 

 

算法步骤:(from wiki)

技术分享图片

 

 

 ---------------------------------------------

 

 

python代码:(源于:Baselines:https://github.com/openai/baselines(强化学习算法))

 

import numpy as np
"""共轭梯度下降"""
def cg(f_Ax, b, cg_iters=10, callback=None, verbose=False, residual_tol=1e-10):
    """
    Demmel p 312
    """
    p = b.copy()
    r = b.copy()
    x = np.zeros_like(b)
    rdotr = r.dot(r)

    fmtstr =  "%10i %10.3g %10.3g"
    titlestr =  "%10s %10s %10s"
    if verbose: print(titlestr % ("iter", "residual norm", "soln norm"))

    for i in range(cg_iters):
        if callback is not None:
            callback(x)
        if verbose: print(fmtstr % (i, rdotr, np.linalg.norm(x)))
        z = f_Ax(p)
        v = rdotr / p.dot(z)
        x += v*p
        r -= v*z
        newrdotr = r.dot(r)
        mu = newrdotr/rdotr
        p = r + mu*p

        rdotr = newrdotr
        if rdotr < residual_tol:
            break

    if callback is not None:
        callback(x)
    if verbose: print(fmtstr % (i+1, rdotr, np.linalg.norm(x)))  # pylint: disable=W0631
    return x

 

 

 

 

 

=============================================

 

 

 

参考:

https://flat2010.github.io/2018/10/26/%E5%85%B1%E8%BD%AD%E6%A2%AF%E5%BA%A6%E6%B3%95%E9%80%9A%E4%BF%97%E8%AE%B2%E4%B9%89/

 

图来源:

https://flat2010.github.io/2018/10/26/%E5%85%B1%E8%BD%AD%E6%A2%AF%E5%BA%A6%E6%B3%95%E9%80%9A%E4%BF%97%E8%AE%B2%E4%B9%89/

 

 

 

 

------------------------------------------------------------------------------

 

Ax = b 的迭代解法 —— 共轭梯度 (算法步骤)

原文:https://www.cnblogs.com/devilmaycry812839668/p/14587729.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!