Next: 3 集合の表現
Up: 2 例題:行列表現と演算
Previous: 2.2 リスト行列の転置
行列の掛け算を行う関数m*は,
(defun m* (a b)
(transpose
(apply
#'mapcar
#'(lambda (&rest l)
(mapcar
#'(lambda (x) (v. x l))
a)
)
b))
)
(defun v. (a b)
(apply #'+ (mapcar #'* a b)))
v. は次のようにリストで表現されたベクトルの内積を求めます.
> (v. '(1 2) '(1 2))
5
> (v. '(1 2 3) '(1 2 3))
14
行列の計算を行ってみると,
> (setq a '((1 2) (3 4)))
((1 2) (3 4))
> (transpose a)
((1 3) (2 4))
> (m* a (transpose a))
((5 11) (11 25))
> (m* (transpose a) a)
((10 14) (14 20))
となります.この定義は,行列の大きさに依存しません.
> (setq b '((1 2 3) (4 5 6) (7 8 9)))
((1 2 3) (4 5 6) (7 8 9))
> (transpose b)
((1 4 7) (2 5 8) (3 6 9))
> (m* b b)
((30 36 42) (66 81 96) (102 126 150))
> (m* b (transpose b))
((14 32 50) (32 77 122) (50 122 194))
> (m* (transpose b) b)
((66 78 90) (78 93 108) (90 108 126))
generated through LaTeX2HTML. M.Inaba 平成18年5月6日