next up previous
Next: 2 余因子,行列式,逆行列 Up: 1 リスト行列 Previous: 1.3 リスト行列の転置

1.4 リスト行列の掛け算

行列の掛け算を行う関数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))

> (setq a '((1 2 3) (4 5 6)))
((1 2 3) (4 5 6))
> (setq b (transpose a))
((1 4) (2 5) (3 6))
> (m* a b)
((14 32) (32 77))


generated through LaTeX2HTML. M.Inaba 平成18年5月7日