From: Barton W. <wil...@us...> - 2007-07-23 11:36:10
|
Update of /cvsroot/maxima/maxima/share/linearalgebra In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv1649/share/linearalgebra Modified Files: linalg-extra.lisp Log Message: Better functions jacobian and hessian Index: linalg-extra.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/share/linearalgebra/linalg-extra.lisp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- linalg-extra.lisp 23 Jul 2007 11:11:13 -0000 1.7 +++ linalg-extra.lisp 23 Jul 2007 11:36:04 -0000 1.8 @@ -38,16 +38,24 @@ (push '($matrix) mat))) (defun $hessian (e vars) - (if ($listp vars) - (let ((n ($length vars))) - ($genmatrix `((lambda) ((mlist) i j) ($diff ,e (nth i ,vars) 1 (nth j ,vars) 1)) n n)) - `(($hessian) ,e ,vars))) - + (cond (($listp vars) + (let ((z) (mat nil)) + (setq vars (margs vars)) + (dolist (vi vars) + (setq z ($diff e vi)) + (push (cons '(mlist) (mapcar #'(lambda (s) ($diff z s)) vars)) mat)) + (cons '($matrix) (reverse mat)))) + (t `(($hessian) ,e ,vars)))) + (defun $jacobian (e vars) - (if (and ($listp vars) ($listp e)) - (let ((m ($length e)) (n ($length vars))) - ($genmatrix `((lambda) ((mlist) i j) ($diff (nth i ,e) (nth j ,vars))) m n)) - `(($jacobian) ,e ,vars))) + (cond ((and ($listp vars) ($listp e)) + (setq e (margs e)) + (setq vars (margs vars)) + (let ((mat nil)) + (dolist (ei e) + (push (cons '(mlist) (mapcar #'(lambda (s) ($diff ei s)) vars)) mat)) + (cons '($matrix) (reverse mat)))) + (t `(($jacobian) ,e ,vars)))) (defun $vandermonde_matrix (l) (let ((x) (row) (acc)) |