Heron's method генерирует последовательность чисел, которые представляют лучшие и лучшие приближения для √n. Первое число в последовательности - произвольная догадка; каждое другое число в последовательности получается из предыдущего числа пред, используя формулу:Метод Heron в Python
(1/2)*(prev+n/prev)
Я должен написать функцию heron()
, которая принимает в качестве входных данных два числа: п и ошибку. Эта функция должна начинаться с первоначальной догадки 1.0 для √n и затем многократно генерировать лучшие приближения до тех пор, пока разность (точнее, абсолютная величина разницы) между последовательными приближениями не будет больше ошибка.
usage:
>>> heron(4.0, 0.5)
2.05
>>> heron(4.0, 0.1)
2.000609756097561
это немного сложнее, но мне нужно будет следить за четырьмя переменными:
# n, error, prev and current
Я также нужен в то время как петля с условием:
((current - prev) > error):
Общее правило для , в то время как цикл таков:
# old current goes into new prev
Так это то, что я до сих пор, это не так много, потому что, чтобы начать с, я не знаю, как включить «если» заявление под в то время как цикла.
def heron(n, error):
guess = 1
current = 1
prev = 0
while (current - prev) > error:
previous==1/2*(guess+n/guess):
print (previous) # just a simple print statement
# in order to see what i have so far
Может ли кто-нибудь дать мне несколько указателей в правильном направлении, пожалуйста?
спасибо
Пожалуйста, укажите конкретный вопрос. Что тебе нужно? –
ну, я думаю, мне нужно найти способ заставить цикл while применить формулу с результатом, полученным в предыдущем цикле. так что позволяет сказать, что в первом цикле результат был 3, и позволяет предположить, п 5. то новая формула shouls выглядеть следующим образом: 1/2 * (3 + 5/3) , который = 2.3333333333333335 и это число теперь переходит в формулу в следующем цикле, пока условие не будет выполнено. Я просто не могу заставить цикл while работать так. – Snarre
Связанный: [Вычислить квадратный корень с произвольной точностью в Python] (http://stackoverflow.com/a/1623677/4279) – jfs