Go to the first, previous, next, last section, table of contents.

### `det`,`invmat`

`det(mat[,mod])`
`nd_det(mat[,mod])`
  :: mat の行列式を求める.
`invmat(mat)`
  :: mat の逆行列を求める.

return
  `det`: 式, `invmat`: リスト
mat
  行列
mod
  素数

- `det` および `nd_det` は行列 mat の行列式を求める. `invmat` は行列 mat の逆行列を求める. 逆行列は `[分母, 分子]` の形で返され, `分母`が行列, `分母/分子` が逆行列となる.
- 引数 mod がある時, GF(mod) 上での行列式を求める.
- 分数なしのガウス消去法によっているため, 多変数多項式を成分とする 行列に対しては小行列式展開による方法のほうが効率がよい場合もある.
- `nd_det` は有理数または有限体上の多項式行列の行列式 計算専用である. アルゴリズムはやはり分数なしのガウス消去法だが, データ構造および乗除算の工夫により, 一般に `det` より高速に 計算できる.

    [91] A=newmat(5,5)$
    [92] V=[x,y,z,u,v];
    [x,y,z,u,v]
    [93] for(I=0;I<5;I++)for(J=0,B=A[I],W=V[I];J<5;J++)B[J]=W^J;
    [94] A;
    [ 1 x x^2 x^3 x^4 ]
    [ 1 y y^2 y^3 y^4 ]
    [ 1 z z^2 z^3 z^4 ]
    [ 1 u u^2 u^3 u^4 ]
    [ 1 v v^2 v^3 v^4 ]
    [95] fctr(det(A));
    [[1,1],[u-v,1],[-z+v,1],[-z+u,1],[-y+u,1],[y-v,1],[-y+z,1],[-x+u,1],
    [-x+z,1],[-x+v,1],[-x+y,1]]
    [96] A = newmat(3,3)$
    [97] for(I=0;I<3;I++)for(J=0,B=A[I],W=V[I];J<3;J++)B[J]=W^J;
    [98] A;
    [ 1 x x^2 ]
    [ 1 y y^2 ]
    [ 1 z z^2 ]
    [99] invmat(A);
    [[ -z*y^2+z^2*y z*x^2-z^2*x -y*x^2+y^2*x ]
    [ y^2-z^2 -x^2+z^2 x^2-y^2 ]
    [ -y+z x-z -x+y ],(-y+z)*x^2+(y^2-z^2)*x-z*y^2+z^2*y]
    [100] A*B[0];
    [ (-y+z)*x^2+(y^2-z^2)*x-z*y^2+z^2*y 0 0 ]
    [ 0 (-y+z)*x^2+(y^2-z^2)*x-z*y^2+z^2*y 0 ]
    [ 0 0 (-y+z)*x^2+(y^2-z^2)*x-z*y^2+z^2*y ]
    [101] map(red,A*B[0]/B[1]);
    [ 1 0 0 ]
    [ 0 1 0 ]
    [ 0 0 1 ]

`参照`
  section `newmat`.

Go to the first, previous, next, last section, table of contents.