苏州企业网站建设网络服务,php做手机网站,网站提交工具,专业的网站首页建设公司牛顿迭代法概述
牛顿迭代法#xff08;Newton’s method#xff09;又称为牛顿-拉弗森方法#xff08;Newton-Raphson method#xff09;#xff0c;它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
牛顿迭代公式
设rrr是f(x)0f(x)0f(x)0的根#…牛顿迭代法概述
牛顿迭代法Newton’s method又称为牛顿-拉弗森方法Newton-Raphson method它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
牛顿迭代公式
设rrr是f(x)0f(x)0f(x)0的根选取x0x_0x0作为rrr的初始近似值。
过点(x0,f(x0))(x_0, f(x_0))(x0,f(x0))做曲线yf(x)yf(x)yf(x)的切线L1L_1L1L1:yf(x0)f′(x0)(x−x0)L_1:y f(x_0)f(x_0)(x-x_0)L1:yf(x0)f′(x0)(x−x0)则L1L_1L1与xxx轴交点的横坐标x1x0−f(x0)f′(x0)x_1 x_0 - \frac{f(x_0)}{f(x_0)}x1x0−f′(x0)f(x0)称x1x_1x1为rrr的一次近似值。
过点(x1,f(x1))(x_1, f(x_1))(x1,f(x1))做曲线yf(x)yf(x)yf(x)的切线L2L_2L2L2:yf(x1)f′(x1)(x−x1)L_2:y f(x_1)f(x_1)(x-x_1)L2:yf(x1)f′(x1)(x−x1)则L2L_2L2与xxx轴交点的横坐标x2x1−f(x1)f′(x1)x_2x_1-\frac{f(x_1)}{f(x_1)}x2x1−f′(x1)f(x1)称x2x_2x2为rrr的二次近似值。
重复以上过程得rrr的近似值序列其中xn1xn−f(xn)f′(xn)x_{n1}x_n-\frac{f(x_n)}{f(x_n)}xn1xn−f′(xn)f(xn)称为rrr的n1n1n1次近似值上式称为牛顿迭代公式。
举个例子
题目
用牛顿迭代法求出2\sqrt{2}2的二次正近似值初始近似值x02x_02x02。
解答
x2⇒x2−20x\sqrt{2}\Rightarrow x^2-20x2⇒x2−20
f(x)x2−2f(x)x^2-2f(x)x2−2
f′(x)2xf(x)2xf′(x)2x
设rrr是f(x)0f(x)0f(x)0的正根x02x_02x02作为rrr的初始近似值。
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)。
过点AAA作曲线yf(x)yf(x)yf(x)的切线L1L_1L1
L1:yf(x0)f′(x0)(x−x0)L_1:y f(x_0)f(x_0)(x-x_0)L1:yf(x0)f′(x0)(x−x0)
y22⋅2⋅(x−2)y22\cdot2\cdot(x-2)y22⋅2⋅(x−2)
y4x−6y4x-6y4x−6
则L1L_1L1与xxx轴交点的横坐标x1x_1x1:
04x1−604x_1-604x1−6
x132x_1\frac{3}{2}x123
或者直接用牛顿迭代公式:
x1x0−f(x0)f′(x0)2−22−22⋅22−1232x_1x_0-\frac{f(x_0)}{f(x_0)}2-\frac{2^2-2}{2\cdot2}2-\frac{1}{2}\frac{3}{2}x1x0−f′(x0)f(x0)2−2⋅222−22−2123
x1x_1x1为rrr的一次近似值。 f(x)f(x)f(x)过点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)。
过点BBB作曲线yf(x)yf(x)yf(x)的切线L2L_2L2
L2:yf(x1)f′(x1)(x−x1)L_2:y f(x_1)f(x_1)(x-x_1)L2:yf(x1)f′(x1)(x−x1)
y142⋅32⋅(x−32)y\frac{1}{4}2\cdot\frac{3}{2}\cdot(x-\frac{3}{2})y412⋅23⋅(x−23)
y3x−174y3x-\frac{17}{4}y3x−417
则L2L_2L2与xxx轴交点的横坐标x2x_2x2:
03x2−17403x_2-\frac{17}{4}03x2−417
x217121.41666666˙x_2\frac{17}{12}1.4166666\dot{6}x212171.41666666˙
或者直接用牛顿迭代公式:
x2x1−f(x1)f′(x1)32−(32)2−22⋅3232−1121712x_2x_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}x2x1−f′(x1)f(x1)23−2⋅23(23)2−223−1211217
x2x_2x2为rrr的二次近似值。 综上所述2\sqrt{2}2的二次正近似值为17121.41666666˙\frac{17}{12}1.4166666\dot{6}12171.41666666˙。
用牛顿迭代法求平方根的Java程序实现
假设你想用程序实现求出aaa的正平方根。
已知三个公式
牛顿迭代公式 xn1xn−f(xn)f′(xn)x_{n1}x_n-\frac{f(x_n)}{f(x_n)}xn1xn−f′(xn)f(xn)f(x)x2−af(x)x^2-af(x)x2−af′(x)2xf(x)2xf′(x)2x
由三个公式可得
xn1xn−xn2−a2xnx_{n1}x_n-\frac{x_n^2-a}{2x_n}xn1xn−2xnxn2−a
xn1xn2a2xnx_{n1}\frac{x_n^2a}{2x_n}xn12xnxn2a
xn1xnaxn2x_{n1}\frac{x_n\frac{a}{x_n}}{2}xn12xnxna
因此容易编写出以下程序
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;}
}参考资料
牛顿迭代法_百度百科如何通俗易懂地讲解牛顿迭代法求开方数值分析 - 知乎牛顿迭代法快速寻找平方根牛顿求根法