Conjugate gradient method

共轭梯度法。一种求解数学特定线性方程组Ax=b的数值解的迭代方法。
要求矩阵A对称(symmetric)且正定(positive definite)。
Ax=b是数值求解常见的偏微分方程,可以用Cholesky分解。
当等式左边是稀疏矩阵线性方程组时,Conjugate gradient method更加适用。
另外,该方法也可以用于求解无约束的最优化问题。
对于非对称矩阵,有双共轭梯度法,Biconjugate gradient method。

方法细节:
conjugate gradient method as a direction method


Direct method

when n is too large, using conjugate gradient method as a iterative method


Iterative method

以上这个算法的推论过程还在理解中...(我觉得好难...)

let's look at the example code:

    function[x] = conjgrad(A,b,x)
            r = b - A*x
            p = r
            rsold = r' * r

           for i = 1:length(b)                             //size of A
                   Ap = A * p
                   alpha = rsold / (p' * Ap)           //alpha_k
                   x = x + alpha * p                       //x_(k+1) = x_k + alpha_k * p_k
                   r = r - alpha * Ap                      //r_(k+1) = r_k - alpha_k * A * p_k
                   rsnew = r' * r
                   if sqrt(rsnew) < 1e-10
                          break;
                   end
                   p = r + (rsnew / rsold) * p;      //p_(k+1) = r_(k+1) + \beta_k * p_k
                   rsold = rsnew;
           end
     end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容