Я пытаюсь реализовать метод Ньютона-Рафсона на Haskell, и до сих пор мне удалось заставить его работать с помощью функции iterate
, но проблема в том, что он перезапускает список infinte из-за характераитеративная функция, поэтому я ищу способ остановить цикл, когда значение, полученное в итерации, попадает в установленный предел погрешности, и возвращая указанное значение
Я просмотрел несколько сообщений в блоге и даже некоторые вопросыздесь, но я довольно новичок в haskell и не совсем разбираюсь в синтаксисе, так что для меня чтение примеров кода или документации на данный момент действительно трудное.
Определения f (x) и g (x)(производные) не имеют значения:
newton x0 = iterate step x0
where step xn = xn - ((f xn)/(g xn))
В настоящее время я работаю, беря первые элементы данного списка, используя take 4 $ newton 3.5
в приглашении GHCi, но список, возвращаемый iterate
, бесконечен, поэтому я не могу использовать функцию хвоста на нем.
Моя идея состоит в том, чтобы установить где-нибудь постоянную, margin = 0.0001
или что-то в этом роде, и при последней итерации функции Ньютонаon отстает от поля, функция iterate
останавливается, и у меня есть окончательный результат