階乗の複素数化



階乗が実数の範囲で定義できることは前のページで説明しました。

リーマン仮説証明の過程で、複素数の範囲で定義可能な式を見つけたので、それに基づいて複素数階乗の計算プログラムを作ってみました。これを使うと、i ! なども計算でき、一般の a+bi についても問題なく答えが出てきました。ガンマー関数は (x-1) ! なので、複素数階乗の実部から1を引くとガンマー関数になるはずです。もっとも、すでにお話ししたように、私はガンマー関数については概略しか知りませんので、責任ある発言はできません。私がここで言えることは、複素数階乗の計算式を前提とした場合、どのような数になるかということだけです。とくに面白い現象を見つけたわけではありませんが、複素数階乗が矛盾無く計算できることを示せたことは、少しは意味があるのではないでしょうか。

私同様の初心者の方々に興味を持ってもらうためにひとつ問題を出します。

i ! = x+yi とします。x,y は実数です。さて、x, y は何になるでしょうか?

ひどく初歩的な問題ですが、私の手にする数学書には載っていませんでした。初心者に難しいということではないはずなのですが、おそらく数学の専門家たちは皆さん知っているのでしょうね。

さて、答えについてですが・・・、このページの最後を見ていただければと思います。

(1+i)! = x+yi としてみます。この答えは判りますか?これもこのページの最後に載せておきます。。

以下、いくらでも問題を出せますが、それもこれも複素数の階乗公式で計算できるからです。そこで、その公式を再度挙げておきます。

s! = k(1-s) * s * (2pi)^s / 2 / k(s) / cos(pi*s/2)

もしくは、

s! = - k(-s) * (2pi)^(s+1) / 2 / k(s+1) / sin(pi*s/2)

(注   上記の式には k(s)、もしくは k(s+1) で割るところがあるので、k(s)=0 だと答えがでなくなります。その場合は精度を上げて、極限値として計算してください。)



k(s)がふたつ使われていますが、計算には支障はありません。これで複素数計算が可能となります。ただし、ベルヌーイ数を使った部分があるし、無限計算部分もあるので、誤差に惑わされないようにしなければなりません。

k(s)の計算については、リーマン仮説証明での説明を見ていただければ判ると思いますが、式だけを再度挙げておくと、k(s) = lim_[n→∞] { zt(s,n) + ber(s,n) } となります。

zt(s,n) = 1 + 1/2^s + 1/3^s + . . . + 1/n^s

ber(s,n) = Σ_[r=0,∞] B(r)*(s-1+r)!/r!/(s-1)!/n^(s-1)/n^r

B(r)はベルヌーイ数で、 B(0)=1, B(1)=-1/2, B(2)=1/6, B(4)=-1/30, B(6)=1/42, B(8)=-1/30, B(10)=5/66, B(12)=-691/2730 . . . . . . . ということです。


さて、実際にどのように計算するかを示しておきます。s=a+bi で、たとえば a=1, b=3 とします。すると、k(-1-3i) と k(2+3i) については k(s) の計算式から容易に計算できます。「リーマン仮説証明」を参照してください。

結果は、k(-1-3i)=x+yi とすると、x=0.27412408..., y=-0.058777533... となります。
k(2+3i)=x+yi とすると、x=0.79802198... y=-0.11374430...  となります。

(2pi)^(s+1) = (2pi)^2 * { cos(3*ln(2pi)) + i*sin(3*ln(2pi)) } なので、実部は x=28.35422855... y=0 となります。

sin(pi*s/2)=x+yi については、sinの公式に複素数を代入して計算します。少し面倒ですが、プログラム化してしまえばすぐに答えが出ます。 x=55.6633808... y=0

あとは、これら複素数を掛けて割れば (1+3i)! になります。 (1+3i)!=x+yi とすると、x=-0.082395272... y=0.091774287... となります。


さて、s! 全体はどのような構造になっているのでしょうか。

まず目につくのは、s=a+bi, s!=x+yi とすると、(a-bi)!=x-yi ということです。

マイナス階乗の公式は複素数まで有効で、 (-s)! = s*pi / s!sin(s*pi) となっています。

また、当たり前のことかもしれませんが、(s+1)! = (s+1)*s! となっています。

虚部が零のときは実数階乗になるので、すでに分析済みですが、前ページの図にあるように、マイナス部分ではxが1動くたびに、値は ∞から∞へ、もしくは-∞から-∞へと動きます。複素数階乗から見ると、虚部零のところは特殊値になっていて、ここを除くとすべて波を打つ曲面となります。立体なので図示するのが難しいので、k(s) に倣って、零点となるところを図示してみます。

jb16の図 実部が零となるのが右図です。























jb18の図 虚部が零となるのが右図です。


























jb20の図 実部と虚部を合成すると右図になります。実零線と虚零線が交互に現れて、重なる部分はb=0を除いてなさそうです。右図ではb=0上に零点が発生しているように見えますが、実際は、b=0は実数階乗を意味するので、ここにも零点はありません。
なお、複素階乗に零点がないことは、リーマン仮説証明の一部としてすでに正式に証明済みですので、関心のあるかたは別ページの「リーマン仮説証明」をご覧ください。

実部が大きい方が波が大きく、また、虚部の絶対値が小さい方がより波が大きくなります。差が激しすぎて図では示しにくいのですが、(10+5i) ! = 9.295E5 + -6.785E5 * i , (-10+5i) ! = 8.174E-12 + 4.298E-12 * i  となることを見れば、だいたいのところは判るのではないでしょうか。

波となっているので、細部では値は上下しますが、大きく見ると、虚部が大きくなればなるほど、値は小さくなります。たとえば、(3+3i) ! = -1.1294 - 1.5112 * i , であるのに対し、 (3+30i) ! = -4.535E-16 + 1.195E-15 * i となります。


iz09の図 たとえば、(x+2i) ! として、xに対して値がどのように変化するかを図示していました。x軸はATN座標となっています。値もatanで縮めてあります。




















iz11の図 虚部が変化する場合としては、たとえば (0+xi) ! として、値がどのように変化するかを図示していました。x軸はATN座標となっています。実部中央が盛り上がっているのが判ります。



















最初の問題の答えは以下の通りです。

i ! = (0+i) ! = 0.49801... - 0.15494... * i  となります。
(1+i) ! = 0.6529... + 0.34306... * i  となります。







ベルヌーイ数の複素数化

08/11/24



ベルヌーイ数は従来、正の整数でしか理解されていませんでしたが、k(x)を使うとベルヌーイ数の複素数化も可能となります。Σn^x の一般化の過程で B(x)=-x*k(1-x)  という式を導出しましたが、k(x)が複素数ならB(x)も複素数になります。

B(x)=-x*k(1-x) の求め方は、Σn^x=Σ(1/n)^(-x) なので、左辺のベルヌーイ数表示、右辺のベルヌーイ数表示をイクオールでつなぎ、あとはそれを整理するだけです。つまり、左辺は P=n^(x+1) とすると、Σn^x = P/(x+1) + B(1)*P/1!/n + B(2)*P*x/2!/n^2 + B(4)*P*x(x-1)(x-2)/4!/n^4 +.... -B(x+1)/(x+1)  となります。ただし、ここにはひとつ重大な問題があります。従来のベルヌーイ数理解では B(1)=-1/2 となっています。ところがこれでは上記の式は成り立ちません。su(1)=1/2 に倣って B(1)=1/2 と修正する必要があります。

B(1)は -1/2 と理解した方が便利なこともあるので、B(1)=1/2 と定義することは妥当ではありません。ケースバイケースという説明が判りやすいのですが、こういう非数学的言い方は許されるでしょうか。とにかく、ここではB(1)=1/2 であるとご了解下さい。

左辺本体に -B(x+1)/(x+1) が付加される点については、第5の広場(4)を参照してください。

右辺は Σ1/n^x = k(x) - 1/(x-1)!/n^(x-1) * { B(0)(x-2)! + B(1)(x-1)!/n + B(2)x!/2!/n^2 + . . . }  の x を -x に置き換えたものです。

左辺=右辺 と置くと式の本体部分が消えて、-B(x+1)/(x+1)=k(x) が残ります。これをB(x)について整理すると B(x)=-x*k(1-x) となります。

この式の形を見ればすぐ判ることですが、大雑把に言うと、B(x)とk(x)ではx軸の左右が逆になっていて、B(x)のプラス部分がk(x)のマイナス部分となります。k(x)の実部がプラス方向に大きくなると絶対値が1に近くなるので、B(x)の実部がマイナス部分はその(-x)倍となります。また、k(x)のマイナス部分は波になっているので、B(x)のプラス部分も波になります。


B03の図 B(x)の実部を図にしてみました。虚部は0です。



















k(x)の図 参考までにk(x)の図も載せておきます。

x=0 近辺では xとk(1-x)が打ち消しあって、ひとつの線に繋がります。ちなみにB(0)は上式では計算できませんが、極限値としては B(0)=1 となります。















B06の図 B(a+b*i)は、bの増加とともに波打ちますが、aがプラスだと大きく、マイナスだと小さく波打つようです。













jc05の図 さて、このB(s)にも零点があるので、それを図示してみます。実部が零となる実零線は右図のようになります。





















jc08の図 虚零線は右図のようになります。マイナス部分には虚零線はありません。























jc10の図 これを重ねたのが右図です。青線と赤線の交点が零点となるのはk(s)のときと同じです。

この図の零点を計算してみると、当然のことながらk(s)の零点とまったく同じ値が出てきました。




















(10/07/02 追加)


実数階乗公式を複素数に拡張する際の問題点



このページの最初に紹介したk(s)を使った複素数階乗の定義は有効ですが、実数のときに使った階乗公式を単純に複素数に拡張することは出来ません。この現実は非常に重要で、拡張という作業を安易に行ってはならないことを教えてくれます。

いわゆる階乗の公式は
s! = (s/e)^s * √(2*pi*s) * e^ { B(2)/2s + B(4)/12s^3 + B(6)/30s^5 + .... }
というものです。

この式は実数においては問題はありません。ただ、普通の式と異なり、厳密に考えると右辺は収束しないので、以下のような計算方法を使うことが前提です。つまり、sを実数に戻してxとします。この xの実部に任意の正の整数nを加えて、(x+n)! を計算します。実部が大きいと収束誤差が減少するからです。その上で、(x+n)!/(x+n)/(x+n-1)/(x+n-2)/.... と順次降下すれば、x! となります。より厳密に求めたいときは、nをさらに大きくすれば良く、これは無限に可能なので、誤差も無限に縮小します。

さて、複素数 s=a+bi として階乗の公式を考えるとき、bがプラスの数であるときは良いのですが、マイナスの時は成り立ちません。どうしてなのか? 原因は何か? については今後分析を続ける予定ですが、複素数のルート計算など私が考案したやり方で計算しているので、成り立たない原因がそこにある可能性も残っています。しかし、今のところ再検討しても特に誤りは見つからないので、ここでは実数階乗の公式を複素数に拡張する場合の有効範囲は、虚部がプラスのときのみという条件を付けておくことにします。

虚部がマイナスの時の計算が難しいと言うことではありません。bをプラスに変えて sを計算し、答えの虚部にマイナスを付ければよいのです。操作は簡単ですが、これでは別の計算式となってしまいます。これはどういうことなのでしょうか。

さらに検討すべき問題が残っています。実数階乗公式は、誤差をなくす計算方法を導入すると、bがマイナスでも収束します。ところが、収束するにもかかわらず、結果は間違った答えとなります。この間違った答えと、正しい答えとの間には何らかの関係があるはずですが、今のところ、その関係は見えてきません。この関係を明らかにすることが今後の課題です。



プログラムをいじっているうちに正しい答えがでるようになった。???プログラムミスだったのか?どこを間違えたか不明。それとも、この正しいと思う答えが間違っているのか???








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