首页 / 视频教程

【技术:Python算法】025共轭梯度

发布时间:2023-11-21 00:28:07
共轭梯度

   

当你需要解决一个线性方程组时,共轭梯度提供了一种很快速的方法。
这是一个很聪明的想法,设函数 F=L2(X',X0)^2,这是标准解 X'(不一定正确)和 真实解 X0 的平方L2函数,这个函数是抛物线形的,并且最好的情况是他的最小值在原点(这将也是一个解)。在这种情况下,我们将用一个又一个 X' 垂直去往每条轴线,直到得到 X0。
虽然情况并非如此,但真实的情况也没有太大不同,与最好的情况相反,共轭梯度垂直于特征向量传播,从而产生了和上述相同的效果。
只需要记住,你的矩阵需要是正定的,如果不是这样的,使用 (A’A)x=(A’b) 转换,这也能解决超定和欠定系统。
    
import numpy as npdef conjugate_gradients(A, b):    x = np.zeros(A.shape[1])    residuals = b - A @ x    direction = residuals    error = residuals.T @ residuals    # step along conjugate directions    while error > 1e-8:        x += direction * error / (direction.T @ A @ direction)        residuals = b - A @ x        error1 = error        error = residuals.T @ residuals        direction = residuals + error / error1 * direction    return x

版权声明:

  • 本文源自100 days of algorithms,若侵权删除。

  • 版权归相关权利人所有,如存不当使用的情况,请与我们联系。

  • 本公众号分享文章,仅供学习交流及参考,请勿随意试药。

“阅读原文”我们一起进步

相关推荐