mat☆☆

Full BASICには行列(matrix)演算を行うmat文がある。

MAT A = B
  左辺の配列に右辺の配列の値を代入する。
  次元が変わるような代入はできない。

MAT A = ZER
  左辺の配列の各要素に0を代入する。

MAT A = ZER(数値式) Aが1次元のとき
MAT A = ZER(数値式 ,数値式) Aが2次元のとき
MAT A = ZER(数値式 ,数値式 ,数値式) Aが3次元のとき
  配列Aの添字の上限を変更し,全要素を0にする。
  配列の大きさを動的に変更したいときに用いる。
  Aの添字の下限とoption baseとが一致する場合は,Aの添字の上限が数値式で指定された値になる。
  次元を変えることはできない。

MAT A = CON
  全要素に1を代入する。

MAT A = CON(数値式)
MAT A = CON(数値式 ,数値式)
MAT A = CON(数値式 ,数値式 ,数値式)
  配列Aの添字の上限を変更し,全要素を1にする。

MAT A=B+C
MAT A=B-C
MAT A=B*C
  行列B,Cの和,差,積をAに代入する。
  積の場合,A,B,Cの次元の組合せは 1-2-1, 1-1-2, 2-2-2 のいずれか。

MAT A=(数値式)*B
  スカラー倍。
  数値式が定数,関数引用,変数名のいずれかであれば前後の括弧は不要。
  例 (xは数値変数とする)
   MAT A=x*A
   MAT A=(2*x)*B
   MAT A=ABS(x+3)*B

MAT A=(数値式)*CON
  配列の全要素に数値式の値が代入される。

以下,A,Bは2次元の配列とする。

MAT A = IDN
  単位行列を代入する。
  左辺の配列が正方行列でないと実行時エラーになる。

MAT A = IDN(n)
  n×nの単位行列を代入する。

MAT A=INV(B)
  Bの逆行列をAに代入する。

MAT A=TRN(B)
  Bの転置行列をAに代入する。

<Note>
 MAT文の実行によって配列の大きさは変化するが,添字の下限は変化しない。添字の上限は新しい大きさに合わせて調整される。
例 A(1)=1,A(2)=2,A(3)=3 である配列Aを添字の下限が0の配列Bに代入すると,B(0)=1,B(1)=2,B(2)=3になる。

<Note>
 MAT文を実行すると配列の要素数がその配列を最初に宣言したときの要素数より多くなってしまう場合はextye=5001の例外状態(実行時エラー)になる。

<Note>
 行列の加減乗算は,2項間に限る。
 なお,すべての配列が2次元であるとき,3項以上の積,たとえば,
MAT A=B*C*D
は翻訳できるが,これは,変形指示mat文と呼ばれるもので,各行列の大きさが4×4になっていないと実行時にエラーになる。また,各行列の大きさが4×4の場合にはエラーにならないが,精度がFPUの倍精度になる。

<Note>
 MAT A=ZER(m TO n)を実行してもAの添字の下限はmにならない。
この文は,Aの大きさを n-m+1 に変更する効果しか持たない。
 添字の下限を変えたいときは,MAT READ文か,拡張機能のMAT REDIM文を用いる。


独自の拡張(外積)  A,B,Cを1次元配列とする。
MAT A=CROSS(B,C)
  B,Cの外積(ベクトル積)をAに代入する。
  B,Cの要素数が3でないとき,extype6001の例外となる。