From: Stavros M. <mac...@us...> - 2007-05-28 21:20:25
|
Update of /cvsroot/maxima/maxima/src In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6800 Modified Files: matrix.lisp Log Message: Determinant uses matrix_element_* if applicable (only when ratmx and sparse = false) Index: matrix.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/matrix.lisp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- matrix.lisp 16 May 2007 21:56:46 -0000 1.18 +++ matrix.lisp 28 May 2007 21:20:14 -0000 1.19 @@ -24,7 +24,6 @@ (defmvar $matrix_element_add '|&+|) (defmvar $matrix_element_transpose nil) - ;;I believe that all the code now stores arrays in the value cell (defun get-array-pointer (symbol) "There may be nesting of functions and we may well need to apply @@ -193,7 +192,16 @@ (go loop)) ((equal (setq minor (assoo (delete d (copy-tree id) :test #'equal) mdl)) 0) (go loop))) - (setq ans (simplus (list '(mplus) ans (simptimes (list '(mtimes) sign e minor) 1 nil)) 1 nil)) + (setq ans + (if (and (eq $matrix_element_mult '|&*|) + (eq $matrix_element_add '|&+|)) + (add ans (mul sign e minor)) ;fast common case + (mapply $matrix_element_add + (list ans + (mapply $matrix_element_mult + (list sign e minor) + $matrix_element_mult)) + $matrix_element_add))) (go loop))) (defun apdl (l1 l2) |