01 牛顿迭代公式

01

设 r 是f(x) = 0的根,选取 x 0 x_0 x0 作为r的初始近似值,过点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0)) 做曲线 y = f ( x ) y = f(x) y=f(x) 的切线L,L的方程为 y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) y = f(x_0)+f'(x_0)(x-x_0) y=f(x0)+f(x0)(xx0),求出L与x轴交点的横坐标 x 1 = x 0 − f ( x 0 ) / f ′ ( x 0 ) x_1 = x_0-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)定位切线,并求该切线与x轴交点的横坐标,也就是当 y = 0 y=0 y=0时, x 2 = x 1 − f ( x 1 ) / f ′ ( x 1 ) x_2=x_1-f(x_1)/f'(x_1) x2=x1f(x1)/f(x1),称为r的二次近似值

重复以上过程,得r的近似值序列,其中, x n + 1 = x n − f ( x n ) / f ′ ( x n ) x_n+1 = x_n-f(x_n)/f'(x_n) xn+1=xnf(xn)/f(xn)是r的n+1次近似根,这个式子也称作牛顿迭代公式。

已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。

02 Python实现

def newton(x0, niter,threshold, f, f_grade):
    iter = 0
    while niter>0:
        x1 = x0 - f(x0)/f_grade(x0)
        if f(x1)<threshold:
            break
        x0 = x1
        iter +=1
        print(str(iter)+"x="+str(x1))
        niter-=1
    return x1

s = newton(50, 100, 1e-10, lambda x:x*x-11*x+10, lambda x: 2*x - 11)
print('solve = '+ str(s))

结果为:

1x=27.97752808988764
2x=17.189213932471937
3x=12.210790103826884
4x=10.364159272422459
5x=10.013631541265838
6x=10.000020584192082
7x=10.000000000047079
solve = 10.0

方程为 f ( x ) = x 2 − 11 × x + 10 f(x)= x^2-11×x+10 f(x)=x211×x+10
依次求导后公式为: f ′ ( x ) = 2 × x − 11 f&#x27;(x) = 2×x - 11 f(x)=2×x11
r = 10

致谢:公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值