Newton's Method(Newton Raphson Method)

牛頓定理的詳細講解
求數(shù)的開方時想到了通常都是用牛頓法來求解,因此學習一下并用C++簡單的實現(xiàn)數(shù)的開方。

定理:

??若 f 二階可導,那么在待求的零點 x 周圍存在一個區(qū)域,只要起始點 x0 位于這個鄰近區(qū)域內(nèi),那么牛頓-拉弗森方法必定收斂。

計算:

對自然數(shù) a 的開方可以轉化為



然后利用



反復迭代直至

即可。

注意:

??1. 如果不幸選了駐點(stationary point/ critical point),導致切線與x軸平行,那就完蛋了。
??2. 這個函數(shù)在定義域內(nèi)最好是二階可導。
??3. 這方法只能求一個解,如果函數(shù)有多解,就不行了。

代碼:

#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);
    }
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容