Author: mantoniotti Date: Fri Aug 18 11:54:06 2006 New Revision: 3
Added: trunk/common-math/numerics/linear-algebra/determinants.lisp trunk/common-math/numerics/linear-algebra/inversion.lisp Modified: trunk/common-math/numerics/linear-algebra/linear-algebra-pkg.lisp trunk/common-math/numerics/linear-algebra/linear-algebra.system trunk/common-math/numerics/linear-algebra/lu-decomposition.lisp trunk/common-math/numerics/linear-algebra/matrix.lisp Log: Rearranged a few files, added two more and fixed a small number of issues here and there.
Added: trunk/common-math/numerics/linear-algebra/determinants.lisp ============================================================================== --- (empty file) +++ trunk/common-math/numerics/linear-algebra/determinants.lisp Fri Aug 18 11:54:06 2006 @@ -0,0 +1,44 @@ +;;;; -*- Mode: Lisp -*- + +;;;; determinants.lisp -- + + +(in-package "CL.MATH.LINEAR-ALGEBRA") + +;;;=========================================================================== +;;; Determinants + +;;; det + +(defgeneric det (m)) + +(defgeneric det/double-float (m)) + + +(defmethod det ((a array)) + (assert (square-matrix-p a)) + (multiple-value-bind (lu permutations parity) + (lu-decompose a) + (declare (ignore permutations)) + (dotimes (i (array-dimension lu 0) parity) + (setf parity (* parity (aref lu i i)))))) + +(defmethod det ((a matrix)) + (det (matrix-data a))) + + +(defmethod det/double-float ((a array)) + (assert (square-matrix-p a)) + (multiple-value-bind (lu permutations parity) + (lu-decompose a) + (declare (type (array double-float (cl:* cl:*)) lu) + (ignore permutations) + (type double-float parity)) + (dotimes (i (array-dimension lu 0) parity) + (setf parity (* parity (aref lu i i)))))) + +(defmethod det/double-float ((a matrix)) + (det/double-float (matrix-data a))) + + +;;; end of file -- determinant.lisp --
Added: trunk/common-math/numerics/linear-algebra/inversion.lisp ============================================================================== --- (empty file) +++ trunk/common-math/numerics/linear-algebra/inversion.lisp Fri Aug 18 11:54:06 2006 @@ -0,0 +1,29 @@ +;;;; -*- Mode: Lisp -*- + +;;;; inversion.lisp -- + + +(in-package "CL.MATH.LINEAR-ALGEBRA") + +;;;=========================================================================== +;;; Inversion + +;;; inverse + +(defgeneric inverse (m)) + +(defgeneric inverse/double-float (m)) + + + +(defmethod inverse ((a matrix)) + (inverse (matrix-data a))) + + + + +(defmethod inverse/double-float ((a matrix)) + (inverse/double-float (matrix-data a))) + + +;;; end of file -- inversion.lisp --
Modified: trunk/common-math/numerics/linear-algebra/linear-algebra-pkg.lisp ============================================================================== --- trunk/common-math/numerics/linear-algebra/linear-algebra-pkg.lisp (original) +++ trunk/common-math/numerics/linear-algebra/linear-algebra-pkg.lisp Fri Aug 18 11:54:06 2006 @@ -13,6 +13,8 @@ (:export ".*" "./" "EXPT*")
(:export ".*%2" ".*%1" "./%2" "./%1") + + (:export "DET" "SOLVE")
)
Modified: trunk/common-math/numerics/linear-algebra/linear-algebra.system ============================================================================== --- trunk/common-math/numerics/linear-algebra/linear-algebra.system (original) +++ trunk/common-math/numerics/linear-algebra/linear-algebra.system Fri Aug 18 11:54:06 2006 @@ -8,6 +8,9 @@ "common-math-extra" "vector" "matrix" - "lu-decomposition")) + (:file "lu-decomposition" :depends-on ("matrix")) + (:file "determinants" :depends-on ("lu-decomposition")) + (:file "inversion" :depends-on ("lu-decomposition")) + ))
;;;; end of file -- linear-algebra.system --
Modified: trunk/common-math/numerics/linear-algebra/lu-decomposition.lisp ============================================================================== --- trunk/common-math/numerics/linear-algebra/lu-decomposition.lisp (original) +++ trunk/common-math/numerics/linear-algebra/lu-decomposition.lisp Fri Aug 18 11:54:06 2006 @@ -14,13 +14,6 @@ (defparameter *epsilon* 1.0e-20) ; Change this to CL constant.
-(defgeneric square-matrix-p (m) - (:method ((m array)) - (and (matrix-array-p m) - (cl:= (array-dimension m 0) (array-dimension m 1)))) - (:method ((m matrix)) - (cl:= (matrix-row-number m) (matrix-column-number m)))) -
;;; Different base type. @@ -283,33 +276,11 @@ (solve/double-float (matrix-data a) b result))
-;;;--------------------------------------------------------------------------- -;;; det - -(defmethod det ((a array)) - (assert (square-matrix-p a)) - (multiple-value-bind (lu permutations parity) - (lu-decompose a) - (declare (ignore permutations)) - (dotimes (i (array-dimension lu 0) parity) - (setf parity (* parity (aref lu i i)))))) - -(defmethod det ((a matrix)) - (det (matrix-data a))) - - -(defmethod det/double-float ((a array)) - (assert (square-matrix-p a)) - (multiple-value-bind (lu permutations parity) - (lu-decompose a) - (declare (type (array double-float (cl:* cl:*)) lu) - (ignore permutations) - (type double-float parity)) - (dotimes (i (array-dimension lu 0) parity) - (setf parity (* parity (aref lu i i)))))) +;;;=========================================================================== +;;; Determinants
-(defmethod det/double-float ((a matrix)) - (det/double-float (matrix-data a))) +;;;=========================================================================== +;;; Inverse
;;;===========================================================================
Modified: trunk/common-math/numerics/linear-algebra/matrix.lisp ============================================================================== --- trunk/common-math/numerics/linear-algebra/matrix.lisp (original) +++ trunk/common-math/numerics/linear-algebra/matrix.lisp Fri Aug 18 11:54:06 2006 @@ -146,6 +146,14 @@ (shape-equal-p m1 m2))
+ +(defgeneric square-matrix-p (m) + (:method ((m array)) + (cl:= (matrix-row-number m) (matrix-column-number m))) + (:method ((m matrix)) + (cl:= (matrix-row-number m) (matrix-column-number m)))) + + ;;;--------------------------------------------------------------------------- ;;; Creation.