Function: math-poly-newton-root
math-poly-newton-root is a byte-compiled function defined in
calcalg2.el.gz.
Signature
(math-poly-newton-root P X ITERS)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calcalg2.el.gz
(defun math-poly-newton-root (p x iters)
(let* ((calc-prefer-frac nil)
(calc-symbolic-mode nil)
(try-integer math-int-coefs)
(dx x) b d)
(while (and (> (setq iters (1- iters)) 0)
(let ((pp p))
(math-working "newton" x)
(setq b (car p)
d 0)
(while (setq pp (cdr pp))
(setq d (math-add (math-mul x d) b)
b (math-add (math-mul x b) (car pp))))
(not (math-zerop d)))
(progn
(setq dx (math-div b d)
x (math-sub x dx))
(if try-integer
(let ((adx (math-abs-approx dx)))
(and (math-lessp adx math-int-threshold)
(let ((iroot (math-poly-integer-root x)))
(if iroot
(setq x iroot dx 0)
(setq try-integer nil))))))
(or (not (or (eq dx 0)
(math-nearly-zerop dx (math-abs-approx x))))
(progn (setq dx 0) nil)))))
(cons x (if (math-zerop x)
1 (math-div (math-abs-approx dx) (math-abs-approx x))))))