數學之美:牛頓-拉夫遜迭代法原理及其實現

2021-02-18 嵌入式客棧

[導讀] 前面剛轉了一篇文章提到了牛頓-拉夫遜(拉弗森)(Newton-Raphson method)方法,感覺這個數學方法很有必要相對深入寫一篇文章來總結分享印證一下自己的理解。這是寫本文的由來,如果發現文章中有錯誤之處,請留言交流討論。

什麼是牛頓-拉夫遜方法?

牛頓其人:Isaac Newton(1642年12月25日– 1727年3月20日)是一位英國數學家,物理學家,天文學家,神學家和作家,被公認為有史以來最有影響力的科學家之一,並且是科學革命的關鍵人物。他的書《自然哲學的數學原理》於1687年首次出版,奠定了古典力學的基礎。牛頓還為光學做出了開創性的貢獻,並與戈特弗裡德·威廉·萊布尼茲(Gottfried Wilhelm Leibniz)發展了無窮微積分的學科。


牛頓

拉弗森Joseph Raphson 生卒不詳,其最著名的著作是1690年出版的《通用分析方程》。它包含一種方法,現在稱其為牛頓-拉夫森方法,用於近似方程式的求根。艾薩克·牛頓(Isaac Newton)在1671年寫的《通量法》中開發了一個非常相似的公式,但是這項工作要到1736年才出版,這是拉夫森分析之後近50年。但是,該方法的Raphson版本比Newton方法更簡單,因此通常被認為是更好的方法。

所以,牛頓迭代法(簡寫)就是一種近似求解實數域與複數域求解方程的數學方法。那麼這個方法是具體是什麼原理呢?

牛頓迭代如何迭代?

直接看數學公式描述如何迭代不直觀,先來看動圖就很容易理解牛頓迭代法為什麼叫迭代法以及怎樣迭代的:

牛頓迭代法是原理是根據一個初始點


由前面描述知道,牛頓迭代法是用來近似求解方程的,這裡有兩個點需要說明:

迭代法非常適合計算機編程實現,實際上計算機編程對於牛頓迭代法廣為應用

來看看,數學上如何描述的?

其中

來簡單推一推上面公式的由來,直線函數方程為:

知道一個直線的一個坐標點

那麼該直線與

啥時候停止迭代呢?

將絕對相對近似誤差與預定的相對誤差容限

如何編碼呢?

由於牛頓迭代法主要目的是解方程,當然也有可能用於某一個數學函數求極值,所以無法寫出通用的代碼,這裡僅僅給出一個編代碼的思路。相信掌握了思路,對於各種實際應用應該能很快的寫出符合實際應用的代碼。

假定一函數為

其波形圖如下:

其一階導數為:

那麼對於該函數的根:

從圖上大致可以知道有兩個根,如果直接解方程,則很難求出其根,可以編個代碼試試:

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

/*假定待求根函數如下*/
#define    F(x)    (2*(x)*(x)-10*cos(x)+(x)-80)

/*其一階導數為*/
#define   DF(x)    (4*(x)+10*sin(x)+1)

float newton_rooting(float x0,float precision,float min_deltax,int max_iterations)
{
     float xn,xn1,fn,fn1,dfn;
     float deltax;
     int step = 0;
     xn  = x0;
     xn1 = x0;
     do{
       xn  = xn1;
       fn  = F(xn);
       dfn = DF(xn);
       /*判0*/
       if( fabs(dfn) <1e-6 )
       {
            if( fabs(fn)>precision )
                return NAN;
            else
                return fn;
       }

       xn1 = xn - fn/dfn;
       fn1 = F(xn1);
       deltax = fabs(xn1-xn);
       
       step++;
       if( step>max_iterations )
       {
           if( fabs(fn1)<precision )
               return xn;
           else
               return NAN;
       }
     }
     while( fabs(fn1)>precision || deltax>min_deltax );

     return xn1;
}

void main()
{
     float root_guess = 23.0f;
     float precision = 0.00001f;
     float min_deltax = 0.001f;
     float root;
     int step = 7;

     root = newton_rooting( root_guess,precision,min_deltax,step );
     printf("根為: %f,函數值為:%f\n", root,F(root));

     root_guess = -23;
     root = newton_rooting( root_guess,precision,min_deltax,step );
     printf("根為: %f,函數值為:%f\n", root,F(root));
}

結果:

根為: 6.457232, 函數值為:0.000004
根為: -6.894969,函數值為:-0.000008

函數值已經很接近於0了,如果還需要更為精確的值,則可以選擇在此基礎上進一步求解,比如利用二分法逼近。

需要注意些啥?

如果選擇的初始猜測根的接近方程f(x)=0中函數f(x)的拐點 ,Newton-Raphson方法可能開始偏離根。然後,它可能會又收斂回到根。例如

5435866

所以實際應用時,需要知道自己待求解模型的大致情況,在合理的加以調整。

有哪些應用? 比如知道某系統的傳遞函數,求解傳函的參數,可以將上述方法推而廣之,求解多維變量方程組,求導就變成求偏導了總結一下

牛頓迭代法在解決實際問題時,利用迭代求方程近似根的數學原理,在工程中有著很好的實用價值。比如求一個趨勢的極值,傳遞函數參數辨識等都有廣泛的實際應用。本文拋磚引玉,有可能文章也有很多錯誤疏漏的地方,如有不同看法或者發現錯誤,歡迎留言交流指正。

相關焦點

  • 數學之美:牛頓-拉夫遜迭代法原理及其實現
    [導讀] 前面剛轉了一篇文章提到了牛頓-拉夫遜(拉弗森)(Newton-Raphson method)方法,感覺這個數學方法很有必要相對深入寫一篇文章來總結分享印證一下自己的理解。這是寫本文的由來,如果發現文章中有錯誤之處,請留言交流討論。什麼是牛頓-拉夫遜方法?
  • 高考數學原創試題—用牛頓迭代法求方程近似解
    牛頓-拉弗森迭代法(簡稱牛頓迭代法)是求方程解的重要方法,該方法是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。我們知道,很多方程不存在求公式,因此求精確根非常困難,甚至不可能,從而尋求方程的近似根就顯得特別重要。
  • 基於C++的電力潮流計算牛-拉法與P-Q法的分析比較
    針對阻抗法佔用計算機內存大的問題,又出現了分塊阻抗法及牛頓-拉夫遜法(Newton-Raphson),而NR法也解決了導納法收斂性差的問題。PQ分解法是使用極坐標表示時的NR法,既可用於離線潮流計算,更能夠應用於在線潮流計算。
  • 蘋果落地與牛頓萬有引力,讀《自然哲學之數學原理》的一點覺悟
    很早/小就聽聞牛頓因被樹上落下的蘋果砸中而發現萬有引力的故事,小學的自然讀物寫萬有引力,中學的物理課本講萬有引力並引入數學公式來分析,及在那之後讀到的各種科普讀物上介紹牛頓和萬有引力,幾乎所有的這些都直接展示萬有引力原理、公式的直觀、正確,以不容置疑的方式來傳遞科學知識,同時彰顯牛頓的天才、偉大、非凡。
  • 牛頓和他的《數學原理》
    和穆罕穆德一樣,牛頓是個遺腹子,牛頓尚未出世,其父已經離世。牛頓的童年並沒有特別之處,小學時成績屬於次等。12歲時因為性格孤僻,不善交流,成績不佳,被班上的同學孤立,受到歧視,甚至挨過同學的揍。牛頓後來回憶說因為受到同學羞辱開始發奮學習,讓他成為了學校裡成績最優異的學生。1656年,牛頓14歲,因為繼父去世,母親再次守寡,使得他不得不中斷學業回家種田。
  • 《自然哲學之數學原理》精彩書摘
    《自然哲學之數學原理》是劃時代的巨著,也是人類掌握的首個完整的、科學的宇宙論和科學理論體系。牛頓在本書中構建了一個人類有史以來最為宏偉的物理理論體系。這一理論體系很好地解釋了當時已知的一切運動形式和現象。
  • 數學的美 在於數學思想深刻之美
    數學教育學報2011年第4期數學的美 在於數學思想深刻之美顧 沛(南開大學 數學科學學院,天津 300071)關鍵詞:數學美;數學思想;數學文化南開大學的數學文化課程,從2001年2月開設,至今已經10年了.數學文化課受到廣大學生的歡迎
  • 《數學之美》筆記二
    一到五在《數學之美》筆記一中六. 信息的度量和作用1、信息熵引用說明:一條信息的信息量與其不確定性有著直接的關係。比如說,我們要搞清楚一件非常不確定的事,或是我們一無所知的事情,就需要了解大量的信息。相反,如果已對某件事了解較多,則不需要太多的信息就能把它搞清楚。所以,從這個角度來看,可以認為,信息量就等於不確定性的多少。
  • 牛頓是如何推導出萬有引力?內容來自《自然哲學之數學原理》
    1687年,牛頓出版了讓他名垂千史的著作《自然哲學之數學原理》。正是在這部著作中,牛頓完整地推導出了萬有引力的計算方法。下圖是牛頓在《自然哲學之數學原理》中計算過程的壓縮版本。在牛頓的時代,主要的數學工具是歐幾裡得幾何學和代數學。矢量運算工具還沒有出現、現在高等數學的那些微積分符號工具是萊布尼茨開創的。
  • 數學原理之牛頓萊布尼茨公式
    英國科學家牛頓,一生集,物理,天文,數學大成,跟德國科學家萊布尼茨幾乎同時發現了微積分,因此,微積分的基本公式又叫牛頓萊布尼茨公式。當然了,牛頓晚期,其公司,坑過諸多絕世天才,如,特斯拉,一生諸多發明,是在其財力下,其它科學家的功勞,當最後都歸集於其下,所以後期的牛頓就是個生意人,本小神懷疑就是微積分都是其花錢掛名,而另有其人發明的,因為它的一句經典名言:如果說我比別人看的遠些,那是因為我站在巨人的肩膀上。這個巨人指的是誰?牛頓沒說,也不願意說,總之,有盜名嫌疑。
  • 1687年7月5日,物理學家牛頓出版《自然哲學的數學原理》
    當時三一學院的教學理念基於亞里斯多德的學說,但牛頓更喜歡閱讀一些勒奈·笛卡兒等現代哲學家更先進的思想。1665年,他發現了廣義二項式定理,並開始發展一套新的數學理論,也就是後來為世人所熟知的微積分學。在1665年,牛頓獲得了學位,而大學由於倫敦大瘟疫暫時關閉。在此後兩年裡,牛頓在家中繼續研究微積分學、光學和萬有引力定律。
  • 牛頓的《自然哲學的數學原理》
    只是慢慢到了後來,人們才發現知識原來很豐富很龐雜,並不是簡單地由什麼水啊、氣啊、火啊、土啊、還有以太啊,就能包羅得了的,並逐漸有了各種知識的分類:數學、醫學、文學、物理、化學……等等,還一個個地從哲學中分離獨立出來。大家都知道,《自然哲學的數學原理》是牛頓的一本劃時代名著。這是一本什麼書呢?又是自然、又是哲學、又是數學的?其實,這書名所說的「自然哲學」,指的是物理。
  • 牛頓簡介及其科學成就
    在克卜勒行星運動定律以及其他人的研究成果上,他用數學方法導出了萬有引力定律。  牛頓把地球上物體的力學和天體力學統一到一個基本的力學體系中,創立了經典力學理論體系。正確地反映了宏觀物體低速運動的宏觀運動規律,實現了自然科學的第一次大統一。這是人類對自然界認識的一次飛躍。  牛頓指出流體粘性阻力與剪切率成正比。
  • 理解數學的美妙——《數學之美》
    《數學之美》是一本備受推崇的書,今天在搭乘高鐵回廣州的時候翻看了一下。我覺得這本書的名字改為《數學應用之美》甚至《資訊理論應用之美》更為合適。對於希望體驗數學之美的同學,我推薦 S. Lang 的 《做數學之美妙》。
  • 數學之美的秘密,從小學數學原理開始說起~
    他用一些例子,講述了數學的美麗之處,讓我們窺探到數學之美的秘密。如果答案不漂亮,我知道一定是錯的。——富勒在二年級班上,我教小朋友一種證明乘法交換律的漂亮方法(這方法我們會在乘法意義那章講到)。有位坐在第一排的小朋友抬頭凝視一會兒,然後低聲說:「真美。」去問數學家數學這行到底什麼地方吸引他,十之八九會回答是「美」。
  • 吳軍《數學之美》,為什麼抄襲文章會被識破?原來數學原理是這樣
    在《數學之美》中,吳軍在第16章重點談到了網絡下載,為了防止重複下載同一個網頁,需要對每個網頁進行特徵標記。這個原理也進一步擴展到了網絡作品反抄襲上。那麼為什麼抄襲的文章會被系統識破?它的數學基礎和邏輯原理又是什麼呢?
  • 數學大師啟示錄——牛頓
    其實,此時此刻牛頓對自己流數法和反流數法的意義還認識不足。因此,他沒有立即全力以赴地來發展和完善自己的理論。他暫時滿足於利用它來為自己揭開引力之謎服務。神聖時刻1666年1月的一天。彌撒剛剛結束,教堂的鐘聲還在村子上空迴蕩。漢娜一家隨著鄉親們有說有笑地往家走。一轉眼,伊薩克已經沒有蹤影了。
  • 牛頓、貝克萊無窮小之爭,差點推翻微積分理論,顛覆整個數學體系
    牛頓在 1676 年寫的論文《曲線的求積》和 1687 出版的物理學的聖經《自然哲學的數學原理》中,曾使用了「最初比與最終比」來解釋這個悖論,力圖避開實無限小量,並且試圖重新解釋無窮小增量單位「瞬」的概念重新說明,還使用了「最初比與最終比」來解釋這個悖論,從實無限小量觀點轉向了極限觀點。
  • 牛頓哲學用數學構想自然
    深受笛卡爾「把數學看作研究和了解自然的鑰匙」這一觀點的影響,牛頓致力於用數學定律來說明自然現象,探討自然哲學問題,尤其是為幾何學和力學的發展提供了重要的途徑。他之所以用《自然哲學的數學原理》來命名其著作,乃是因為「哲學全部任務看來就在於從各種運動現象來研究各種自然之力,然後用這些力去論證其他現象」。
  • 混沌(Chaos)世界——無序中的數學之美
    它既不是吳承恩筆下《西遊記》描述的「混沌未分天地亂,茫茫渺渺無人見」的一番冷清景象,也不是盤古開天闢地之後的混亂展現,更不是希臘神話中的洪水和深深的黑暗;它,其實是一個可以被數學公式所解釋的系統,是數學之美的基礎,是隨處可見卻又鮮為人知的系統。混沌,是由阿蘭·圖靈(Alan Turing 1912-1953)最早觸及。