结构:
开始于某种猜想
迭代 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:
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:
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