3 (dimdom 0 :type integer
)
4 (dimcodom 0 :type integer
)
5 (elems nil
:type list
))
8 (unless (= (mtrix-dimdom a
) (mtrix-dimcodom a
))
10 "Can only get the trace of a square matrix."))
12 :for row
:in
(mtrix-elems a
)
15 (defun make-mtrix-like (a elems
)
17 :dimdom
(mtrix-dimdom a
)
18 :dimcodom
(mtrix-dimcodom a
)
21 (defmethod over-transpose ((u tuple
))
25 :elems
(list (tuple-elems u
))))
27 ; Return the transpose of a given matrix.V
28 (defmethod over-transpose ((a mtrix
))
30 :dimdom
(mtrix-dimcodom a
)
31 :dimcodom
(mtrix-dimdom a
)
32 :elems
(mtrix-transpose (mtrix-elems a
))))
34 (defmethod add2n ((a mtrix
) (b mtrix
))
35 (if (and (= (mtrix-dimdom a
) (mtrix-dimdom b
))
36 (= (mtrix-dimcodom a
) (mtrix-dimcodom b
)))
38 a
(mtrix-addn (mtrix-elems a
)
41 (defmethod subtr2n ((a mtrix
) (b mtrix
))
42 (if (and (= (mtrix-dimdom a
) (mtrix-dimdom b
))
43 (= (mtrix-dimcodom a
) (mtrix-dimcodom b
)))
45 a
(mtrix-subtrn (mtrix-elems a
)
48 (defmethod mult2n ((a number
) (b mtrix
))
50 b
(scalar-mtrix-multn a
(mtrix-elems b
))))
52 (defmethod mult2n ((a mtrix
) (b number
))
54 a
(scalar-mtrix-multn b
(mtrix-elems a
))))
56 (defmethod mult2n ((a mtrix
) (b tuple
))
57 (if (= (mtrix-dimdom a
) (tuple-dim b
))
59 :dim
(mtrix-dimcodom a
) :elems
61 (mtrix-elems a
) (tuple-elems b
)))
62 (throw 'over-ex
"Bad dimensions for matrix-vector multiplication.")))
64 (defmethod mult2n ((a tuple
) (b mtrix
))
65 (if (= (tuple-dim a
) (mtrix-dimcodom b
))
67 :dim
(mtrix-dimdom b
) :elems
69 (list (tuple-elems a
)) (mtrix-elems b
))))
70 (throw 'over-ex
"Bad dimensions for vector-matrix multiplication.")))
72 (defmethod mult2n ((a mtrix
) (b mtrix
))
73 (if (= (mtrix-dimdom a
) (mtrix-dimcodom b
))
75 :dimdom
(mtrix-dimdom b
)
76 :dimcodom
(mtrix-dimcodom a
) :elems
77 (mtrix-mult2n (mtrix-elems a
) (mtrix-elems b
)))
78 (throw 'over-ex
"Mismatched dimensions for matrix multiplication.")))
80 (defmethod divis2n ((a mtrix
) (b number
))
83 (/ b
) (mtrix-elems a
))))