JavaScriptで行列を扱うライブラリ。
タイトル通り、行列計算を行うJavaScriptライブラリです。行列をMatrixオブジェクトとして扱い、加算,減算,乗算,スカラー倍,行列式,逆行列を求めることが可能です。
ライブラリのソースコードにも記載済み。
作成したMatrixObjectは4つの値を持つ。
var foo = new Matrix(); foo.val = Array...行列本体を2次配列で格納 foo.col = Number...行列の行の大きさ foo.row = Number...行列の列の大きさ foo.isSqu = Boolean...正方行列ならtrue,非正方行列ならfalse
MatrixObjectの作成方法。
2次の配列をary
として、次のように行列を生成。
var foo = new Matrix( ary );
行=col
,列=row
として単位行列を生成。ただし行と列が一致しない場合も、正方行列の要領で単位行列が生成されてしまう。零行列は後述。
var foo = new Matrix( [],col,row );
行=列=colとして単位正方行列を生成。単に引数の列を取り除くだけでよい。
var foo = new Matrix( [],col );
引数が何もない場合、2次の単位正方行列を生成する。
var foo = new Matrix();
任意の実数をpとして、任意の行列foo
を次のようにスカラー倍できる。
foo.Scal( p );
配列を零行列にリセットしたい場合は引数に0若しくは何も入れずにスカラー倍する。
foo.Scal(0); foo.Scal();
2つの行列foo1
,foo2
を加算した結果をfoo3
にMatrixObjectとして代入する。尚、foo1
とfoo2
の行と列がそれぞれ等しい場合のみ計算は行われ、計算不可能な場合undefined
が返される。
var foo3 = Matrix.Add( foo1,foo2 );
2つの行列foo1
,foo2
を減算した結果をfoo3
にMatrixObjectとして代入する。尚、foo1
とfoo2
の行と列がそれぞれ等しい場合のみ計算は行われ、計算不可能な場合undefined
が返される。
var foo3 = Matrix.Sub( foo1,foo2 );
2つの行列foo1
,foo2
を乗算した結果をfoo3
にMatrixObjectとして代入する。尚、foo1
の列とfoo2
の行が等しい場合のみ計算は行われ、計算不可能な場合undefined
が返される。
var foo3 = Matrix.Mul( foo1,foo2 );
2乗はSqu関数により計算でき、結果はMatrixObjectで返される。行列が正方行列ではない場合、計算不可となりundefined
を返す。
var foo2 = foo.Squ();
行列式はDeterminant関数により計算でき、結果は数値で返される。行列が正方行列ではない場合、計算不可となりundefined
を返す。
var d = foo.Determinant();
逆行列はInverse関数により計算でき、結果はMatrixObjectで返される。行列が正方行列ではない場合、計算不可となりundefined
を返す。
var foo_d = foo.Inverse();
ちなみに内部ではDeterminant関数の多重呼び出しを行っており、計算量は逆行列が最も大きい。
Print関数を使うと、行列を文字列に整形して出力できる。引数に1を代入するとHTML用に改行(<br>)が挿入され、2を代入するとXHTML用に改行(<br />)が挿入される。0若しくは何も入れない場合、改行コードのみが挿入される。
var str1 = foo.Print();//改行(\n) var str2 = foo.Print(0);//改行(\n) var str3 = foo.Print(1);//改行(<br>) var str4 = foo.Print(2);//改行(<br />)
上記の関数群を揃えたライブラリ。元の平たい関数として組んだ-gと、オブジェクト内部の値を隠蔽した-lを作ってある。とはいえ、-lは実験的なもので、今後の改良があるとすれば-gで統一されるだろう。