矩形行列の行列式
; 行列 (ただし, ) とする. の第成分をとする.
この行列式を
とする.
(i)
の場合
.
(ii)
の場合
,
ただし
はから第行と第列を除いた行列.
このように縦長の行列の行列が定義されている. このとき, Mapleでは, 次のように関数を作ればよい. PDF, Mapleファイル
Mapleでの矩形行列の定義
f:=X->
if MTM[size](X,1)=MTM[size](X,2) then return(LinearAlgebra[Determinant](X));
else
if MTM[size](X,2)=1 then return(add((-1)^(i-1)*X[i,1],i=1..MTM[size](X,1)));
else print(seq((-1)^(i-1)*X[i,1]*(linalg[delrows](linalg[delcols](X,1..1),i..i)),i=1..MTM[size](X,1))); return(add((-1)^(i-1)*X[i,1]*f(linalg[delrows](linalg[delcols](X,1..1),i..i)),i=1..MTM[size](X,1)));
end if;
end if;
MTM[size](X,1)=MTM[size](X,2);行列の行数と列数が同じ場合は, そのままLinearAlgebraパッケージにあるDeteminant関数に入れる.
無くても良いが,
の場合に自作の関数に入れるよりは, 効率がいいと考えられる.
MTM[size](X,2)=1;列数が1の場合の処理はadd関数を使って定義通りに求める
print(seq((-1)^(i-1)*X[i,1]*(linalg[delrows](linalg[delcols](X,1..1),i..i)),i=1..MTM[size](X,1)));;計算途中を表示するためのprint文
linalg[delrows](linalg[delcols](X,1..1),i..i);linalg[delcols](X,1..1)で第1列を削除, linalg[delrows](・・・,i..i)で第i行を削除した行列を作って, 再帰的にまわす
(-1)^(i-1)*X[i,1];定義の(ii)の和の中の係数になっている.
参考文献
定義や定理などは, 中神・柳井 (2012)の「矩形行列の行列式」 55ページ, 定義 1.4.1などを参照 [amazon]
Cybernetのサポート 条件分岐
よしいずの雑記帳 Mapleにおける線形代数に関するコマンド
Matlabでの関数の定義などはこちら
Rでの関数定義などはこちら