逐次逼近法

结构:

开始于某种猜想

迭代 for iter in range (100)

     if f(guess)close enough

     return  guess

    else guess= better guess 

error #证明100次迭代后还未找到合适答案,方法有问题

适用于:有一系列线性可能的答案,----------------!---------------------

逐次二分逼近,处理过程:对数级别

断言语句:对断定进行测试。

def squareRootBi(x, epsilon):
    """Assume x >= 0 and epsilon > 0
    Return y s.t. y*y is within epsilon(ε) of x"""

    assert epsilon > 0, 'epsilon must be postive, not' + str(epsilon)
    low = 0
    high = max(x, 1)
    guess = (low + high) / 2.0
    ctr = 1
    while abs(guess ** 2 - x) > epsilon and ctr <= 100:
        # print 'low:', low, 'high:', high, 'guess:', guess 
        if guess**2 < x:
            low = guess
        else:
            high = guess
        guess = (low + high) / 2.0
        ctr += 1
    assert ctr <= 100, 'Iteration count exceeded'
    print 'Bi method. Num. iterations:', ctr, 'Estimate:', guess
    return guess

def squareRootNR(x, epsilon):
    """Return y s.t. y*y is within epsilon of x"""

    assert epsilon > 0, 'epsilon must be postive, not' + str(epsilon)
    x = float(x)
    guess = x / 2.0
    guess = 0.001
    diff = guess ** 2 - x
    ctr = 1
    while abs(diff) > epsilon and ctr <= 100:
        # print 'Error:', diff, 'guess:', guess 
        guess = guess - diff/(2.0*guess)
        diff = guess ** 2 - x
        ctr += 1
    assert ctr <= 100, 'Iteration count exceeded'
    print 'NR method. Num. iterations:', ctr, 'Estimate:', guess
    return guess





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值