APL/J言語:%.(パーセントドット、逆行列)

APL/J言語:%.(パーセントドット、逆行列)
ボキャブラリーの逆行列(Matrix Inverse)のところの翻訳です。
yが正則行列(non-singular matrix)ならば%.yはyの逆行列である。
以下の例では、2x2の行列の逆行列に元の行列を掛けて単位行列になることがわかる。

   mp=: +/ . *         NB. Matrix product
   (%. ; ] ; %. mp ]) i. 2 2
 +--------+---+---+
 |_1.5 0.5|0 1|1 0|
 |   1   0|2 3|0 1|
 +--------+---+---+

二項動詞としては、左側引数はi.{:$y(アイデンティティ行列)または同等のことだが(%.y)mp x ↔ x %. yとなる。

%.yのシェイプは|.$yとなる。

yがベクトルやスカラーだった場合、,.yというマトリックスに対して作用したように定義されているが、結果のシェイプは$yである。

yがゼロでないベクトルの場合、%.yの結果はyの共線ベクトル(collinear vector)で、長さはyの逆数(reciprocal)である。これは単位円(unit circleまたはスフィア)上の写像(reflection)と呼ばれる。

   (%. ,: ] % %.) 2 3 4
0.0689655 0.103448 0.137931
       29       29       29

yが正則行列の場合、x%.yは(%.y) mp xとなる。さらに、yの列が線形独立(linearly independent)である#xと#yが同じならば、x%.yは差を最小にする。

   d=: x - y mp x %. y

すなわち大きさ(magnitude)+/d*+dは最小値となる。yがスカラーもしくはベクトルの場合、一列の行列,.yとして扱われる。

幾何学的には、y mp x%.yはベクトルxのy列空間への写像(projection)であり、yの列によって点描された空間でxへの最短の点である。

線形方程式で%.がよく使われるのは多項式の近似解決法としてであり、c=: (f x)%. x ^ / i.4というように使われる。

以下の例ではサイン関数と共に%.を使っている。特に、近似さrている関数との差の大きさの最大値をし示している。

   sin=: 1&o.   NB.近似される関数
   x=: 5 %~ i. 6     
   c=: (sin x) %. x ^/ i.4   NB.行列割り算
   ,.&.>@(] ; c"_ ; sin ; c&p. ; >./@:|@(sin-c&p.)) x
 +---+-----------+--------+-----------+-----------+
 |  0|_5.30503e_5|       0|_5.30503e_5|0.000167992|
 |0.2|    1.00384|0.198669|   0.198826|           |
 |0.4|  _0.018453|0.389418|   0.389321|           |
 |0.6|  _0.143922|0.564642|   0.564523|           |
 |0.8|           |0.717356|   0.717524|           |
 |  1|           |0.841471|   0.841416|           |
 +---+-----------+--------+-----------+-----------+