36420ab3a9f8840753bb709718e7ab0f3ef65958
2 (in-package :lineal.overload
)
5 (dimdom 0 :type integer
)
6 (dimcodom 0 :type integer
)
7 (elems nil
:type list
))
9 (defun make-mtrix-like (a elems
)
11 :dimdom
(mtrix-dimdom a
)
12 :dimcodom
(mtrix-dimcodom a
)
15 (defmethod over-transpose ((u tuple
))
19 :elems
(list (tuple-elems u
))))
21 ; Return the transpose of a given matrix.V
22 (defmethod over-transpose ((a mtrix
))
24 :dimdom
(mtrix-dimcodom a
)
25 :dimcodom
(mtrix-dimdom a
)
26 :elems
(mtrix-transpose (mtrix-elems a
))))
28 (defmethod add2n ((a mtrix
) (b mtrix
))
29 (if (and (= (mtrix-dimdom a
) (mtrix-dimdom b
))
30 (= (mtrix-dimcodom a
) (mtrix-dimcodom b
)))
32 a
(mtrix-addn (mtrix-elems a
)
35 (defmethod subtr2n ((a mtrix
) (b mtrix
))
36 (if (and (= (mtrix-dimdom a
) (mtrix-dimdom b
))
37 (= (mtrix-dimcodom a
) (mtrix-dimcodom b
)))
39 a
(mtrix-subtrn (mtrix-elems a
)
42 (defmethod mult2n ((a number
) (b mtrix
))
44 b
(scalar-mtrix-multn a
(mtrix-elems b
))))
46 (defmethod mult2n ((a mtrix
) (b number
))
48 a
(scalar-mtrix-multn b
(mtrix-elems a
))))
50 (defmethod mult2n ((a mtrix
) (b tuple
))
51 (if (= (mtrix-dimdom a
) (tuple-dim b
))
53 :dim
(mtrix-dimcodom a
) :elems
55 (mtrix-elems a
) (tuple-elems b
)))
56 (throw 'over-ex
"Bad dimensions for matrix-vector multiplication.")))
58 (defmethod mult2n ((a tuple
) (b mtrix
))
59 (if (= (tuple-dim a
) (mtrix-dimcodom b
))
61 :dim
(mtrix-dimdom b
) :elems
63 (list (tuple-elems a
)) (mtrix-elems b
))))
64 (throw 'over-ex
"Bad dimensions for vector-matrix multiplication.")))
66 (defmethod mult2n ((a mtrix
) (b mtrix
))
67 (if (= (mtrix-dimdom a
) (mtrix-dimcodom b
))
69 :dimdom
(mtrix-dimdom b
)
70 :dimcodom
(mtrix-dimcodom a
) :elems
71 (mtrix-mult2n (mtrix-elems a
) (mtrix-elems b
)))
72 (throw 'over-ex
"Mismatched dimensions for matrix multiplication.")))
74 (defmethod divis2n ((a mtrix
) (b number
))
77 (/ b
) (mtrix-elems a
))))