最优化共轭梯度法matlab代码实现 您所在的位置:网站首页 非线性共轭梯度算法 最优化共轭梯度法matlab代码实现

最优化共轭梯度法matlab代码实现

2024-06-08 15:02| 来源: 网络整理| 查看: 265

FR共轭梯度法实际上是利用梯度和上一次的搜索方向来构造本次搜索方向:

dk=-gk+βk-1dk-1 即:用上一次的搜索方向修正最速下降法的负梯度方向,不仅避免了锯齿现象,与牛顿法相比也节约了计算量。运用共轭,线性无关的同时,也适应大条件数。

共轭梯度法克服了最速下降法收敛慢,只需要利用一阶导数信息,避免了牛顿法存储和计算hesse矩阵的空间 对大型线性或非线性方程组都非常有效

共轭

首先,什么是共轭

设 d1,d2 … dm 是Rn 中任意一组非零向量,若 di TG di = 0 ( i ≠ j ) 则称d1,d2 … dm是 G-共轭的。显然 d1,d2 … dm 线性无关,若G = I, 则是正交关系。

推导

在这里插入图片描述 代码实现

function [x,iter] = FR(G,b,x0,max_iter) %conjugate gradient method for the following positive definite quadratic %function f(x)=x'Gx/2-b'x %========================================================================= %x0 :starting point %max_iter :maximum number of iterations %--------------------------------------- x=x0;%初始点 tolerance=1.0e-6;%停止条件:调整的步长小于e*10^6 fprintf('\n x0='); fprintf(' %10.6f',x0);%10的六次浮点 r=G*x-b;d=-r;%r=g=G*x-b 残量等于梯度 d=-r 初始下降方向为负梯度方向 for k=1:max_iter % 1~最大迭代次数 if norm(r,2)>

可以自行更换初始点进行计算 注意:b和x0 都是nx1的向量,搞错了就会一堆NaN(搞了一下午哭唧唧)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有