牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
设 r r r是 f ( x ) = 0 f(x)=0 f(x)=0 的根,选取 x 0 x_0 x0作为 x x x的初始近似值,过点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0)) 做曲线 f ( x ) f(x) f(x)的切线 L L L , L : y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) L:y = f(x_0)+f^{'}(x_0)(x-x_0) L:y=f(x0)+f′(x0)(x−x0) ,则 L L L 与 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 x1 x1称 为 f ( x ) = 0 f(x)=0 f(x)=0 的一次近似值。过点 ( x 1 , f ( x 1 ) ) (x_1,f(x_1)) (x1,f(x1)) 做曲线 y = f ( x ) y=f(x) y=f(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) ,称 为 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 次近似值,上式称为牛顿迭代公式。
-
应用牛顿迭代法求解 x \sqrt{x} x
设 f ( x ) = x 2 − c f(x)=x^2-c f(x)=x2−c,取一个接近的值 x 0 x_0 x0作为初始值,则第一次近似值为 x 1 = x 0 − x 0 2 − c 2 x 0 x_1=x_0-\frac{x_0^2-c}{2x_0} x1=x0−2x0x02−c,第二次近似值为 x 2 = x 1 − x 1 2 − c 2 x 1 x_2=x_1-\frac{x_1^2-c}{2x_1} x2=x1−2x1x12−c,…,第 n + 1 {n+1} n+1次近似值为 x n + 1 = x n − x n 2 − c 2 x n x_{n+1}=x_n-\frac{x_n^2-c}{2x_n} xn+1=xn−2xnxn2−c,化简得出迭代公式: x n + 1 = 1 2 ( x n + c x n ) x_{n+1}=\frac{1}{2}(x_n+\frac{c}{x_n}) xn+1=21(xn+xnc).
-
javascript代码实现
//求绝对值
function abs(x) {
return x > 0 ? x : -x;
}
//牛顿迭代法求解算术平方根算法
function sqrt(x) {
if(x == 1)
return 1;
var x0 = 1;
var x1;
var x2 = x0;
var y = x;
//如果误差大于10^-6,就继续进行迭代
while (abs(x2 - y) >= 1e-6) {
//迭代核心公式
x1 = (x0 + x/x0)/2;
x2 = x0;
y = x1;
x0 = x1;
}
return x1;
}
//输出100以内的所有整数的算术平方根
for(var i = 1 ; i < 100 ; i++) {
console.log(i + '的算术平方根的值为'+sqrt(i));
}