牛顿法(Newton Method)求解f(x)=0

今天继续探讨f(x)=0的解法,这次要介绍的是牛顿迭代法。

问题描述

已知f(x)=0,求使等式成立的x的值。

解法如下

求出f(x)的导函数f\_d(x)=f'(x)

任取初值x_0进行迭代

x_1=x_0-f(x_0)/f'(x_0)

x_2=x_1-f(x_1)/f'(x_1)

x_3=x_2-f(x_2)/f'(x_2)

...

x_n=x_{n-1}-f(x_{n-1})/f'(x_{n-1})

直到 f(x_n)≈0 (此处约等于的意思是两者的差值小于预设误差)

示例

求解 f(x)=e^{-x}-x=0

根据求导公式有 f\_d(x)=f'(x)=-e^{-x}-1

求解代码如下

#include <math.h>
#include <stdio.h>

double f(double x)
{
    return exp(-x)-x;
}

double f_d(double x)
{
    return -exp(-x)-1;
}

int main()
{
    double x = 0;
    while (f(x) > 1e-6) {
        x = x-f(x)/f_d(x);
    }
    printf("solution for function exp(-x)-x=0 is %lf\n", x);
    return 0;
}

求解结果如下:

牛顿迭代法求解结果

原理

我也不懂了……详细的可以参考维基百科

https://en.wikipedia.org/wiki/Newton%27s_method

这里仅解释下浅显的理解,而且对收敛性也不做证明。

根据高等数学里面学到的泰勒展开

f(x)=f(x_0)+(x-x_0)f'(x_0) +\frac{(x-x_0)^2}{2}f''(x_0)+\frac{(x-x_0)^3}{3!}f^{(3)}(x_0)+\frac{(x-x_0)^4}{4!}f^{(4)}(x_0)+...+\frac{(x-x_0)^n}{n!}f^{(n)}(x_0)

约掉二阶及二阶以上的小量(至于详细的证明需要参照维基百科了,因为这里任取的初值实际上不一定是小量,这里仅仅是做一个简单解释),得到

f(x)≈f(x_0)+(x-x_0)f'(x_0)

故而可以推出,当 f(x)=0

x≈x_0-\frac{f(x_0)}{f'(x_0)}

此即为牛顿迭代法中得迭代公式。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 初学者入门:如何用Python和SciKit Learn 0.18实现神经网络?

选自Springboard 作者:Jose Portilla 机器之心编译 参与:Jane W、吴攀 本教程的代码和数据来自于 Springboard 的博客...

29311
来自专栏杨熹的专栏

一文学会用 Tensorflow 搭建神经网络

---- cs224d-Day 6: 快速入门 Tensorflow 本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的, 讲的很好,浅显易懂...

3794
来自专栏闪电gogogo的专栏

OMP算法代码学习

正交匹配追踪(OMP)算法的MATLAB函数代码并给出单次测试例程代码 测量数M与重构成功概率关系曲线绘制例程代码 信号稀疏度K与重构成功概率关系曲线绘制例程代...

2176
来自专栏机器之心

教程 | 基于Keras的LSTM多变量时间序列预测

2958
来自专栏机器之心

教程 | 斯坦福CS231n 2017最新课程:李飞飞详解深度学习的框架实现与对比

选自Stanford 作者:李飞飞等 机器之心编译 参与:Smith、蒋思源 斯坦福大学的课程 CS231n (Convolutional Neural Ne...

2908

TensorFlow中生成手写笔迹的Demo

这项操作现在在github上已经可以使用了。

3347
来自专栏人工智能LeadAI

C++实现神经网络之一 | Net类的设计和神经网络的初始化

闲言少叙,直接开始 既然是要用C++来实现,那么我们自然而然的想到设计一个神经网络类来表示神经网络,这里我称之为Net类。由于这个类名太过普遍,很有可能跟其他人...

2965
来自专栏技术专栏

自己实现一个滑动窗口

上述计算中的alpha的值是一个0~1之间的常量,aplha值决定了一段时间内的平滑水平,alpha越趋于1,历史值对当前的平均值的影响越大,反之亦然

511
来自专栏程序员的诗和远方

人人都可以学的人工智能:TensorFlow 入门例子

这是用 TensorFlow 来识别手写数字的官方经典入门例子,数据都是已经处理过准备好了的,但是只到计算准确度概率那就停了,缺少拿实际图片运用的例子,初学者...

51210
来自专栏AI研习社

都说 AllenNLP 好用,我们跑一遍看看究竟多好用

良好学习过程的关键原则之一,就是让学习的内容略高于当前的理解。如果该主题与你已知的内容太过于相似,那么你就不会有很大的进步。另一方面,如果这个主题太难的话,你就...

1222

扫码关注云+社区