• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Brian Warehouse

            Some birds aren`t meant to be caged, their feathers are just too bright... ...
            posts - 40, comments - 16, trackbacks - 0, articles - 1

            牛頓法求平方根【轉】

            Posted on 2010-08-17 13:49 Brian 閱讀(726) 評論(0)  編輯 收藏 引用 所屬分類: 概念和技術

            求n的平方根,先假設一猜測值DE>X0 = 1DE>,然后根據以下公式求出DE>X1DE>,再將DE>X1DE>代入公式右邊,繼續求出DE>X2DE>…通過有效次迭代后即可求出n的平方根,DE>Xk+1DE>

            x_(k+1)=1/2(x_k+n/(x_k))

            先讓我們來驗證下這個巧妙的方法準確性,來算下2的平方根 (Computed by Mathomatic)

            1-> x_new = ( x_old + y/x_old )/2
            y
            (x_old + -----)
            x_old
            #1: x_new = ---------------
            2
            1-> calculate x_old 1
            Enter y: 2
            Enter initial x_old: 1
             x_new = 1.5
            1-> calculate x_old 2
            Enter y: 2
            Enter initial x_old: 1
             x_new = 1.4166666666667
            1-> calculate x_old 3
            Enter y: 2
            Enter initial x_old: 1
             x_new = 1.4142156862745
            1-> calculate x_old 10
            Enter y: 2
            Enter initial x_old: 1
            Convergence reached after 6 iterations.
             x_new = 1.4142135623731
            ...

            可見,隨著迭代次數的增加,運算值會愈發接近真實值。很神奇的算法,可是怎么來的呢? 查了下wikipediawolfram,原來算法的名字叫Newton’s Iteration (牛頓迭代法)。

            下面是數理介紹,不喜歡數學的言下之意也就是絕大部分人可以略過了。

            簡單推導

            假設DE>f(x)DE>是關于DE>XDE>的函數:

            An illustration of on<wbr>e iteration of Newton's method

            求出DE>f(x)DE>的一階導,即斜率:

            f'(x_{n}) = frac{ mathrm{rise} }{ mathrm{run} } = frac{ mathrm{Delta y} }{ mathrm{Delta x} } = frac{ f( x_{n} ) - 0 }{ x_{n} - x_{n+1} } = frac{0 - f(x_{n})}{(x_{n+1} - x_{n})},!

            簡化等式得到:

            x_(n+1)=x_n-(f(x_n))/(f^'(x_n))

            然后利用得到的最終式進行迭代運算直至求到一個比較精確的滿意值,為什么可以用迭代法呢?理由是中值定理(Intermediate Value Theorem):

            如果DE>fDE>函數在閉區間DE>[a,b]DE>內連續,必存在一點DE>xDE>使得DE>f(x) = cDE>,DE>cDE>是函數DE>fDE>在閉區間DE>[a,b]DE>內的一點

            我們先猜測一DE>XDE>初始值,例如1,當然地球人都知道除了1本身之外任何數的平方根都不會是1。然后代入初始值,通過迭代運算不斷推進,逐步靠近精確值,直到得到我們主觀認為比較滿意的值為止。例如要求768的平方根,因為DE>252 = 625DE>,而DE>302 = 900DE>,我們可先代入一猜測值26,然后迭代運算,得到較精確值:27.7128。

            回到我們最開始的那個”莫名其妙”的公式,我們要求的是DE>NDE>的平方根,令DE>x2 = nDE>,假設一關于DE>XDE>的函數DE>f(x)DE>為:

            DE>f(X) = X2 - nDE>

            DE>f(X)DE>的一階導為:

            DE>f'(X) = 2XDE>

            代入前面求到的最終式中:

            DE>Xk+1 = Xk - (Xk2 - n)/2XkDE>

            化簡即得到我們最初提到的那個求平方根的神奇公式了:

            x_(k+1)=1/2(x_k+n/(x_k))

            用泰勒公式推導

            我之前介紹過在The Art and Science of C一書中有用到泰勒公式求平方根的算法,其實牛頓迭代法也可以看作是泰勒公式(Taylor Series)的簡化,先回顧下泰勒公式:

            f(x_0+epsilon)=f(x_0)+f^'(x_0)epsilon+1/2f^('')(x_0)epsilon^2+....

            僅保留等式右邊前兩項:

            f(x_0+epsilon) approx f(x_0)+f^'(x_0)epsilon.

            DE>f(X0+ε) = 0DE>,得到:

            epsilon_0=-(f(x_0))/(f^'(x_0))

            再令DE>X1 = X0 + ε0DE>,得到DE>ε1DE>…依此類推可知:

            epsilon_n=-(f(x_n))/(f^'(x_n))

            轉化為:

            x_(n+1)=x_n-(f(x_n))/(f^'(x_n))

            久久婷婷色香五月综合激情| 久久99热只有频精品8| 日日狠狠久久偷偷色综合免费| 97精品国产91久久久久久| 成人午夜精品久久久久久久小说| 久久人人爽人人精品视频| 亚洲精品午夜国产VA久久成人| 久久99国产精一区二区三区| 色综合久久88色综合天天 | 久久se精品一区精品二区| 亚洲国产成人精品无码久久久久久综合 | 国内精品久久久久影院日本| 久久国产精品免费一区二区三区| 综合人妻久久一区二区精品| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久人人爽人人爽人人片AV东京热 | 久久久精品人妻一区二区三区四 | 精品久久久久久久久免费影院 | 亚洲国产香蕉人人爽成AV片久久| 99久久精品日本一区二区免费| 国产午夜精品理论片久久 | 亚洲综合精品香蕉久久网| 欧美久久综合九色综合| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲国产精品久久久天堂 | 伊人久久成人成综合网222| 午夜不卡888久久| 国产韩国精品一区二区三区久久| 2020国产成人久久精品| 亚洲国产精品嫩草影院久久| 国内精品久久久久久麻豆| 国产精品va久久久久久久| 日本精品久久久中文字幕| 久久精品国产99国产精品澳门| avtt天堂网久久精品| 久久精品国产99国产精品澳门| 国产精品18久久久久久vr | 色综合色天天久久婷婷基地| 成人久久精品一区二区三区| 亚洲国产精品婷婷久久| 国产精品成人无码久久久久久|