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

牛顿迭代法概述

牛顿迭代法(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)(xx0),则 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=x0f(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)(xx1),则 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=x1f(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=xnf(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 x22=0

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

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)(xx0)

y = 2 + 2 ⋅ 2 ⋅ ( x − 2 ) y=2+2\cdot2\cdot(x-2) y=2+22(x2)

y = 4 x − 6 y=4x-6 y=4x6

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

0 = 4 x 1 − 6 0=4x_1-6 0=4x16

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=x0f(x0)f(x0)=222222=221=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)(xx1)

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+223(x23)

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

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=3x2417

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=x1f(x1)f(x1)=23223(23)22=23121=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的正平方根。

已知三个公式:

  1. 牛顿迭代公式 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=xnf(xn)f(xn)
  2. f ( x ) = x 2 − a f(x)=x^2-a f(x)=x2a
  3. 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=xn2xnxn2a

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

x n + 1 = x n + a x n 2 x_{n+1}=\frac{x_n+\frac{a}{x_n}}{2} xn+1=2xn+xna

因此,容易编写出以下程序:

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)//精度越来越高
            cur = (cur + a / cur) / 2;
        return cur;
    }
}

参考资料

  1. 牛顿迭代法_百度百科
  2. 如何通俗易懂地讲解牛顿迭代法求开方?数值分析? - 知乎
  3. 牛顿迭代法快速寻找平方根
  4. 牛顿求根法

猜你喜欢

转载自blog.csdn.net/u011863024/article/details/113095704