• <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 閱讀(715) 評論(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))

            中文国产成人精品久久不卡| 久久久久久久人妻无码中文字幕爆| 国产成人精品久久一区二区三区| 国产精品一久久香蕉国产线看| 亚洲狠狠久久综合一区77777| 久久se这里只有精品| 久久人人爽人人爽人人片AV东京热| 色诱久久久久综合网ywww| 国产福利电影一区二区三区久久老子无码午夜伦不 | 思思久久好好热精品国产| 欧美精品国产综合久久| 久久精品草草草| 人妻无码αv中文字幕久久琪琪布| 一本大道久久a久久精品综合| 久久伊人精品一区二区三区| 91超碰碰碰碰久久久久久综合| 色欲av伊人久久大香线蕉影院| 久久国产精品无码网站| 狠狠色噜噜狠狠狠狠狠色综合久久| 一级a性色生活片久久无少妇一级婬片免费放 | 天天做夜夜做久久做狠狠| 久久精品人人做人人妻人人玩| 亚洲国产成人精品女人久久久| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 亚洲国产精品成人久久| 久久久久这里只有精品| 亚洲成色999久久网站| 久久久久亚洲精品天堂| 亚洲AV日韩精品久久久久久久| 亚洲色欲久久久久综合网| 久久久久亚洲AV无码专区网站| 久久精品国产精品亚洲精品| 精品久久久久久中文字幕| 国产人久久人人人人爽| 2020久久精品国产免费| 久久久久久久尹人综合网亚洲| .精品久久久麻豆国产精品| 久久精品国产亚洲AV无码偷窥| 久久久久亚洲AV无码永不| 久久久老熟女一区二区三区| 国产精品久久久久jk制服|