エキゾチック演算遊び(5:マスロフの演算2)

前回はマスロフの演算を導入したところでした。

$$
a\oplus_hb=(a^{\frac{1}{h}}+b^{\frac{1}{h}})^h
$$

ところがこいつは負の数を扱えなかったり、無理するとすぐ値が複素数に飛んでしまうという問題がありまして、無事爆発オチだったわけですね。

そこで、負の数にも対応できるように変形します。ようは正の数だろうが負の数だろうが、代入して正の数を返すような関数を一枚噛ませます。

そこで白羽の矢がたったのが$${y=k^x}$$!
こいつは定義域が$${-\infty}$$から$${\infty}$$までなのに、結果が必ず正です。

$${k}$$は1以外の正の数ならなんでも良く、上のグラフでは2の場合と0.5の場合を書いてます。
いわゆる指数関数ですね。

ただ、これでいきなり書き換えるとかなり式が煩雑になってしまいます。

$$
(k^{a\cdot\frac{1}{h}}+k^{b\cdot\frac{1}{h}})^h
$$

やっぱり指数の$${\frac{1}{h}}$$が邪魔ですね。そういうわけで、関数を$${k^{hx}}$$とします。

$$
(k^{ha\cdot\frac{1}{h}}+k^{hb\cdot\frac{1}{h}})^h=(k^{a}+k^{b})^h
$$

少しまともになりました。問題は$${k}$$をいくつにするかなんですが、それ以前にこれ、演算に入る二つの数$${a,b}$$が指数にいるのが厄介です。そりゃそうですね、指数関数に変換したんですから。

これはつまり演算に用いる数に対し、結果のスケールが指数関数的な量として出てくることになり、いわゆる$${1+1=2}$$なんていう「同じくらいの桁どうしの和は同じくらいの桁で計算が収まる」ことがないので扱いにくいですね。

そういうわけで、全体を元のサイズ感に戻すために、全体に逆関数、対数関数を施します。

$$
\log_k((k^{a}+k^{b})^h)=h\log_k(k^{a}+k^{b})
$$

これならだいぶ許せますね。

もう少し手を加えます。
全体の係数$${h}$$をなくしても定数倍なのでグラフや和の性質は変わりません。そういうわけで、

$$
\log_k(k^{a}+k^{b})
$$

となります。
形としてはこれが改良型のマスロフ演算ってことになります。ただし後述するように、$${k,h}$$の対応が素直ではないので、完全な形とはまだ言い難いんです。でも、この形が一番綺麗にやりたいことを表せているかなと個人的には思います。


この関数は元のマスロフ演算、

$$
(a^{\frac{1}{h}}+b^{\frac{1}{h}})^h
$$

と比べると、$${h=1}$$に必ずしも$${k=1}$$は対応しません。そもそも$${k=1}$$は対数関数的にアウトですからね。
そういいわけで完全に$${k}$$と$${h}$$が等しいということはどうもなさそうです。

とはいえある程度極限は同じ振る舞いになってほしいですね。
ここでは特に$${h\to0}$$をあとでしたいので、そこの振る舞いを揃えます。
普通のマスロフ演算では$${h\to0}$$はmax関数に近づきました。詳しくは前回の記事参照。

一方対数化したマスロフ演算は具体的に$${a=1,b=5}$$くらいにして、$${k}$$を10,100,1000としてみますと、

$$
\begin{array}{}y&=&\log_{k}(k^{a}+k^{b})\\k^y&=&k^{a}+k^{b}\\(k=10)\\10^y&=&10^{1}+10^{5}&=&100010\\y&=&5.0000434…&\simeq&5\\(k=100)\\100^y&=&100^{1}+100^{5}&=&10000000100\\y&=&5.00000000217…&\simeq&5\\\end{array}
$$

こんな感じで、大きい方を返してくれます。つまり、$${k\to\infty}$$でmaxに近づくといえます。

二つの関数の極限を合わせるには、$${k=\frac{1}{j}}$$とすればいいのですが、少し関数が気持ち悪い形になりますね。

$$
\log_{\frac{1}{j}}\left(\left(\frac{1}{j}\right)^{a}+\left(\frac{1}{j}\right)^{b}\right)
$$

これなら$${j\to0}$$と$${h\to0}$$がうまく対応してくれるわけです。
それでも見た目がちょっと煩雑だと思います。そういうわけで行の節約にもなりますし、結局

$$
\log_k(k^{a}+k^{b})
$$

で話していくのがいいかなと思うんですね。


さて、この改良版マスロフ演算、まず単位元を考えてみましょう。

$$
\log_k(k^{a}+k^{e})=a
$$

こうなる$${e}$$が単位元です。

$$
\begin{array}{}k^{a}+k^{e}&=&k^a\\k^e&=&0\end{array}
$$

これが正かつ1でないいかなる$${k}$$に対しても成立するのが単位元$${e}$$ということになります。もちろんこれは$${0< k<1}$$と$${k>1}$$に分かれて、

$$
\begin{array}{}e\to\infty&(0< k<1)&(j>1)\\e\to-\infty&(k>1)&(0< j<1)\end{array}
$$

となります。
こうするとトロピカルな極限$${j\to0}$$で単位元は$${-\infty}$$になり、ちゃんとトロピカル和の単位元になってくれます。


さて、そうなるともう一方の極限、$${j\to\infty,k\to0}$$が何になるのか気になります。ここではあえて$${j}$$の式を、もう少し変形して使ってみます。

$$
\log_{\frac{1}{j}}X=\frac{\log_jX}{\log_jj^{-1}}=-\log_jX
$$

より、

$$
-\log_{j}\left(j^{-a}+j^{-b}\right)
$$

これならいくらか見た目がマシです。
$${k\to0}$$すなわち、$${j\to\infty}$$をしてみましょう。

例えば$${(a,b)=(1,5)}$$で$${j=10}$$だと、$${0.999957…}$$になります。
$${(5,8)}$$だと$${4.99957…}$$になります。

$$
\begin{array}{}-\log_{10}\left(10^{-1}+10^{-5}\right)&=&0.999957…\\-\log_{10}\left(10^{-5}+10^{-8}\right)&=&4.99957…\end{array}
$$

というわけで、これはどうもminを表しているようです。

つまり、改良型マスロフ演算は$${k\to0}$$でmin演算に、$${k\to\infty}$$でmax演算になる性質があります。
ということで極限を取るとmax-plusでもmin-plusでも、いずれのトロピカル演算にも持ち込むことができるといえそうです。


さて、この調子でひょっとすると逆元も行けるか? と思いますよね。そしたら大発見ですよ。トロピカル和に逆元があるだなんて(フラグ)。

単位元はこの際$${e}$$と書くことにします。やりたいのは、

$$
\log_k(k^a+k^b)=e
$$

となる$${b}$$を探します。$${k^e=0}$$なので、

$$
\begin{array}{}k^a+k^b=k^e=0\\k^b=-k^a\end{array}
$$

あ゛っ。

勘の良い方はやる前からお気づきでしょうが、この辺りで半分くらいの人が気づくかなと思います。
$${b}$$を出すにはこれの対数を取らねばなりません。負の数の、対数を、とらないと、いけません。

$$
\begin{array}{}k&=&\log_k(-k^a)\\&=&\log_k(-1)+\log_kk^a\\&=&\log_k(-1)+a\log_kk\\&=&\log_k(-1)+a\\&=&a+\log(-1)\end{array}
$$

悪あがきしてもダメなものはダメですね。
はい、$${\log_k(-1)}$$がいるんですよ。

なんのことかわからない方のために解説しますと、$${\log}$$って関数は、負の数を入れることができません、実数の範囲では。
$${x=\log_ky}$$とあると、これは$${k^x=y}$$になる数はなんじゃろか、という意味なので、今の場合、適当に$${k=2}$$なんかにするとわかりやすいと思いますが、

$$
2^x=-1
$$

こうなる$${x}$$を探せって言われてるんですよ。試しに$${x}$$に思いつく数を入れてみるといいんですが、よほど捻くれた人間でない限り、こうなる$${x}$$を見つけることはできません。

捻くれた人間はこうします。

「$${e^{(2n+1)\pi i}=-1}$$だから、$${\log_e(-1)=(2n+1)\pi i}$$だよね? これの底を変換すればいいんじゃない?」

そうなんですよ、$${\log_k(-1)}$$は複素数になります。しかも厄介なことに前回と異なり、$${n}$$に制限がありません。
つまり逆元なんて複素数でもいいじゃん、ってしたところで、その逆元が無数にあるんですよ。

(そういえばトロピカル和の逆元も一つに決まらないっていうんでやめましたよね……。)

まあ、どうしてもやりたかったら、最悪主値をとればいいんですけどね。

主値とは何かというと、こういう周期的な無数の解があるときに、人為的に「これを解! あとはコピペの繰り返し!」ときめた値です。
わかりやすいところで言うと、$${\sin 90^{\circ}=1}$$ですが、$${\sin 450^{\circ}}$$も1です。なので$${\sin}$$が1になる角度は? と聞かれたら、厳密には答えは一つじゃないんですけど、「まあ普通は0から360の間で答えるよね?」というやつです。


しかし、複素数にまでマスロフ演算を拡張するとなると、ちょっとまじめに色々考えないといけません。
というのも、やっぱり複素数の対数関数ってあんまり性質が良くないんです。実数対数関数で成り立つ性質が死んでたりしますから……。

思ったよりも話すことの多いマスロフ演算。次回ようやくもう一つの演算とあわせて色々やります。

この記事が気に入ったらサポートをしてみませんか?