ln(i) 、 √ i 、 i ^ i 、 ln(-1)  の計算方法



■      ln(i)、複素数の対数


複素数、もしくは、虚数の対数というのはなかなか考えにくいのですが、必要に迫られて検討した結果、以下のような結論になりました。やはり、「必要は発明の母」と言われるように、「どうしても答えを見つけなければ」という義務感にせかされるのも良いことですね。

複素数sを a+bi とします。その対数値を c+di とするなら、ln(a+bi) = c+di となります。これは e^(c+di) = a+bi ということなので、e^c * { cos(d)+i*sin(d) } = a+bi となります。a=e^c*cos(d)、b=e^c*sin(d) です。

この式は、先日検討した微分係数決定の法則と同じです。これは偶然の一致なのでしょうが、私としてはとてもラッキーなことで、そのとき作ったプログラムを流用することが出来ます。

a=e^c*cos(d)
b=e^c*sin(d)

これを根の公式のようなやり方で解くことはできませんが、プログラム化して計算すると、あまり時間をかけずに答えを得ることが出来ます。

たとえば、a=1, b=3 としてみます。すると、e^c*cos(d)=1, e^c*sin(d)=3 ということになり、これを acos(1/e^c)=d, asin(3/e^c)=d と変形します。

e^cはマイナスになることはなく、1/e^c<1、 3/e^c<1 ですから、cが小さくなることはないことが予想されます。また、acos, asin は複数の解を持つ式なので、答えはいくつも出てくることが予想されます。cの理論上の最低値は ln(3)=1.0986...  なので、そのあたりから順次cを増加させながら、ふたつの式が同時に成り立つときのdを求めます。すると、c=1.151 あたり、d=1.249 あたりという答えが出てきます。精度を上げればいくらでも詳しい数字を得ることが可能です。

i とは虚数単位ですが、複素数表現では 0+1*i ということです。a=0, b=1 なので、これを代入して計算すると、c=0, d=1.57079...  となるので、ln(i)の答は次のようになります。

ln(i) = 0 + i * pi/2

虚部を+2pi したのも答えですが、+4pi, +6pi, もすべて成り立ちます。

これですべての複素数について対数を計算できることになりました。


ln(s) を使って微分係数決定の法則を説明することができます。そのほうが説明が少し短くなります。

微分係数決定の法則については、リーマン仮説証明の「5の12」で取り上げていますが、ある複素点において、ひとつの方向での微分係数(実部、虚部)が定まると、他の方向での微分係数も定まります。これはどの関数でも成り立ちます。ひとつの傾きが定まると、その点の周囲360度すべてが決まってしまいます。

説明を簡略化するために、最初にa 方向の傾き(微分係数)が定まったとします。その実部の値をx1,虚部の値をy1とします。s1=x1+y1*i ということです。ここで ln(s1)を計算します。ln(s1)=x2+y2*i とします。すると、t1=e^x2 であり、t2=y2 となります。ですから、この点の周囲に出来る微分係数の曲線は、実部が t1*cos(θ+t2) 、虚部が t1*sin(θ+t2) となります。

具体例については 「リーマン仮説証明5の12」を参照してください。なお、実際の計算については、極座標を使ったほうが早くて誤差もないので、そちらでプログラムします。このページの「複素数^複素数」を参照してください。

<補足・追加>

「微分係数の法則」はすべての複素関数で成り立つわけではないことが判りました。成り立たない関数では上記の説明は通用しません。ご注意ください。「成り立たない」ということは、複素数的にゆがみがあるということでしょうか。そのあたりのことはこれからの検討課題です。





■      極座標との関係   (追加   09/05/25)


上記の式を眺めていて気が付いたのですが、極座標の形とよく似ています。・・・ということで、極座標との関係を調べてみたところ、なんのことはない、これは極座標そのものであることがわかりました。これについては、ここで具体例を挙げて説明しておきます。

s1=x1+y1*i として、x1=-0.12, y1=0.16 とします。すると、この複素数の極座標は、絶対値が√(x1^2+y1^2) 角度がatan(y1/x1) なので、角度θ=2.2142974 で、0.2(cosθ+i*sinθ) となります。これは微分係数決定の法則式の結果と同じです。

これは便利です。なぜなら、複素数の対数は極座標に変換して求めることが出来ると言うことであり、これだと速やかに、また、精度良く計算することが出来ます。

これで計算するようにプログラムを変更することにしました。それにあわせて pow02計算も書式を変更しました。




■      √ i


√ i とは 一般化すると 複素数の実数累乗 ということです。

√i  を一般化せずに説明すると、√ i = s と置いて、両辺を二乗すると、i=s^2となります。この方程式は解くことが出来るので、計算で答えが求められ、 s = √2/2+√2/2*i と s = -√2/2-√2/2*i となります。これは極座標で見ると非常に判りやすいのですが、i に対して長さが同じで、角度が半分のベクトルとなっています。

一般化する場合は、s=a+bi のn累乗ということなので、 C(n,r)=n!/(n-r)!/r! とすると、 s^n = a^n + C(n,1)*a^(n-1)*bi + C(n,2)*a^(n-2)*(bi)^2 + . . . という無限計算になります。この計算のためのプログラムを作るのは面倒ですが、一度出来てしまえば、あとは簡単な操作で答えが出てきます。

a=0 のときは右辺が零になり、答えが出ないので、別のプログラムにします。bi^n ということなので、bi^n=b^n*i^n として、i^n は、絶対値が1で、角度 n*pi/2 の複素数が答えですから、i^n=cos(n*pi/2)+i*sin(n*pi/2) となります。ゆえに、bi^n = b^n * { cos(n*pi/2) + i * sin(n*pi/2) } となります。あとはこれをプログラム化しておくことです。





■      i ^ i の計算方法


虚数の虚数累乗というのは、ln(i)よりさらに考えにくいことです。以前これを検討したとき、まったく歯が立ちませんでした。しかし、今回、ln(s)の答えが出ているので、難なく i ^ i の答えも出てきました。

まずは、s1=x1+y1*i s2=x2+y2*i とします。s1^s2 = s1^(x2+y2*i) と書き直すと、これをさらに s1^x2 * { cos(y2*ln(s1)) + i*sin(y2*ln(s1)) } の形に整理することが出来ます。それぞれの項目ごとに説明すると以下のようになります。

s1^x2 = (x1+y1*i)^x2 、x1, y1, x2 は実数です。この計算方法は、そのまま計算するということなので、説明するほどのこともないのですが、実際の計算はひどく面倒なことになります。つまり、C(n,r)=n!/(n-r)!/r! とすると、x1^x2 + C(x2,1)*x1^(x2-1)*y1*i + C(x2,2)*x1^(x2-2)*(y1*i)^2 + C(x2,3)*x1^(x2-3)*(y1*i)^3 + . . .  と続きます。x2が整数でないと無限計算になります。普通は収束して実部、虚部それぞれ値を持ちます。その値をx3, y3 としておきます。s1^x2 = x3+y3*i ということです。

cos(y2*ln(s1)) の計算のためには ln(s1)の計算が終わっていなければなりません。ln(s1)の計算については先の章で説明してあるので、ln(s1)=x4+y4*i としておきます。s1が決まると、x4, y4を計算できます。x4, y4 が決まると、cos(y2*ln(s1)) も計算可能となります。cos(y2*ln(s1)) = cos(y2*x4+y2*y4*i) なので、cosの公式に y2*x4+y2*y4*i を代入します。計算は面倒ですが、プログラム化しておけばパソコンが計算してくれるので、大した手間はかかりません。その答えを x5+y5*i としておきます。

sin, cosの公式は良く知られていますが、参考までに載せておきます。

sin(x) = x - x^3/3! + x^5/5! - x^7/7! . . . .
cos(x) = 1 - x^2/2 + x^4/4! - x^6/6! . . .

この x を複素数として、s=y2*x4++y2*y4*i  を代入するということです。

sin(y2*ln(s1)) も同様に計算します。結果は sin(y2+ln(s1)) = x6+y6*i としておきます。

さて、これで s1^x2 * { cos(y2*ln(s1)) + i* sin(y2*ln(s1)) } が計算できるようになりました。先の結果を代入すると、(x3+y3*i) * { x5+y5*i+ i*(x6+y6*i) } となり、これを整理すると、(x3+y3*i)*(x5-y6+(y5+x6)*i) = x3(x5-y6)-y3(y5+x6) + (x3(y5+x6)+y3(x5-y6))*i となります。表記はやや複雑ですが、実際はプログラムが計算してくれるので、すぐに答えが出てきます。


では、ためしにひとつ計算してみます。 i ^ i というのが課題でしたが、これは 0+1*i ということなので、s1=0+1*i, s2=0+i*i となります。

x2=0 なので、s1^x2=1+0*i となります。

ln(s1)は先の章で計算してあるように ln(i)=0+pi/2*i, y2=1 なので、cos(0+pi/2*i)+i*sin(0+pi/2*i) を計算することになります。その結果は、cos(0+pi/2*i)=2.5091784+0*i, sin(0+pi/2*i)=0+2.3012989*i となり、sinに i を掛けて足すと、0.2078795+0*i となります。s1^x2=1 なので、これが答えです。つまり、i ^ i = 0.2078795 です。面白いことに、i ^ i は実数なのですね。    ヽ(゜Д゜)ノ !!  

ちなみに、0.2078795は e^-(pi/2) です。





■      階乗の公式と比較


i ^i は階乗の公式にも登場します。ですから、i ^ i の理解が正しいかどうかを階乗の公式を使って検証してみることにします。

階乗の公式とは  n! = (n/e)^n * √(2*pi*n) * e^ { B(2)/2n + B(4)/12n^3 + B(6)/30n^5 + .... } のことで、n に複素数を入れると複素数階乗となります。そこで、n=i として計算してみます。

i! = (i/e)^i * √(2*pi*i) * e^ { } ということです。 i! = 0.49801 - 0.15494*i  であることは k(s)の公式を使って計算した結果です。これが左辺です。今回は、右辺を使って計算します。

右辺の (i/e)^i が今回計算したところで、(i/e)^i = i^i/e^i  ですから、i ^ i = 0.2078795 、 e^i = cos(1) + i*sin(1) なので、(i/e)^i = 0.112317 - i*0.174924 となります。

√ i = √2/2+√2/2*i  であることは先の章で明らかにしていますが、 √(2*pi*i) = √(2pi) * √(i) なので、√(2*pi*i) = √(pi)+√(pi)*i となります。

e^{ B(2)/2i + B(4)/12i^3 + B(6)/30i^5 + .... } を計算するためには、まず括弧の中を計算します。1/i = -i で、しかもこのiを括り出せるので、i*{ - B(2)/2 + B(4)/12 - B(6)/30 + .... } となります。この計算はベルヌーイ数が発散するので、括弧の中は振動発散して計算できません。しかし、n!のときは(n+100)!を計算して、そこからn!を求めました。ですから、(a+bi)!も同じことで、(100+i)!を計算して、そこから逆算して、i!を特定させ、そこから括弧の中を特定させることが出来ます。

ただし、このやり方だと、先にi!を計算するので括弧の中を確認する必要がなくなります。これは i!の計算だからであって、(100+i)! なら、括弧の中が収束するので複雑な説明はいらなくなります。もっとも、厳密に考えるとここにはまだ問題が残っていることに留意する必要があります。k(s)の計算と同じで、ここはベルヌーイ数が関係しているので、無限に計算すると収束しなくなります。これを理論的にはどう説明して良いか、いまだに検討中ですが、(100+i)、(200+i)、(300+i) と増やしてゆくといくらでも厳密な収束値を計算できるので、理論上も収束と認めて良いのではないかと思うのですが、はたしてどうでしょうか。いずれにしても値が正しいことに変わりありません。

そういうわけで、理論上の検討すべき点は残っていますが、{ B(2)/2i + B(4)/12i^3 + .... } の値を特定させることはどの複素数でも可能です。ただし、実際上はある程度大きい実部の複素数(a+r+bi)!を計算して、それから (a+r+bi)!/(a+r+bi)/(a+r-1+bi)/(a+r-2+bi)/(a+r-3+bi)/.... を計算して (a+bi)! を求めることになります。そのやり方で i! を求めると結果は、

i! = 0.498015 - 0.154949*i

となります。これは先に k(s)の公式から計算した値とまったく同じです。これにより、先の ln(i) 、 i^i についての分析が正しいことが検証できました。また、複素数階乗を計算するのに、階乗の公式を使うことも出来るし、k(s)の公式を使うことも出来ることが確認できました。





■      ln(-1) の計算方法


「マイナスの数の対数は存在しない」と教えられていましたが、上記の複素数対数を前提にするとマイナスでも対数値を求めることが出来ます。

たとえば、ln(-1) ですが、a=-1+0*i として複素数対数公式に代入しても答えは出ません。実数については普通の対数として計算するプログラムになっているからです。(これはプログラム修正する予定です。)しかし、a=-1+0.1*i、 a=-1+0.01*i、 a=-1+0.001*i、として、この極限値を計算すると lim[p→∞] ln(-1+1/p*i) = 0+pi*i  という答えを得ることが出来ます。これをln(-1)の値と認定しても良いのではないでしょうか。つまり、

ln(-1)=0+pi*i ということです。

マイナスの対数は複素数対数の一種なので複数の値を持っていて、ln(-1)=(pi+2r)*i (r=0,1,2,3...)と一般化できます。


一般的値としては、実部は ln(-r)=-ln(r) であり、虚部はすべて pi です。ln_re(a+bi)=ln_re(-a+bi) がなりたち、ln_im(a+bi)+ln_im(-a+bi)=pi となっています。





■      (-1)^i マイナスの虚数べき乗


上記のやり方を適用すると答えが見つかります。 a^bi = cos(b*ln(a))+i*sin(b*ln(a)) なので、(-1)^i = cos(ln(-1))+i*sin(ln(-1)) です。ln(-1)は先の計算してあるので、pi*i であることは判っています。これを代入して cos(pi*i)とsin(pi*i)を計算します。公式にpi*iを代入して答えを求めますが、面倒な計算になるのでプログラム化しておきます。答えは 11.5919532+0*i と 0+11.5487393*i です。sinにはiが掛けられているので、-11.5487393 になり、これを加えると、0.0432139 となります。つまり、(-1)^i = 0.0432139...  です。これも実数になりますね。

e^(-pi) = 0.0432139... です。





■      複素数^複素数の計算


先に i ^ i の計算方法を解説しましたが、ここでは、複素数 s1^s2 の極座標を使った計算方法を解説します。

s1=x1+y1*i s2=x2+y2*i とすると、s1^s2 = s1^(x2+y2*i) ということです。これを s1^x2 * { cos(y2*ln(s1)) + i*sin(y2*ln(s1)) } と直すことが出来ることはすでに説明しました。この式の前半が s1^x2 で、 s1^x2 = (x1+y1*i)^x2 ということです。

さて、s1^x2 の計算については、極座標を使っても説明できます。こちらのほうが実際的です。s1を極座標表示したものを s1 = r*(cos(θ)+i*sin(θ)) すると、s1^x2は r^θ と、 θ*x2 だけ回転させたベクトルとなります。このほうが計算が簡単です。証明としては、式を変形するだけのことですが、s1^x2 = r^x2 * (cos(θ)+i*sin(θ))^x2 = r^x2 * (cos(θ*x2)+i*sin(θ*x2)) となります。

同じく、ln(s1) とは exp(s1) の逆を計算することですから、s1の極座標 r*(cos(θ)+i*sin(θ)) を求めて、ln(r) と θ を計算するだけです。つまり、ln(s1)=x3+y3*i とすると、r = √(x1^2+y1^2) θ = atan(x2/x1) ですから、x3=ln(r) y3=atan(x2/x1) となります。

あとは、cos(y2*ln(s1)) + i*sin(y2*ln(s1)) を計算して、s1^x2 を掛ければよいと言うことです。ただし、atan()はマイナスの角度を答えることもあるので、最後に調整します。また、sin, cos は複素数用のプログラムを使います。(第4の部屋参照のこと)






表紙に戻る  前のページへ  次のページへ