APL/J言語:逆行列

質問:逆行列ってなんですか?
Wikipediaに下記のような記述があります。
n次正方行列Aに対して、AX = XA = I
In単位行列)となるn次正方行列)Xが存在するとき、An正則行列、あるいは単に正則であるという。またこのとき、Xを 、A逆行列と呼びA^{-1}と書く。
うーん。なんだかわかりませんね。nを2として2x2の行列で考えよう。

   ]a=:i.2 2
0 1
2 3

単位行列はこんな感じですか?

   ]square_matrix =: 2 2 $ 1 0 0 1
1 0
0 1

ここで言う行列の積はJ言語では+/ . *(プラススラッシュ ドット アスタリスク)ですので、上記の記述は下記のように書けます。

   a +/ . * x = square_matrix
length error
a+/ .*x =square_matrix
xを定義していないのでエラーになるのと、イコールの使い方が間違えていますので、これではダメですが、考えるスタートとして使います。行列の積を計算すると単位行列となるような行列を逆行列と言う、というので求める逆行列ができたら、これに当てはめてみようということです。テストドリブンみたいなものですね。 さて、逆行列をつくる動詞があって、%.(パーセントドット)です。やってみよう。
   a
0 1
2 3
   %.a
_1.5 0.5
   1   0
   a +/ . * %.a
1 0
0 1
おー、できた。このくらいなら手でも検算できるので、やってみよう。
   (0*_1.5)+(1*1)
1
   (0*0.5)+(1*0)
0
   (2*_1.5)+(3*1)
0
   (2*0.5)+(3*0)
1
定義からの感じとしては逆行列はコンピュータなら計算できるかもしれないけれど、筆算では無理ですが、出来上がった逆行列はこうして検算できる。合っててあたりまえですが。 次に逆行列の用途です。連立方程式がいとも簡単に解けてしまうのはすごいと思う。これはどこかに書きました。 あと、xとyの点の分布があったときに最小自乗法による傾きの計算に使えるらしいのでこれは別項を立てて書きます。 とりあえず以上。 追記:さっきのエラーについて書き忘れました。
   (a +/ . * %.a) = (square_matrix)
1 1
1 1
イコールも動詞ですので比較したい対象をひとまとめにする必要があります。この場合だと左辺です。配列動詞のイコールという意味にならなくて、ここの要素が同じかどうかの戻り値になるので、戻り値も正誤(1 or 0, boolean)の配列になる。 宿題:全体が同じかどうかという動詞は作れるか? つまり配列でなく1(true)か0(false)を返してくる動詞。 以上