二分法与牛顿迭代法实现根号10的精确结果(保留到小数点后10位)

文章目录

  • 前言
  • 一、二分法
  • 二、牛顿迭代法
  • 三、numpy的库函数sqrt()


前言

三种方法求根号10的结果,精确到小数点后面10位,二分法和牛顿迭代法是自己手动实现,numpy中的sqrt()是调用函数实现


下面是三种方法求出来的结果以及花费的时间

一、二分法

import time
accuracy=1.0e-10#定义精确度1乘以1010次方,就是小数点精度的要求范围
print("精度:",format(accuracy,'.12f'))

erfenTime=0;#三种方法花费的时间
newTonTime=0;
numpyTime=0;

精度: 0.000000000100

def sq10():
    """二分法"""
    start = time.time()
    left=3
    right=4
    mid=(right+left)/2
    while right-left>accuracy:
        if mid*mid>10:
            right=mid
        else:
            left=mid
        mid=(right+left)/2
    end = time.time()
    erfenTime=end - start    
    print("二分法计算根号10的结果:{}".format(mid))
    print("二分法程序所花费的时间:{}".format(erfenTime))
    return mid
sq10()

二分法计算根号10的结果:3.162277660187101
二分法程序所花费的时间:8.821487426757812e-06

二、牛顿迭代法

代码如下(示例):

def myiter():
    """牛顿迭代法"""
    start = time.time()
    x=3.2
    eta=2;
    while abs(x * x - 10)>accuracy:
        y = x * x - 10
        dy = 2 * x
        x=x-y/(eta*dy)
        # // print("当前的x是:{},当前的y是:{}".format(x,y))
    end = time.time()
    newTonTime=end - start    
    print("牛顿迭代法计算根号10的结果是:{}".format(x))
    print("牛顿迭代程序所花费的时间:{}".format(newTonTime))
    return x
myiter()

牛顿迭代法计算根号10的结果是:3.162277660177267
牛顿迭代程序所花费的时间:1.239776611328125e-05

三、numpy的库函数sqrt()

import numpy as np
t1=time.time()
print("numpy中sqrt()函数计算的结果:{}".format(np.sqrt(10)))
t2=time.time()
numpyTime=t2-t1
print("numpy中sqrt()函数所花的时间:{}".format(numpyTime))

numpy中sqrt()函数计算的结果:3.1622776601683795
numpy中sqrt()函数所花的时间:0.000225067138671875

你可能感兴趣的:(Python基础语法)