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

您所在的位置:网站首页 x的平方求x的值 轻松理解牛顿迭代法且用其求平方根

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

2024-07-14 07:29| 来源: 网络整理| 查看: 265

牛顿迭代法概述

牛顿迭代法(Newton’s method)又称为牛顿-拉弗森方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

牛顿迭代公式

设 r r r是 f ( x ) = 0 f(x)=0 f(x)=0的根,选取 x 0 x_0 x0​作为 r r r的初始近似值。

过点 ( x 0 , f ( x 0 ) ) (x_0, f(x_0)) (x0​,f(x0​))做曲线 y = f ( x ) y=f(x) y=f(x)的切线 L 1 L_1 L1​, L 1 : y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) L_1:y = f(x_0)+f'(x_0)(x-x_0) L1​:y=f(x0​)+f′(x0​)(x−x0​),则 L 1 L_1 L1​与 x x x轴交点的横坐标 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1 = x_0 - \frac{f(x_0)}{f'(x_0)} x1​=x0​−f′(x0​)f(x0​)​,称 x 1 x_1 x1​为 r r r的一次近似值。

过点 ( x 1 , f ( x 1 ) ) (x_1, f(x_1)) (x1​,f(x1​))做曲线 y = f ( x ) y=f(x) y=f(x)的切线 L 2 L_2 L2​, L 2 : y = f ( x 1 ) + f ′ ( x 1 ) ( x − x 1 ) L_2:y = f(x_1)+f'(x_1)(x-x_1) L2​:y=f(x1​)+f′(x1​)(x−x1​),则 L 2 L_2 L2​与 x x x轴交点的横坐标 x 2 = x 1 − f ( x 1 ) f ′ ( x 1 ) x_2=x_1-\frac{f(x_1)}{f'(x_1)} x2​=x1​−f′(x1​)f(x1​)​,称 x 2 x_2 x2​为 r r r的二次近似值。

重复以上过程,得 r r r的近似值序列,其中, x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)} xn+1​=xn​−f′(xn​)f(xn​)​称为 r r r的 n + 1 n+1 n+1次近似值,上式称为牛顿迭代公式。

举个例子 题目

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

解答

x = 2 ⇒ x 2 − 2 = 0 x=\sqrt{2}\Rightarrow x^2-2=0 x=2 ​⇒x2−2=0

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

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

设 r r r是 f ( x ) = 0 f(x)=0 f(x)=0的正根, x 0 = 2 x_0=2 x0​=2作为 r r r的初始近似值。

f ( x ) f(x) f(x)过点 A ( 2 , f ( 2 ) ) ⇒ A ( 2 , 2 ) A(2,f(2))\Rightarrow A(2,2) A(2,f(2))⇒A(2,2)。

过点 A A A作曲线 y = f ( x ) y=f(x) y=f(x)的切线 L 1 L_1 L1​:

L 1 : y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) 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 = 4 x − 6 y=4x-6 y=4x−6

则 L 1 L_1 L1​与 x x x轴交点的横坐标 x 1 x_1 x1​:

0 = 4 x 1 − 6 0=4x_1-6 0=4x1​−6

x 1 = 3 2 x_1=\frac{3}{2} x1​=23​

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

x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) = 2 − 2 2 − 2 2 ⋅ 2 = 2 − 1 2 = 3 2 x_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​

x 1 x_1 x1​为 r r r的一次近似值。

在这里插入图片描述

f ( x ) f(x) f(x)过点 B ( 3 2 , f ( 3 2 ) ) ⇒ B ( 3 2 , 1 4 ) B(\frac{3}{2}, f(\frac{3}{2}))\Rightarrow B(\frac{3}{2},\frac{1}{4}) B(23​,f(23​))⇒B(23​,41​)。

过点 B B B作曲线 y = f ( x ) y=f(x) y=f(x)的切线 L 2 L_2 L2​:

L 2 : y = f ( x 1 ) + f ′ ( x 1 ) ( x − x 1 ) L_2:y = f(x_1)+f'(x_1)(x-x_1) L2​:y=f(x1​)+f′(x1​)(x−x1​)

y = 1 4 + 2 ⋅ 3 2 ⋅ ( x − 3 2 ) y=\frac{1}{4}+2\cdot\frac{3}{2}\cdot(x-\frac{3}{2}) y=41​+2⋅23​⋅(x−23​)

y = 3 x − 17 4 y=3x-\frac{17}{4} y=3x−417​

则 L 2 L_2 L2​与 x x x轴交点的横坐标 x 2 x_2 x2​:

0 = 3 x 2 − 17 4 0=3x_2-\frac{17}{4} 0=3x2​−417​

x 2 = 17 12 = 1.4166666 6 ˙ x_2=\frac{17}{12}=1.4166666\dot{6} x2​=1217​=1.41666666˙

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

x 2 = x 1 − f ( x 1 ) f ′ ( x 1 ) = 3 2 − ( 3 2 ) 2 − 2 2 ⋅ 3 2 = 3 2 − 1 12 = 17 12 x_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​

x 2 x_2 x2​为 r r r的二次近似值。

在这里插入图片描述

综上所述, 2 \sqrt{2} 2 ​的二次正近似值为 17 12 = 1.4166666 6 ˙ \frac{17}{12}=1.4166666\dot{6} 1217​=1.41666666˙。

用牛顿迭代法求平方根的Java程序实现

假设你想用程序实现求出 a a a的正平方根。

已知三个公式:

牛顿迭代公式 x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)} xn+1​=xn​−f′(xn​)f(xn​)​ f ( x ) = x 2 − a f(x)=x^2-a f(x)=x2−a f ′ ( x ) = 2 x f'(x)=2x f′(x)=2x

由三个公式可得:

x n + 1 = x n − x n 2 − a 2 x n x_{n+1}=x_n-\frac{x_n^2-a}{2x_n} xn+1​=xn​−2xn​xn2​−a​

x n + 1 = x n 2 + a 2 x n x_{n+1}=\frac{x_n^2+a}{2x_n} xn+1​=2xn​xn2​+a​

x n + 1 = x n + a x n 2 x_{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 err)//精度越来越高 cur = (cur + a / cur) / 2; return cur; } } 参考资料 牛顿迭代法_百度百科如何通俗易懂地讲解牛顿迭代法求开方?数值分析? - 知乎牛顿迭代法快速寻找平方根牛顿求根法


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3