日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

轻松理解牛顿迭代法且用其求平方根

發(fā)布時(shí)間:2023/12/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 轻松理解牛顿迭代法且用其求平方根 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

牛頓迭代法概述

牛頓迭代法(Newton’s method)又稱為牛頓-拉弗森方法(Newton-Raphson method),它是牛頓在17世紀(jì)提出的一種在實(shí)數(shù)域和復(fù)數(shù)域上近似求解方程的方法。

牛頓迭代公式

設(shè)rrrf(x)=0f(x)=0f(x)=0的根,選取x0x_0x0?作為rrr的初始近似值。

過(guò)點(diǎn)(x0,f(x0))(x_0, f(x_0))(x0?,f(x0?))做曲線y=f(x)y=f(x)y=f(x)的切線L1L_1L1?L1:y=f(x0)+f′(x0)(x?x0)L_1:y = f(x_0)+f'(x_0)(x-x_0)L1?:y=f(x0?)+f(x0?)(x?x0?),則L1L_1L1?xxx軸交點(diǎn)的橫坐標(biāo)x1=x0?f(x0)f′(x0)x_1 = x_0 - \frac{f(x_0)}{f'(x_0)}x1?=x0??f(x0?)f(x0?)?,稱x1x_1x1?rrr的一次近似值。

過(guò)點(diǎn)(x1,f(x1))(x_1, f(x_1))(x1?,f(x1?))做曲線y=f(x)y=f(x)y=f(x)的切線L2L_2L2?L2:y=f(x1)+f′(x1)(x?x1)L_2:y = f(x_1)+f'(x_1)(x-x_1)L2?:y=f(x1?)+f(x1?)(x?x1?),則L2L_2L2?xxx軸交點(diǎn)的橫坐標(biāo)x2=x1?f(x1)f′(x1)x_2=x_1-\frac{f(x_1)}{f'(x_1)}x2?=x1??f(x1?)f(x1?)?,稱x2x_2x2?rrr的二次近似值。

重復(fù)以上過(guò)程,得rrr的近似值序列,其中,xn+1=xn?f(xn)f′(xn)x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}xn+1?=xn??f(xn?)f(xn?)?稱為rrrn+1n+1n+1次近似值,上式稱為牛頓迭代公式

舉個(gè)例子

題目

用牛頓迭代法求出2\sqrt{2}2?的二次正近似值(初始近似值x0=2x_0=2x0?=2)。

解答

x=2?x2?2=0x=\sqrt{2}\Rightarrow x^2-2=0x=2??x2?2=0

f(x)=x2?2f(x)=x^2-2f(x)=x2?2

f′(x)=2xf'(x)=2xf(x)=2x

設(shè)rrrf(x)=0f(x)=0f(x)=0的正根,x0=2x_0=2x0?=2作為rrr的初始近似值。

f(x)f(x)f(x)過(guò)點(diǎn)A(2,f(2))?A(2,2)A(2,f(2))\Rightarrow A(2,2)A(2,f(2))?A(2,2)

過(guò)點(diǎn)AAA作曲線y=f(x)y=f(x)y=f(x)的切線L1L_1L1?

L1:y=f(x0)+f′(x0)(x?x0)L_1:y = f(x_0)+f'(x_0)(x-x_0)L1?:y=f(x0?)+f(x0?)(x?x0?)

y=2+2?2?(x?2)y=2+2\cdot2\cdot(x-2)y=2+2?2?(x?2)

y=4x?6y=4x-6y=4x?6

L1L_1L1?xxx軸交點(diǎn)的橫坐標(biāo)x1x_1x1?:

0=4x1?60=4x_1-60=4x1??6

x1=32x_1=\frac{3}{2}x1?=23?

或者直接用牛頓迭代公式:

x1=x0?f(x0)f′(x0)=2?22?22?2=2?12=32x_1=x_0-\frac{f(x_0)}{f'(x_0)}=2-\frac{2^2-2}{2\cdot2}=2-\frac{1}{2}=\frac{3}{2}x1?=x0??f(x0?)f(x0?)?=2?2?222?2?=2?21?=23?

x1x_1x1?rrr的一次近似值。


f(x)f(x)f(x)過(guò)點(diǎn)B(32,f(32))?B(32,14)B(\frac{3}{2}, f(\frac{3}{2}))\Rightarrow B(\frac{3}{2},\frac{1}{4})B(23?,f(23?))?B(23?,41?)

過(guò)點(diǎn)BBB作曲線y=f(x)y=f(x)y=f(x)的切線L2L_2L2?

L2:y=f(x1)+f′(x1)(x?x1)L_2:y = f(x_1)+f'(x_1)(x-x_1)L2?:y=f(x1?)+f(x1?)(x?x1?)

y=14+2?32?(x?32)y=\frac{1}{4}+2\cdot\frac{3}{2}\cdot(x-\frac{3}{2})y=41?+2?23??(x?23?)

y=3x?174y=3x-\frac{17}{4}y=3x?417?

L2L_2L2?xxx軸交點(diǎn)的橫坐標(biāo)x2x_2x2?:

0=3x2?1740=3x_2-\frac{17}{4}0=3x2??417?

x2=1712=1.41666666˙x_2=\frac{17}{12}=1.4166666\dot{6}x2?=1217?=1.41666666˙

或者直接用牛頓迭代公式:

x2=x1?f(x1)f′(x1)=32?(32)2?22?32=32?112=1712x_2=x_1-\frac{f(x_1)}{f'(x_1)}=\frac{3}{2}-\frac{(\frac{3}{2})^2-2}{2\cdot \frac{3}{2}}=\frac{3}{2}-\frac{1}{12}=\frac{17}{12}x2?=x1??f(x1?)f(x1?)?=23??2?23?(23?)2?2?=23??121?=1217?

x2x_2x2?rrr的二次近似值。

綜上所述,2\sqrt{2}2?的二次正近似值為1712=1.41666666˙\frac{17}{12}=1.4166666\dot{6}1217?=1.41666666˙

用牛頓迭代法求平方根的Java程序?qū)崿F(xiàn)

假設(shè)你想用程序?qū)崿F(xiàn)求出aaa的正平方根。

已知三個(gè)公式:

  • 牛頓迭代公式 xn+1=xn?f(xn)f′(xn)x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}xn+1?=xn??f(xn?)f(xn?)?
  • f(x)=x2?af(x)=x^2-af(x)=x2?a
  • f′(x)=2xf'(x)=2xf(x)=2x
  • 由三個(gè)公式可得:

    xn+1=xn?xn2?a2xnx_{n+1}=x_n-\frac{x_n^2-a}{2x_n}xn+1?=xn??2xn?xn2??a?

    xn+1=xn2+a2xnx_{n+1}=\frac{x_n^2+a}{2x_n}xn+1?=2xn?xn2?+a?

    xn+1=xn+axn2x_{n+1}=\frac{x_n+\frac{a}{x_n}}{2}xn+1?=2xn?+xn?a??

    因此,容易編寫出以下程序:

    public class Sqrt {public static void main(String[] args) {System.out.println(sqrt(2));}private static double sqrt(double a) {if (num < 0)throw new IllegalArgumentException();double err = 1E-15;double cur = a;while (Math.abs(a - cur * cur) > err)//精度越來(lái)越高cur = (cur + a / cur) / 2;return cur;} }

    參考資料

  • 牛頓迭代法_百度百科
  • 如何通俗易懂地講解牛頓迭代法求開(kāi)方?數(shù)值分析? - 知乎
  • 牛頓迭代法快速尋找平方根
  • 牛頓求根法
  • 總結(jié)

    以上是生活随笔為你收集整理的轻松理解牛顿迭代法且用其求平方根的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。