From 4fdfcddf73d5e7ab67defcff9ef3f01fd9b492a4 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Mon, 31 Jan 2011 20:15:52 -0600 Subject: [PATCH] * calc/calc-mtx.el (math-lud-pivot-check): New function. (math-do-matrix-lud): Use `math-lud-pivot-check' to check the size of potential pivots. --- lisp/ChangeLog | 6 ++++++ lisp/calc/calc-mtx.el | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b2e5e98016..7e5d94f970 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-02-01 Jay Belanger + + * calc/calc-mtx.el (math-lud-pivot-check): New function. + (math-do-matrix-lud): Use `math-lud-pivot-check' to check the size + of potential pivots. + 2011-01-31 Alan Mackenzie * progmodes/cc-cmds.el (c-forward-over-illiterals): Continue diff --git a/lisp/calc/calc-mtx.el b/lisp/calc/calc-mtx.el index 9941c11ff1..5ec15005b4 100644 --- a/lisp/calc/calc-mtx.el +++ b/lisp/calc/calc-mtx.el @@ -232,6 +232,20 @@ (setq math-lud-cache (cons (cons m entry) math-lud-cache))) lud)))) + +(defun math-lud-pivot-check (a) + "Determine a useful value for checking the size of potential pivots +in LUD decomposition." + (cond ((eq (car-safe a) 'mod) + (if (and (math-integerp (nth 1 a)) + (math-integerp (nth 2 a)) + (eq (math-gcd (nth 1 a) (nth 2 a)) 1)) + 1 + 0)) + (t + (math-abs-approx a)))) + + ;;; Numerical Recipes section 2.3; implicit pivoting omitted. (defun math-do-matrix-lud (m) (let* ((lu (math-copy-matrix m)) @@ -261,7 +275,7 @@ (nth j (nth k lu)))) k (1+ k))) (setcar (nthcdr j (nth i lu)) sum) - (let ((dum (math-abs-approx sum))) + (let ((dum (math-lud-pivot-check sum))) (if (Math-lessp big dum) (setq big dum imax i))) -- 2.20.1