牛顿迭代公式(详细)

牛顿迭代公式 X n + 1 = X n − f ( x ) f ′ ( x ) X_{n+1} = X_n -\frac{f(x)}{f'(x)} Xn+1=Xnf(x)f(x)

上网搜了很久,搞懂了一点,简单记录一下

其实弄懂了一点后会发现它并不是很高大上😅

.

先来一段代码

求9的平方根,java实现

public static void main(String[] args) {
        double t = 9;
        while (Math.abs(t-9.0/t)>.001)//牛顿迭代公式 ↓
            t = (9.0/t + t) /2.0; // (a/xn + xn) / 2.0 
        System.out.println(t);
    }
    //

运行结果
3.00009155413138

牛顿迭代公式求平方根并不能算出准确的值,只能无限接近.
	
这里精确度还不是很高,一般情况下是够用了,如果需要更精确,改一下while条件即可.

下面来说一下牛顿迭代公式的原理

牛顿法最初由艾萨克·牛顿在《流数法》(Method of Fluxions,1671年完成,在牛顿去世后于1736年公开发表)中提出。约瑟夫·鲍易也曾于1690年在Analysis Aequationum中提出此方法。

11

求导

  • 首先,我们知道要对哪个数开方,比如现在我们要求出 9 2 \sqrt[2 ]{9 } 29 ,那么可以写出 x 2 − 9 = 0 x^2-9=0 x29=0,这一步我想应该没有人看不懂.

    • . . . . . . . . . . . . f ( x ) = x 2 − 9 f(x) = x^2-9 f(x)=x29 . . . . . .
      .

切线

  • 然后画出它的二维图形,并作出点 ( 9 , f ( 9 ) ) (9,f(9)) (9,f(9))处的切线,切线方程可以表示为
    .
    • . . . . . . . . . . . . y − f ( 9 ) = f ′ ( 9 ) ∗ ( x − 9 ) y-f(9)=f'(9)*(x-9) yf(9)=f(9)(x9) . . . . . 切线方程
    • . . . . . . . . . . . . x = y − f ( 9 ) f ′ ( 9 ) + 9 x= \frac{y-f(9)}{f'(9)}+9 x=f(9)yf(9)+9
      . . . . . . . . . . . . 当 y = 0 y=0 y=0时,. . . . . . 我们求到了 x = 5 x=5 x=5
      这样就朝着结果近了一步
  • 我们的目标 9 \sqrt{9} 9 的解为3,切线与x轴的交点为5,显然不是答案,我们还得继续做点 ( 5 , f ( 5 ) ) (5,f(5)) (5,f(5))的切线

再切

又近了一步耶

  • . . . . . . . . . . . . y − f ( 5 ) = f ′ ( 5 ) ∗ ( x − 5 ) y-f(5)=f'(5)*(x-5) yf(5)=f(5)(x5) . . . . . .切线方程
  • . . . . . . . . . . . . x = y − f ( 5 ) f ′ ( 5 ) + 5 x=\frac{y-f(5)}{f'(5)}+5 x=f(5)yf(5)+5
  • . . . . . . . . . . . . 同样,当 y = 0 y=0 y=0 时, x = 3. ∗ x=3.* x=3., . . . . . .还得继续…

继续切

1

已经很接近了.,就不继续切线了,

1

回顾一下,

f ( x ) = x 2 − a f(x) = x^2 - a f(x)=x2a
f ′ ( x ) = 2 x f'(x) = 2x f(x)=2x
x n + 1 = y − f ( x n ) f ′ ( x n ) + x n x_{n+1} = \frac{y-f(x_n)}{f'(x_n)}+x_n xn+1=f(xn)yf(xn)+xn ,

y = 0 y = 0 y=0 时,

X n + 1 = − f ( x ) f ′ ( x ) + x n X_{n+1} =-\frac{f(x)}{f'(x)} +x_n Xn+1=f(x)f(x)+xn . . . . . . . . . . . . . . . .牛顿迭代公式

化简一下
X n + 1 = − x n 2 − a 2 x n + x n X_{n+1}=-\frac{x_n^2-a}{2x_n}+x_n Xn+1=2xnxn2a+xn

最后得到
X n + 1 = ( a x n + x n ) ∗ 1 2 X_{n+1}=(\frac{a}{x_n}+x_n)*\frac{1}{2} Xn+1=(xna+xn)21

以上就是牛顿迭代求平方根的过程了😅

写成java代码上面的样子
//

//

//

.总结一下:

  1. f ( x ) f(x) f(x)求导,
  2. k = f ′ ( x ) k=f'(x) k=f(x)切线,
  3. 求出 y = 0 y=0 y=0时的 x x x的值, 赋值 x 1 x_1 x1
  4. k = f ′ ( x 1 ) k=f'(x_1) k=f(x1)切线
  5. 求出 y = 0 y=0 y=0时的 x 1 x_1 x1的值,赋值 x 2 x_2 x2
  6. k = f ′ ( x 2 ) k=f'(x_2) k=f(x2)切线

.

参考:
这个动态图易懂
维基百科-牛顿法

.
.
.
.

  • 21
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值