二分法:
import math
from math import sqrt
def sqrt_binary(num):
x = sqrt(num)
y = num / 2.0
min = 0.0
max = num * 1.0
count = 1
while abs(y - x) > 0.00000001:
print (count, y)
count += 1
if (y>x):
max = y
else:
min = y
y = min+ (max - min) / 2
return y
print(sqrt_binary(5))
print(sqrt(5))
2.牛顿法
在曲线上随便找一个的A点,(事先不知道根点就是解在那儿,所以随便找一个点),做一个切线,切线的根(就是和x轴的交点)与曲线的根,存在一定的距离。可以从这个切线的根出发,做一根垂线,和曲线相交于B点,继续重复刚才的工作:可以发现
B点比之前A点更接近曲线的根点。那么经过多次迭代后会越来越接近曲线的根。
已知曲线方程f(x),在xn点做切线,求xn+1:
def sqrt(n): result=1.0 while abs(result*result-n)>0.001: result=(result+n/result)/2 print(result) return result print(sqrt(9))