next up previous
Next: 2.3 余因子行列 Up: 2 余因子,行列式,逆行列 Previous: 2.1 余因子(cofactor)

2.2 余因子展開

行列の余因子展開を利用して行列の行列式を求めることができる. 余因子展開とは,行列Aの行列式は,i行,または,j行の各要素と その要素における余因子の積の和として求めることができるという ものである. i行に関する余因子展開は,
$\displaystyle \vert A\vert$ $\textstyle =$ $\displaystyle (-1)^{i+1}a_{i,1}\vert A_{i,1}\vert +$  
    $\displaystyle (-1)^{i+2}a_{i,2}\vert A_{i,2}\vert +$  
    $\displaystyle \cdots + (-1)^{i+n}a_{i,n}\vert A_{i,n}\vert$  
  $\textstyle =$ $\displaystyle \sum^n_{k=1}(-1)^{i+k}a_{i,k}\vert A_{i,k}\vert$  
  $\textstyle =$ $\displaystyle \sum^n_{k=1}a_{i,k}C_{i,k}$  

となり, j列に関する余因子展開は,
$\displaystyle \vert A\vert$ $\textstyle =$ $\displaystyle (-1)^{j+1}a_{1,j}\vert A_{1,j}\vert +$  
    $\displaystyle (-1)^{j+2}a_{2,j}\vert A_{2,j}\vert +$  
    $\displaystyle \cdots + (-1)^{j+n}a_{n,j}\vert A_{n,j}\vert$  
  $\textstyle =$ $\displaystyle \sum^n_{k=1}(-1)^{k+j}a_{k,j}\vert A_{k,j}\vert$  
  $\textstyle =$ $\displaystyle \sum^n_{k=1}a_{k,j}C_{k,j}$  

となる. 以上から,行列Aの行列式をもとめる場合に, 0列で展開を行う形で,関数m-detを定義する. m-cofactorを用いると,
(defun m-det (m)
  (let ((sum 0.0) (row (length m))
        (vec (mapcar #'car m)))
    (if (= row 1) (car vec)
      (dotimes (i row)
        (setq sum
              (+ sum (* (elt vec i)
                        (m-cofactor m i 0)))))
      sum)))
という具合にできる. 第0列に関する余因子を求める際に,minor-mは より簡単化できるため,m-cofactor0を 定義して,
(defun m-cofactor0 (m i)
  (if (oddp i)
      (- (m-det (drop-row (mapcar #'cdr m) i)))
    (m-det (drop-row (mapcar #'cdr m) i)))
  )

(defun m-det (m)
  (let ((sum 0.0) (row (length m))
        (vec (mapcar #'car m)))
    (if (= row 1) (car vec)
      (dotimes (i row)
        (setq sum
              (+ 
               (* (elt vec i)
                  (m-cofactor0 m i))
               sum)))
      sum)))
というように定義することも有効である.
next up previous
Next: 2.3 余因子行列 Up: 2 余因子,行列式,逆行列 Previous: 2.1 余因子(cofactor)
generated through LaTeX2HTML. M.Inaba 平成18年5月7日