美文网首页
Newton's Method(Newton Raphson M

Newton's Method(Newton Raphson M

作者: 曹志文 | 来源:发表于2018-06-02 09:48 被阅读0次

牛顿定理的详细讲解
求数的开方时想到了通常都是用牛顿法来求解,因此学习一下并用C++简单的实现数的开方。

定理:

  若 f 二阶可导,那么在待求的零点 x 周围存在一个区域,只要起始点 x0 位于这个邻近区域内,那么牛顿-拉弗森方法必定收敛。

计算:

对自然数 a 的开方可以转化为



然后利用



反复迭代直至

即可。

注意:

  1. 如果不幸选了驻点(stationary point/ critical point),导致切线与x轴平行,那就完蛋了。
  2. 这个函数在定义域内最好是二阶可导。
  3. 这方法只能求一个解,如果函数有多解,就不行了。

代码:

#define EPSILON 1e-8

template<typename T>
T sqrt(T val)
{
    if (val < 0)
    {
        std::cout << "Illegal Radicand" << std::endl;
    }
    else if (val == 0)
    {
        return 0;
    }
    else
    {
        int i_times = 0;
        float va = static_cast<float>(val);
        float v1 = va / 2;
        while ((v1 * v1 - va > EPSILON || v1 * v1 - va < -EPSILON) && i_times < 100)
        {
            v1 = -(v1 * v1 - va) / (2 * v1) + v1;
            ++i_times;
        }
        return static_cast<T>(v1);
    }
}

相关文章

网友评论

      本文标题:Newton's Method(Newton Raphson M

      本文链接:https://www.haomeiwen.com/subject/vlilsftx.html