485bed07e1b12640f489c8ac18fb13cf5ccbc6b6
[lineal.git] / src / math / matrices.lisp
blob485bed07e1b12640f489c8ac18fb13cf5ccbc6b6
2 (in-package :lineal.math)
4 (defun mtrix-transpose (mtrix)
5 (apply #'mapcar #'list mtrix))
7 (defun mtrix-addn (&rest matrs)
8 (apply #'mapcar #'tuple-addn matrs))
10 (defun mtrix-subtrn (&rest matrs)
11 (apply #'mapcar #'tuple-subtrn matrs))
13 (defun scalar-mtrix-multn (k a)
14 "Multiply a scalar /k/ and matrix /a/."
15 (mapcar
16 (lambda (arow)
17 (scalar-tuple-multn k arow))
18 a))
20 (defun mtrix-mult2n (a b)
21 "Multiply 2 matrices."
22 (mapcar
23 (lambda (arow)
24 (apply #'tuple-addn
25 (mapcar #'scalar-tuple-multn
26 arow b)))
27 a))
29 (defun mtrix-multn (&rest mats)
30 "Standard matrix multiplication."
31 (do ((a (car mats) (mtrix-mult2n a (car tomult)))
32 (tomult (cdr mats) (cdr tomult)))
33 ((endp tomult) a)))
35 (defun mtrix-coltuple-multn (a u)
36 (declare (inline dot-prod))
37 "Multiply matrix /a/ and column vector /u/."
38 (loop :for row :in a
39 :collect (dot-prod row u)))