APL/J言語:オブバース(obverse)その1

オブバースというのがあってたぶん逆関数のことで、たとえば自乗の逆関数はルート(自乗根)、掛け算の逆関数は割り算とか思うのですが、Jディクショナリーはもう少しややこしい言い方をしている。わたしの言う意味の逆関数はインバースであり、オブバースはそれを一般化したもののようです。
(翻訳)
f^:_1の結果は関数fのオブバースと呼ばれる。もしf=: g :. hとするとhがオブバースである。そうでない場合、fのインバースである。
インバースは%:(パーセントコロン、自乗根、ルート)を含む25のプリミティブ(原始関数)について用意されているだけでなく、-&3や10&^、2&o.のような係数つき二項動詞(bonded dyad)についても用意されている。さらにu@v^:_1は(v^:_)@(u^:_1)で与えられる。
(翻訳終り)
よくわかりませんが、次の例はわかる。

   fFc=: (32&+)@(*&1.8)
   ]b=:fFc _40 0 100
_40 32 212
   cFf=: fFc^:_1
   cFf b
_40 0 100

fFcは摂氏を華氏に変換する関数で、9/5倍して32を足している。その結果をbに代入しておいて、それにfFc^:_1というfFcの逆関数を作用させると、もとの摂氏に戻る。
ここまでの知識で少しトライアンドエラーしてみよう。

   (-&3) i.5  NB.0 1 2 3 4からそれぞれ3を引く
_3 _2 _1 0 1
   (-&3) ^:_1 i.5  NB.その逆関数は3を足すになる
3 4 5 6 7
   ]b=:(10&^) i.5   NB.10の0 1 2 3 4乗
1 10 100 1000 10000
   (10&^)^:_1 b   NB.その逆関数は10を底とする対数(ログ)
0 1 2 3 4
   (10&^.) b   NB.^.(カレットドット)は対数
0 1 2 3 4
   ]b=:(2&o.)i.5   NB.2&o.(2&オードット)はコサイン
1 0.540302 _0.416147 _0.989992 _0.653644
   (2&o.)^:_1 b   NB.逆関数でコサインの結果にもどらない
0 1 2 3 2.28319
   (2&o.) 2.28319 NB.なぜならy=f(x)でxとyが一対一でない
_0.653647
   (2&o.) 4 NB.cos(4)とcos(2.28319)がほぼ同じ値
_0.653644

とりあえず、以上。