python 二分法,牛顿拉浮生求平方根笔记(MIT视频学习)

二分法即对猜想值在一个闭合区间内,通过判断区间的中点与猜想值的大小来不断地缩小猜想值的区间从来无限接近猜想值的办法。但是

def BinarySearch(array,t):
    low = 0
    height = len(array)-1
    while low < height:
        mid = (low+height)/2
        if array[mid] < t:
            low = mid + 1

            elif array[mid] > t:
            height = mid - 1

        else:
            return array[mid]

    return -1


if __name__ == "__main__":
    print BinarySearch([1,2,3,34,56,57,78,87],57)

t为猜想数,若mid<t时low+1,若(low+1)>t了,猜想数就不在判断的区间了,难道只能为整数不能为浮点数?

牛顿拉浮生办法求平方数:

 f(x)=x**2-a #a为被开方数

Xn+1=Xn-f(x)/2Xn

Xn+1在不断循环下去最终接近实际值的方法

例如,求16的开方数,猜想数为3

f(3)=9-16=-7,Xn+1=3-(-7)/2*3=4.111

f(4.11)继续下去,但是代码中

def SquarerootNR(x,eplison):

    assert x>=0, 'x must be non negtive not'+str(x)

    assert eplison>0,'eplison must be positive not'+str(eplison)

    x=float(x)

    guess=x

    diff=guess**2-x

    ctr=1(是否为迭代次数?)

    while abs(diff)>eplison and ctr<=100:(为何要用此判断条件?)eplison为最小整数,绝对值了都是最小的正数啊?

        guess=guess-diff/(2*guess)

        diff=guess**2-x

        ctr+=1

    assert ctr<=100 ,'the times of iteration is too much'

    print 'NR method:'

    print 'guess: %f iteration: %d' %(guess,ctr)

    return guess

转载于:https://my.oschina.net/u/3053846/blog/841681

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值