牛顿法 一阶导 二阶导 平方根 Sqrt

以前牛顿法的印象就是Hessen矩阵,二阶导,今天忽然发现好像求平方根大家玩得是一阶导,后来仔细推导了一下发现一阶导 二阶导都是牛顿法,从泰勒展开说起
f ( x ) = f ( x n ) + f ′ ( x n ) ( x − x n ) + 1 2 f ′ ′ ( x n ) ( x − x n ) 2 f(x)=f(x_n)+f'(x_n)(x-x_n)+\frac{1}{2}f''(x_n)(x-x_n)^2 f(x)=f(xn)+f(xn)(xxn)+21f′′(xn)(xxn)2
如果忽略二阶导,令 f ( x ) = 0 f(x)=0 f(x)=0这里 f ( x ) = 0 f(x)=0 f(x)=0表示切线不断和x轴相交,可以得到
x = x n − f ( x n ) f ′ ( x n ) ( 公式 1 ) x=x_n-\frac{f(x_n)}{f'(x_n)} (公式1) x=xnf(xn)f(xn)(公式1)

在这里插入图片描述
在这里插入图片描述

如果不忽略二阶导,对两边求导,可以得到
f ′ ( x ) = f ′ ( x n ) + f ′ ′ ( x n ) ( x − x n ) f'(x)=f'(x_n)+f''(x_n)(x-x_n) f(x)=f(xn)+f′′(xn)(xxn)
极值的位置 f ′ ( x ) = 0 f'(x)=0 f(x)=0,所以可以得到
x = x n − f ′ ( x n ) f ′ ′ ( x n ) ( 公式 2 ) x=x_n-\frac{f'(x_n)}{f''(x_n)} (公式2) x=xnf′′(xn)f(xn)(公式2)
公式1和公式2从 x n x_n xn x n + 1 x_{n+1} xn+1的时候都可以算牛顿法,公式1的典型应用就是求平方根或者其他数值计算,公式1在几何上的解释就是求切线,切线和x轴的交点再迭代。

例如求 a \sqrt a a ,令 f ( x ) = x 2 − a f(x)=x^2-a f(x)=x2a,那么迭代公式就是
x n + 1 = 1 2 ( x n + a x n ) x_{n+1}=\frac{1}{2}(x_n+\frac{a}{x_n}) xn+1=21(xn+xna)
写成code就是

// c++ code
double ans=1, pre=0;
while(abs(ans-pre)>1e-6){
    pre=ans;
    ans=(ans+x/ans)/2;
}

对于公式2,一般更关心它的高阶形式,也就是Hession矩阵上场
x n + 1 = x n − H − 1 g x_{n+1}=x_n-H^{-1}g xn+1=xnH1g
H − 1 H^{-1} H1是Hession矩阵的逆,g是一阶导,这次就是玩二阶了

实际中的问题是Hession矩阵的逆比较难求,所以有Broyden,Fletcher,Goldfarb和Shanno四个人以自己首字母弄了一个BFGS算法,来近似的求 H − 1 H^{-1} H1,这种算法实用价值较大,因此又有人搞出了L-BFGS算法(Low内存版)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值