From: Dieter K. <cra...@us...> - 2010-05-26 22:56:45
|
Update of /cvsroot/maxima/maxima/src In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv31351/src Modified Files: newdet.lisp Log Message: Replacing the user functions $newdet and $permanent. The implementations are similar to the user function $determinant and check more carefully a correct argument. The second optional argument is cut out. Related bug report: Bug ID: 1114128 - 2nd argument in permanent No problems with the testsuite and share_testsuite. Index: newdet.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/newdet.lisp,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- newdet.lisp 3 Apr 2010 16:59:50 -0000 1.8 +++ newdet.lisp 26 May 2010 22:56:36 -0000 1.9 @@ -26,12 +26,31 @@ (defvar *binom*) (defvar *input*) +(defmfun $newdet (mat) + (cond ((not (or (mbagp mat) ($matrixp mat))) + (if ($scalarp mat) mat (list '(%newdet simp) mat))) + (t + (setq mat (check mat)) + (unless (= (length mat) (length (cadr mat))) + (merror + (intl:gettext + "newdet: Matrix must be square; found ~M rows, ~M columns.") + (length (cdr mat)) + (length (cdadr mat)))) + (newdet mat (length (cdr mat)) nil)))) -(defmfun $newdet (a &optional (n (length (cdr a)))) - (newdet a n nil)) - -(defmfun $permanent (a &optional (n (length (cdr a)))) - (newdet a n t)) +(defmfun $permanent (mat) + (cond ((not (or (mbagp mat) ($matrixp mat))) + (if ($scalarp mat) mat (list '(%permanent simp) mat))) + (t + (setq mat (check mat)) + (unless (= (length mat) (length (cadr mat))) + (merror + (intl:gettext + "permanent: Matrix must be square; found ~M rows, ~M columns.") + (length (cdr mat)) + (length (cdadr mat)))) + (newdet mat (length (cdr mat)) t)))) (defun newdet (a n perm) (prog (rr k j old new vlist m loc addr sign) |