68e73c1cfd40b80cbb6192e1ff406d1d17a6b649
3 (dimdom 0 :type integer
)
4 (dimcodom 0 :type integer
)
5 (elems nil
:type list
))
7 (defun make-mtrix-like (a elems
)
9 :dimdom
(mtrix-dimdom a
)
10 :dimcodom
(mtrix-dimcodom a
)
13 (defmethod over-transpose ((u tuple
))
17 :elems
(list (tuple-elems u
))))
19 ; Return the transpose of a given matrix.V
20 (defmethod over-transpose ((a mtrix
))
22 :dimdom
(mtrix-dimcodom a
)
23 :dimcodom
(mtrix-dimdom a
)
24 :elems
(mtrix-transpose (mtrix-elems a
))))
26 (defmethod add2n ((a mtrix
) (b mtrix
))
27 (if (and (= (mtrix-dimdom a
) (mtrix-dimdom b
))
28 (= (mtrix-dimcodom a
) (mtrix-dimcodom b
)))
30 a
(mtrix-addn (mtrix-elems a
)
33 (defmethod subtr2n ((a mtrix
) (b mtrix
))
34 (if (and (= (mtrix-dimdom a
) (mtrix-dimdom b
))
35 (= (mtrix-dimcodom a
) (mtrix-dimcodom b
)))
37 a
(mtrix-subtrn (mtrix-elems a
)
40 (defmethod mult2n ((a number
) (b mtrix
))
42 b
(scalar-mtrix-multn a
(mtrix-elems b
))))
44 (defmethod mult2n ((a mtrix
) (b number
))
46 a
(scalar-mtrix-multn b
(mtrix-elems a
))))
48 (defmethod mult2n ((a mtrix
) (b tuple
))
49 (if (= (mtrix-dimdom a
) (tuple-dim b
))
51 :dim
(mtrix-dimcodom a
) :elems
53 (mtrix-elems a
) (tuple-elems b
)))
54 (throw 'over-ex
"Bad dimensions for matrix-vector multiplication.")))
56 (defmethod mult2n ((a tuple
) (b mtrix
))
57 (if (= (tuple-dim a
) (mtrix-dimcodom b
))
59 :dim
(mtrix-dimdom b
) :elems
61 (list (tuple-elems a
)) (mtrix-elems b
))))
62 (throw 'over-ex
"Bad dimensions for vector-matrix multiplication.")))
64 (defmethod mult2n ((a mtrix
) (b mtrix
))
65 (if (= (mtrix-dimdom a
) (mtrix-dimcodom b
))
67 :dimdom
(mtrix-dimdom b
)
68 :dimcodom
(mtrix-dimcodom a
) :elems
69 (mtrix-mult2n (mtrix-elems a
) (mtrix-elems b
)))
70 (throw 'over-ex
"Mismatched dimensions for matrix multiplication.")))
72 (defmethod divis2n ((a mtrix
) (b number
))
75 (/ b
) (mtrix-elems a
))))