牛顿迭代法

原创 2015年07月07日 10:40:49

目前接触到的牛顿迭代法主要应用于两个方面:(1)方程求根问题(2)最优化问题。


1、求解方程。

并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。

原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) = f(x0)+(x-x0)f'(x0)

求解方程f(x)=0,即f(x0)+(x-x0)*f'(x0)=0,求解x = x1=x0-f(x0)/f'(x0),因为这是利用泰勒公式的一阶展开,f(x) = f(x0)+(x-x0)f'(x0)处并不是完全相等,而是近似相等,这里求得的x1并不能让f(x)=0,只能说f(x1)的值比f(x0)更接近f(x)=0,于是乎,迭代求解的想法就很自然了,可以进而推出x(n+1)=x(n)-f(x(n))/f'(x(n)),通过迭代,这个式子必然在f(x*)=0的时候收敛。整个过程如下图:

 

2、牛顿法用于最优化

在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f'=0的问题,这样求可以把优化问题看成方程求解问题(f'=0)。剩下的问题就和第一部分提到的牛顿法求解很相似了。

这次为了求解f'=0的根,把f(x)的泰勒展开,展开到2阶形式:

这个式子是成立的,当且仅当 Δ无线趋近于0。此时上式等价与:

求解:

得出迭代公式:

一般认为牛顿法可以利用到曲线本身的信息,比梯度下降法更容易收敛(迭代更少次数),如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。

在上面讨论的是2维情况,高维情况的牛顿迭代公式是:

其中H是hessian矩阵,定义为:

 

高维情况依然可以用牛顿迭代求解,但是问题是Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度大大增加,但是已经有了解决这个问题的办法就是Quasi-Newton methond,不再直接计算hessian矩阵,而是每一步的时候使用梯度向量更新hessian矩阵的近似.

3、牛顿迭代法应用

应用牛顿迭代法求解方根,只需要迭代几次便可以得到相当精确的结果。

首先设x^m=a,


因此应用牛顿迭代法我们可以快速寻找平方根,下面的这种方法可以很有效地求出根号a的近似值:首先随便猜想一个近似值x,然后不断令x等于x和a/x的平均数即(x+a/x)/2,迭代个六七次后x的值就已经相当精确了。(x+a/x)/2的迭代公式我们可以利用牛顿迭代法求解f(x)=x^2-a的0点的迭代公式推导出。

const double eps = 1e-6;

double sqrt(double x) {
    if(fabs(x) < eps) return 0.0;
    double result = x;
    double xhalf = 0.5 * result;
    int i = *(int*)&result;
    i = 0x5f375a86 - (i>>1);
    result = *(double*)&i;
    result = result * (1.5 - xhalf * result * result);
    result = result * (1.5 - xhalf * result * result);
    return 1.0 / result;
}

相关文章推荐

【数值分析】迭代法解方程:牛顿迭代法、Jacobi迭代法

本科课程参见:《软件学院那些课》 牛顿迭代公式 设已知方程f(x)=0的近似根x0 ,则在x0附近f(x)可用一阶泰勒多项式近似代替.因此, 方程f(x)=0可近似地表示为p(x)=0。用x1...

牛顿迭代法(Newton's Method)

牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出。但是,这一方法在牛顿生前并未公开发表。 牛顿法的作用是使用迭代的方法来求解函数方程的根。简单地说,牛顿法就是不断求取切线的过程。 对于形...

Java练习:牛顿迭代法 Vs. 不动点

SICP中,说明了功能抽象的一种类型:一般化函数的设计。通用函数在通常的Java/C语言的教学中,通常放在后面作为高级内容。如在讲解C的函数指针、Java的模板方法模式的时候。...
  • yqj2065
  • yqj2065
  • 2016年06月12日 18:50
  • 933

Logistic回归与牛顿法(附Matlab实现)

回归,是一种连续模型,受噪声的影响较大,一般都是用来做预测的,但也有除外,比如本文要讲的Logistic回归就是用来做分类的。 Logistic Regress Logistic一般用于二分...

Logistic回归与牛顿迭代法

在上一篇文章中,我讲述了Logistic回归的原理以及它的梯度上升法实现。现在来研究Logistic回归的另一种 实现,即牛顿迭代法。   在上篇文章中,我们求出Logistic回归的似然函数的偏导数...

牛顿迭代法 c语言实现

#include #include double func(double x) //函数 { return x*x*x*x-3*x*x*x+1.5*x*x-4.0; } double ...

用matlab实现牛顿迭代法

  • 2012年10月28日 21:13
  • 154B
  • 下载

用C++实现牛顿迭代法程序

  • 2010年06月09日 19:56
  • 50KB
  • 下载

C语言实现牛顿迭代法解方程

利用迭代算法解决问题,需要做好以下三个方面的工作: 一、确定迭代变量 在可以用迭代算法解决的问题中,我们可以确定至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:牛顿迭代法
举报原因:
原因补充:

(最多只允许输入30个字)