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| | +---+-----------+--------+-----------+-----------+