Quasi-Newton拟牛顿法(共轭方向法)

1. Introduction

拟牛顿法可以理解为使用迭代的方法近似Hessian矩阵,但是拟牛顿法本质上其实是共轭方向法,所以用共轭方向法来理解拟牛顿法更加贴切。

本文的主要内容来自于《最优化导论》(《An introduction to optimization》)

2. 牛顿法

牛顿法在很多地方都有详细的说明,就不在这里赘述了。

2.1 不能保证收敛

一般的非线性函数,牛顿法不能保证从任意起始点都可以收敛到极小值点。结果可能会随着迭代在极小值附件震荡,甚至越走越远。这就要求我们设置合理的步长。

2.2 Hessian计算复杂

另外牛顿法中Hessian矩阵计算十分复杂,于是就引入了拟牛顿法,可以设计近似矩阵来代替复杂的Hessian矩阵。

3. 共轭方向法

共轭方向法的求解的主要是n维的二次型函数:
Alt
通过找到关于Q的一系列共轭方向d,然后分别从每个共轭方向上优化,最终可以在n步之内得到结果。
在这里插入图片描述
同时为了更方便的找到共轭方向,引入使用迭代求出共轭方向的方法,如下的共轭梯度法:
在这里插入图片描述
为了说明清楚,我们需要:

  • 定义共轭方向
  • 通过朝共轭方向更新x,可以收敛到极小值
  • 共轭梯度法构造得到的是共轭方向

3.1 共轭方向

共轭方向的定义如下,Q是上面所述的二次型函数中的表达。
在这里插入图片描述
关于共轭方向还有一个重要引理:
在这里插入图片描述

3.2 共轭方向上可以收敛到极小

在这里插入图片描述

3.3 共轭梯度法得到的是Q上的共轭方向

这个可以通过数学归纳法证明,证明可以参见原书。我们只需要知道共轭梯度法得到的d确实是Q的共轭方向。
在这里插入图片描述

3.4 算法效果

  • 共轭方向法的效率在最速下降法和牛顿法之间。
  • 对n维的二次型问题,n步之内可以得到结果。
  • 不需要计算Hessian矩阵。
  • 也不需要存储n*n的矩阵,不需要求逆运算。

Matlab compare example

%block preconditioning solution
clear all;
ex_blockprecond;

A_full = full(A);
fprintf('\nStarting dense direct solve ...\n'
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
共轭梯度是一种用于求解无约束优化问题的迭代算,它可以高效地求解大规模线性系统的特征值问题,也可以用于求解非线性优化问题。在Matlab中,可以使用“fminunc”函数来实现共轭梯度求解无约束优化问题。 具体实现步骤如下: 1. 定义目标函数。 首先需要定义一个目标函数,例如: ``` function f = myfun(x) f = x(1)^2 + 2*x(2)^2; end ``` 这里以$f(x)=x_1^2+2x_2^2$为例。 2. 设置初始点。 需要设定一个初始点,例如: ``` x0 = [1 1]; ``` 3. 调用“fminunc”函数进行优化。 使用“fminunc”函数进行优化,例如: ``` [x,fval,exitflag,output] = fminunc(@myfun,x0) ``` 其中,“@myfun”表示要优化的目标函数,“x0”表示初始点,“x”表示最优解,“fval”表示最优解对应的函数值,“exitflag”表示算的收敛状态,“output”保存了算的详细信息。 完整的代码如下: ``` function f = myfun(x) f = x(1)^2 + 2*x(2)^2; end x0 = [1 1]; [x,fval,exitflag,output] = fminunc(@myfun,x0) ``` 这段代码会输出最优解“x”和最优解对应的函数值“fval”。 需要注意的是,“fminunc”函数默认使用共轭梯度进行优化,如果需要使用其他算,可以通过设置选项来实现。例如,如果要使用拟牛顿法进行优化,可以将选项“Algorithm”设置为“quasi-newton”。 ``` options = optimoptions('fminunc','Algorithm','quasi-newton'); [x,fval,exitflag,output] = fminunc(@myfun,x0,options); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值