牛顿法:在实数域和复数域上近似求解方程的方法。
多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。
方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。
设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。
过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。
开根号的问题可以看作求解f(x) = x2 - a = 0的根。
(1)在曲线f(x)=x^2-a上任取一点(x0,f(x0)),x0≠0,该点的切线方程为:
(2)该切线与x轴的交点为:
(3)不断用新的交点来更新原来的交点(即逼近的过程)
根据牛顿迭代的原理,可以得到以下的迭代公式:
代码:
import math
#要开根得数
a = 2
#初始值
x = 1.0
p = 1e-5
while math.fabs(x*x-a) > p:
x = (x + a/x) / 2.0
print(x)
结果:
1.4142156862745097
参考:https://www.cnblogs.com/wangkundentisy/p/8118007.html