So-net無料ブログ作成
検索選択

Zeta関数の立体視 [日常のあれやこれや]

今年の年号「2017」は306番目の素数である。「博士の愛した数式」に出てくる数学者のように「ああ、2017は4を法にして1と合同だからふたつの平方数の和としてあわらすことができる素数だ。いや、それは決して珍しいことではない、ふたつの平方数の和で表すことのできる2017以下の素数は147個もある」などというともっともらしいかもしれない。

だからというわけではないんだけど、ちょっとしたきっかけで、正月の間の食っちゃ飲んで寝の繰り返しの中で Riemannのゼータ関数の振る舞いをMathematicaを使っていろいろ眺めていた。解析接続とはなんと不思議で強力な道具なんだろう、と改めて思った....

Riemannのゼータ関数は素数の並び方を解析学の言葉で調べるのに使える関数で
\begin{equation} \zeta(s) = \sum_{n=1}^\infty \frac{1}{n^s} \end{equation}
みたいな無限級数の和で定義されている。一見簡単そうに見えるんだけど実数の$s$に対して$s>1$でないと収束しないのはすぐわかる。$s$について無限回微分可能なので、$s$を複素数に拡張して解析接続で$\Re(s)<1$の領域にも定義域を広げることができる。このゼータ関数がオイラー積と等しい
\begin{equation} \zeta(s) = \prod_{p:\scriptsize{\mbox{素数}}}\frac{1}{1-p^{-s}} \end{equation}
ことは初等的な方法でゆっくり考えればわかる(収束性などは注意が必要)。この関係のおかげで素数の分布を、整数論ではなく解析学を使ってゼータ関数の性質を調べることでわかるようになる。

なんて、簡単に書いたけど実はすごく難しい。解析接続で定義域を広げることができるのはわかるけど、僕には具体的にどうすればいいかわからない。収束域での特定の$s$に対する値を知るのも途方に暮れてしまう。$s$が実数の整数であったとしてもその値を計算するのは簡単ではない。

また、$s$が負の偶数のときにはゼータ関数は0になる。これを「自明の0点」というけど、どこが自明なのか僕には全然わからない。複素関数論の粋(すい)という気がする。

$x$以下の素数の数を表す素数計数関数$\pi(x)$
\begin{equation} \pi(x) = R(x)-\sum_\rho R(x^\rho) \end{equation}
と書けるというのをリーマンが示したという。ここで$R(x)$はリーマンの関数でその中身は複雑なのでこことかこれの四角い箱の中を見て欲しい。そしてこの$\rho$に関する和はちょっと変わっていて、ゼータ関数の(非明示的な)零点を取り出してきてその値を虚数部の小さい方から並べて、それに対して足すということになっている。

素数の分布なんていうどうしようもなくガチガチ整数論というようなものが、変な形をした複雑な複素関数と直接結びつくというのはすごく不思議な気がする。この第1項だけでもかなりいい近似になるらしいんだけど、第2項をくっつけることでぴったりとあうという。しかもゼータ関数の零点なんていうさらにおかしな、とても関係あるとは思えないものがジグソーパズルのピースのようにぴったりと合わさるという。しかもそのピースの外形線の長さは無限大でしかも無限個の凸凹があるのにかかわらず、である。なんてことだ、と思ってしまう。

リーマンはゼータ関数の零点は実数部が1/2だという予想を立てたけど、これはまだ未解決の問題らしい。誰かが零点の実数部は0と1の間以外にはなくて、しかも実数部が1/2の零点は無限にある、ということを証明しているらしい。僕にはそんなことが可能だということさえ不思議な気がする。

ゼータ関数はMathematicaで数値評価が可能なので絵に描いてみることができる。ゼータ関数の値を実数軸に垂直な直線に沿ってプロットしてみると
0101zeta2.png

みたいになる。これは$s=\sigma+i \tau$として実数部$\sigma$がそれぞれ-6、-4、-2、0、1/2、2、4、6のときに虚数部$\tau$を0から50まで変化させたときのゼータ関数
\begin{equation} \zeta(\sigma + i \tau) \end{equation}
の値の複素平面上での軌跡を描いたもので、横軸が実数軸、縦軸が虚数軸である。

ゼータ関数の無限和のひとつの項は
\begin{equation} \frac{1}{n^{\sigma + i \tau}} = e^{-\sigma \log n}e^{-i \tau \log n} \end{equation}
と書けるので、虚数部$\tau$にしたがって位相が変わって、ちょうどFourier級数和のようになるので、軌跡がくるくるまわるのは、まあそうなのかな、と思える(刻みが$n$ではなく$\log n$になってるけど)。

でも、実数部の絶対値が大きくなると振る舞いは単純になって退屈だけど、0から2以下ぐらいの間はなぜかすごく複雑なことが起こっている。そして、これをみると零点(関数値の実数部と虚数部がともに0)が0から1までの間にはないというのは直感的にはそうだろうな、と思える。どうやって証明すればいいのか全然わからないけど。

リーマンの指摘した実数部が1/2で虚数部を0から55まで変化させたときの軌跡を、Mathematicaを使って奥行き方向に$s$の虚数部の値をとって立体視できるように描いたのがこれ
0101zeta.png

平行法で立体視できるようにした。奥の壁が関数の値の複素平面になっている。また奥の壁の面が虚数部$\tau=0$で手前に来るほど大きな値になっている。

奥の方から一回りするごとに複素平面の原点(すなわち零点。図には赤い棒を立てた)を通っているように見える。回るたびに大きさや形が変わるんだけど、必ず原点を通過している。ランダムなように見えて決して遠くへ行ってしまわない。かといって同じところをぐるぐるしてるだけか、というとそうではなくて遠回りしたかと思うと次はくるっとすぐ戻ってきたりする。この遠かったり近かったりするのが素数分布のひとつひとつの粗密を作り出しているらしい(無限和の結果がそうなるだけなので直接的ではないけど)。

ちなみに、これを描くためのMathematicaコードは
yStart = 0;
yEnd = yStart + 55;
yStep = 0.05;

zl = Table[ With[{z = Zeta[1/2 + I y]}, {y, Re[z], Im[z]}],
            {y, yStart, yEnd, yStep}];
tbzl = Tube[zl, .05];
tborg = {Red, Tube[{{yStart, 0.0, 0.0}, {yEnd + 3, 0., 0.}}, .07]};
rng = With[{rnd = 5}, 
   Map[{Floor[Min[#]*rnd]/rnd, Ceiling[Max[#]*rnd]/rnd} &, 
    Transpose[zl]]] + {{0, 5}, {0, 0}, {0, 0}}

otherOpts = Sequence[PlotRange -> rng, 
   FaceGrids -> {{-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, -1}, {0, 0,
       1}}, ImageSize -> 200, BoxRatios -> Automatic];

gl = Graphics3D[{tbzl, tborg}, ViewPoint -> {8, -0.02, 0}, otherOpts];
gr = Graphics3D[{tbzl, tborg}, ViewPoint -> {8, 0.02, 0}, otherOpts];

{gl, gr}
のようなもの。Mathematica6.0にはなかったTube[]という関数のおかげで曲線に太さを与えることが簡単になって、両眼立体視の視認性がよくなった。6.0の時代はParametricPlotを使って3次元曲面として描くしかなかった。

この絵では虚数部が0付近のものだけど、もっと実数軸から離れると複素平面の原点から離れた輪っかがちょっとずつ増えてくる。大きな素数では間隔が空いてきて、補正項の出番が減ることに対応しているんだろうか。なんとも不思議だ。

もともとのゼータ関数の定義には特定の定数はまったく含まれていない。ただひとつ逆数の「1」が現れるだけなのに、なんで実数部が1/2なんて特徴的な数がでてくるんだろう。物理学ではなにか特徴的な値が現れたときはたいてい構造的な定数、たとえばヤング率とか比誘電率とか、あるいは水素原子の半径とか重力加速度とか、もっと原理的には光速度やプランク定数や重力定数などといったものの反映であると考えて間違いない。

素数の分布に、実数体における積の単位元の半分の値が関係してる、というのはどういうことだろうか。その奥になにか特別な原理が隠れているんだろうか。

整数の性質はこの宇宙が作られたと同時にできたんだろうか。だとすると素数の並び方が違う宇宙もありえるんだろうか。素数はひとつ、ふたつ、みっつ、と数える操作そのものが持つ特性なので、整数の性質の違う宇宙というのはそもそも数えるということが違っている宇宙ということになる。それはいったいどんなものなんだ。妄想はふくらんでしまう。



ところで、複素関数論は大学のときに初めて勉強したけど、そのときはへんな関数の定積分を計算するテクニカルな手段という認識しかなかった。普通のやり方では積分できないけどたまたま複素平面上でうまい具合に積分路が描けたときに計算できる、ほんのごく一部の特殊な関数に使えるだけの、いわば試験問題用みたいに考えていた。

会社に入ってから、具体的になんだったかは忘れたけど解析接続の重要性を思い知らされる機会があって複素関数論のありがたさを改めて認識した。留数計算や定積分の値を求めることよりずっと正則性と解析接続の応用範囲の広さを天啓のように実感した、という記憶がある。残念なことに昔のことなのでその実感の印象しかもう覚えていない。

今の大学の授業がどんなものなのか知らないけど、複素関数論はしっかりやっておいたほうがいい、と僕は思う。そして留数計算ばかりやらせるのではなくて、解析接続の実例を教えた方がいいように思う。僕が実感した時はつくづく思ったんだけど、なぜそう思ったかは忘れてしまう、という若い人にとっては全く説得力のない全然参考にならない年寄りの技術屋のオオボケでしたというオチになってしまった。やっぱり僕は教育者には向いていなかった、ということだな。

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。
メッセージを送る