Реализация метода Ньютона в Clojure - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь реализовать метод Ньютона в ближайшем будущем, чтобы решить уравнение f (x) = 0. Функция принимает следующие аргументы: f (функция) f '(производная функции) n (число итераций) = 10 и x0 (начальное предположение) = 10.

 (defn newtons-method [f f' n x0]
     (if (<= (f x0))
         n
         (newtons-method f f' (- x0 (/ (f x0) (f' x0))) (+ n 1)))
     )

Я получаю вывод 10,но вместо этого я хочу получить окончательное решение x и результат f (x), и я знаю, что 10 неверно, потому что моя функция f и ее производная дают правильный ответ, поэтому я предполагаю, что я ошибаюсь где-то в итерациях

1 Ответ

1 голос
/ 10 ноября 2019

Ну, похоже, у тебя есть как минимум две проблемы. Во-первых, ваше условное выражение всегда будет возвращать true (при условии, что (f x0) возвращает числовое значение), так что это, скорее всего, не то, что вы хотите сделать.

Кроме того, чтобы правильно реализовать рекурсивные функции в clojure, вам следуетвзгляните на recur , в противном случае вы можете столкнуться с переполнением стека (маловероятно, но все же)

Другая незначительная вещь, вместо выполнения (+ n 1), идиоматично использовать(inc n)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...