牛頓迭代

一種在實數域和複數域上近似求解方程的方法 。
方法使用函數f(x)的泰勒級數的前面幾項來尋找方程f(x)=0的根。

f(x)X0點的某鄰域內展開成泰勒級數 :
在這裏插入圖片描述
取其線性部分(即泰勒展開的前兩項),並令其等於0。即
在這裏插入圖片描述

以此作爲f(x)=0的近似根,在這裏插入圖片描述
這樣,得到牛頓迭代法的一個迭代關係式:
在這裏插入圖片描述
當然也可畫圖像。取點(X0,f(X0)),過此點做f(x)的切線,交x軸於x1。
也能推出牛頓迭代式。


用此法求一個數(>=0)的平方根。
即求f(x)=x*x-c的零點。需要的是正零點,且結果取整。
我們可以直接套用牛頓迭代式。

  1. 但是需要知道第一次迭代的x0是多少呢?(x0> 根號下c)
    當然很大也沒事,但選取x0=c。我覺得可以兼顧到c=1的時候。如果再選取小的話,會迭代到負零點。
  2. 什麼時候迭代結束呢?
    由於是浮點數,不能和根號c直接比較。
    所以可以選擇兩次迭代的結果xn和xn+1無線接近時,可以認爲迭代次數足夠多了,此時返回結果就可以。
   public int mySqrt(int c) {
        double xn=c;//浮點數保證結果的準確性。
        //xm代表xn+1,所以xm<xn
        if(x==0) return 0;
        while(true){
           double xm=0.5*(xn+c/xn);
           if(xn-xm<=1e-5) return (int)xm; //兩者無線接近,說明迭代次數已經足夠。
           xn=xm;
        }
    }

以上是自我見解,希望大佬指正錯誤,多多交流。

參考自:百度百科https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章