@comment $OpenXM: OpenXM/src/asir-doc/int-parts/datatype/mat.texi,v 1.1 2001/04/23 05:45:36 noro Exp $ @section 行列 @example struct oMAT @{ 行列 short id; 識別子 (= O_MAT) short pad; pointer **body; 行成分ポインタ配列へのポインタ @} *VECT; @end example @noindent 行列は, 数学的な対象としての行列として用いられるほか, さまざまなobject を成分に持つ二次元配列としても用いられる. 前者の場合, 行列どうしの和, 差, スカラー倍, 行列, ベクトルとの積が基本演算として提供される. ベクトルとの 積を計算する場合, 行列を左からかける場合には, ベクトルは列ベクトル, 右か らかける場合には行ベクトルと見なされる. @subsection 行列の生成 @example #include "ca.h" MKMAT(m,row,col) (macro; MAT m; int row, col) row 行 col 列の行列 m を生成する. @end example @subsection 四則 @example #include "ca.h" void addmat(VL vl,MAT a,MAT b,MAT *rp) *rp = a + b void submat(VL vl,MAT a,MAT b,MAT *rp) *rp = a - b void mulmat(VL vl,Obj a,Obj b,Obj *rp) *rp = a * b (スカラー倍, 行列-ベクトルの積, 行列-行列の積) void divmat(VL vl,Obj a,Obj b,Obj *rp) *rp = a / b (スカラー b による除算) void pwrmat(VL vl,MAT a,Obj e,Obj *rp) *rp = a^e (正方行列 a の e 乗) int compmat(VL vl,MAT a,MAT e) 以下で述べる順序で比較. @end example @noindent 行列どうしの順序比較は以下による. @enumerate @item 行数が大きい方が順序が上. @item 行数が等しい場合, 列数が大きい方が順序が上. @item サイズが等しい場合, 成分どうしを最初の行から, 行の先頭から比較. @end enumerate