给定一个数,如何求它的平方根(不能使用内置函数,如sqrt()函数)

牛顿法:在实数域和复数域上近似求解方程的方法。

多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。

方法使用函数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

 

你可能感兴趣的:(给定一个数,如何求它的平方根(不能使用内置函数,如sqrt()函数))