2014-09-06 2 views
0

Почему мы использовали функцию max. Разве мы не можем сразу оценить значение х. Это также достигнет нашей цели. Итак, как алгоритм улучшается с помощью этой функции max()?поиск по бисекции с использованием функции max()

x=25 
epsilon=0.01 
numGuesses= 0 
low =0.0 
high = max(1.0,x) 
ans = (high+low)/ 2.0 
while abs(ans**2 -x)>= epsilon: 
    print 'low =', low, 'high =', high, 'ans =', ans 
    numGuesses+= 1 
    if ans**2 <= x: 
     low= ans 
    else: 
     high= ans 
    ans = (high+low)/2.0 
print 'numGuesses =', numGuesses 
print ans, 'is close to square root of', x 
+0

Возможно, 'x' меняется, поскольку этот код приближается к квадратному корню из' x '. – Ryan

+0

:(не могу разобраться, вы можете разработать @minitech – user3995169

+1

Этот код приблизительно соответствует квадратному корню 'x'. Разумеется,' x' не всегда будет 25. Попробуйте с помощью 'high = x' и' x = 0.1', он никогда не сходится. – Ryan

ответ

3

Точка коды является приближенным квадратным корнем для любого x значения, а не только для 25. Мы делаем это, установив значение в low и high, что мы знаем, ниже и выше, соответственно, чем квадратный корень, а затем делать математику, чтобы приблизить их к правильному значению.

Когда x находится между 0 и 1, квадратный корень x больше, чем x. Поэтому мы не можем просто установить high на x, так как он должен начинаться выше желаемого ответа. Но в этих случаях мы также знаем, что квадратный корень из x меньше 1, поэтому 1 будет работать как начальное значение high. (Аналогично, когда x больше 1, квадратный корень от x также будет больше 1, но он будет меньше x.)

+0

yaa square корень 0,9 составляет 0,94243 (что-то). Итак, если это произойдет, будет max pass 1.0 вместо 1 ie max (1.0,1)? можете ли вы объяснить немного больше @KarlKnechtel – user3995169

+0

Простите, я не понимаю, вопрос. –

Смежные вопросы