+Most files' packages determined in src/devvars
[lineal.git] / src / math / matrices.lisp
blob787b18657d3e90a141ca4a25ea4a13637f8957bd
2 (defun mtrix-transpose (mtrix)
3 (apply #'mapcar #'list mtrix))
5 (defun mtrix-addn (&rest matrs)
6 (apply #'mapcar #'tuple-addn matrs))
8 (defun mtrix-subtrn (&rest matrs)
9 (apply #'mapcar #'tuple-subtrn matrs))
11 (defun scalar-mtrix-multn (k a)
12 "Multiply a scalar /k/ and matrix /a/."
13 (mapcar
14 (lambda (arow)
15 (scalar-tuple-multn k arow))
16 a))
18 (defun mtrix-mult2n (a b)
19 "Multiply 2 matrices."
20 (mapcar
21 (lambda (arow)
22 (apply #'tuple-addn
23 (mapcar #'scalar-tuple-multn
24 arow b)))
25 a))
27 (defun mtrix-multn (&rest mats)
28 "Standard matrix multiplication."
29 (do ((a (car mats) (mtrix-mult2n a (car tomult)))
30 (tomult (cdr mats) (cdr tomult)))
31 ((endp tomult) a)))
33 (defun mtrix-coltuple-multn (a u)
34 (declare (inline dot-prod))
35 "Multiply matrix /a/ and column vector /u/."
36 (loop :for row :in a
37 :collect (dot-prod row u)))