数学ガールは決して架空のものではない

今日の僕の話。

登場人物

    • 中3。数研部員。
    • 趣味は数学とプログラミング。
    • 数学好きだけど、厳密な証明とかは好きではなく、数式をいじって遊ぶのは好き。
    • 数学のカリキュラムに乗っ取った勉強はしていないので、抜け落ちてる定理は多い。
  • 友1
  • 友2
  • 先輩1
  • Wikipedia

そのいち、ネットにて

俺「4次元球の体積を普通に積分しようとしてもルートが消えないんだけどどうすればいいの」
先輩1「x=r\sin(t)とおいて置換積分すると\frac{8}{3}\pi\int_0^r\cos^4(t)dtになるよ」
俺「なるほど」

そのに、ネットにて

俺「あれ、このΓってガンマってよむんだっけか…」
Wikipediaでしらべる。
俺「なんだこのガンマ関数」
いつもの癖で、リンクをたどる。
Wikipedia「ガンマ関数っていうのは、階乗の複素数への拡張のことですよ、お兄さん。」
俺「へえー、-\frac{1}{2}の階乗に相当するのは\sqrt{\pi}なのかー」

そのさん、学校にて

俺「…というわけで、置換積分をつかうと4次元球の体積が求められるらしい」
友1「なるほど」
俺「先輩がいってたことをまとめると、\cos^n(t)積分を一般化できれば、一般のn次元球の体積が数学的帰納法で求まることになるな」
俺「どうやればいいんだろう」
俺「\cos^n(t)をうまく\cos(mt)の和に分解できればいいのかな」
実際に分解してみる
\cos^2(t) = \frac{1 + \cos(2t)}{2}
\cos^3(t) = \frac{3 \cos(t) + \cos(3t)}{4}
\cos^4(t) = \frac{3 + 4 \cos(2t) + 1 \cos(4t)}{8}
\cos^6(t) = \frac{10 + 15 \cos(2t) + 6 \cos(4t) + \cos(6t)}{32}
俺「うーむ。。。」
(しばし悩む)
俺「\cos(x) = \cos(-x)じゃん!」
俺「ってことは、この数式の係数はパスカルの三角形とみなせる!」
しばし考える。
2\cos(\theta)\cos(m\theta) = cos((m-1)\theta) + cos((m+1)\theta)
俺「こうか」
俺「こうなるっぽい」
友1「それ確か積和公式かなんかだった」
俺「なに、そうだったのか」

そのよん、学校にて

俺「とりあえず、\cos(mt)の和に分解できたから、それの積分を考えればいいのか」
俺「これは簡単そうだな。 \int\cos(mt)dt = \frac{\sin(mt)}{m}
俺「あれ、でもm=0のときは例外か」
俺「 \int\cos(0)dt = t
俺「なるほど、だから偶数次のときだけπの次数が増加するのか(m=0が存在するのは偶数次のときだけ)」
俺「あれ、偶数次の場合、mが0以外の項の積分はぜんぶ0か」
俺「あと、奇数次の場合は、普通に積分したほうがはやそうだ」

とかいっていろいろ計算。

n次元球の体積で、r^nにかかる係数の、(n-1)次元球の係数に対する倍率は
nが偶数のときは
 \frac{\pi}{2^n} _n\mathrm{C}_{\frac{n}{2}}
nが奇数のときは
 \frac{2}{2^n}\sum_{x=0}^{n}_n\mathrm{C}_x\frac{\sin(\frac{(2x-n)\pi}{2})}{2x-n}

そのご、家にて

俺「あれ、なんか気がついたらHaskellと戯れてた…」
俺「あ、ついでだから多次元球の体積でも求めてみようかな」
とかやってコードをかく。

module Main where
import Data.Bits
import Ratio
import Data.Ratio
import Prelude

 {- (**) :: Rational -> Integer -> Rational
(**) _ 0 = 1
(**) x n = 1 -}

combination :: Integer -> Integer -> Integer
combination n 0 = 1
combination n x = ( combination n ( x - 1 ) ) * ( n - x + 1 ) `div` x

ns :: Integer -> ( Rational , Integer , Integer)

ns 0 = ( 1 % 1 , 0 , 0 )

ns x = if ( mod x 2 ) == 0
        then ( on0 / ( 2 ^ x ) * fromIntegral ( combination x halfx ), on1 + 1 , on2 + 1 )
        else ( on0 * 2 * are , on1 , on2 + 1)
    where ( on0 , on1 , on2 ) = ns (x - 1)
          halfx :: Integer
          halfx = shift x (-1)
          are :: Rational
          are = ( sum ( map are2 [0..halfx] ) )
          are2 :: Integer -> Rational
          are2 k = fromIntegral ( ( combination halfx k ) ) * ( (-1) ^ ( halfx - k ) ) / fromIntegral (x - 2 * k )

main = do putStrLn ( foldl (++) "" ( map a [0..10] ) )
    where a :: Integer -> String
          a i = "The space of " ++ (show i) ++ " dimension sphere is " ++ (product_complete ( (fracstr ns0) ++ (powerstr "PI" ns1) ++ (powerstr "r" ns2) ) ) ++ "\n"
            where (ns0, ns1, ns2) = ns i
                  fracstr :: Rational -> String
                  fracstr 1 = ""
                  fracstr x | (denominator x) == 1 = (show (numerator x))
                            | otherwise            = (show (numerator x)) ++ "/" ++ (show (denominator x))
                  powerstr :: String -> Integer -> String
                  powerstr _ 0 = ""
                  powerstr s 1 = s
                  powerstr s x = s ++ "^" ++ (show x)
                  product_complete :: String -> String
                  product_complete "" = "1"
                  product_complete s = s

俺「うむ、よさそうだ、では出力。ポチっとな。」

The space of 0 dimension sphere is 1
The space of 1 dimension sphere is 2r
The space of 2 dimension sphere is PIr^2
The space of 3 dimension sphere is 4/3PIr^3
The space of 4 dimension sphere is 1/2PI^2r^4
The space of 5 dimension sphere is 8/15PI^2r^5
The space of 6 dimension sphere is 1/6PI^3r^6
The space of 7 dimension sphere is 16/105PI^3r^7
The space of 8 dimension sphere is 1/24PI^4r^8
The space of 9 dimension sphere is 32/945PI^4r^9
The space of 10 dimension sphere is 1/120PI^5r^10

俺「ふむふむ………」
俺「………!?!?」
俺「なんか、偶数次のときの係数が階乗の逆数になってる!!!!!!!!!!」
俺「ん。。。階乗、、、ガンマ関数?」
俺「そういえば、ガンマ関数は\sqrt{\pi}が関係してたなー。。。ってまさか!」
俺「そうか、奇数次のときは\Gamma(\frac{n}{2}+1)の答えに\sqrt{\pi}が入るのか!逆に、奇数次のときのPIの係数に\frac{1}{2}をたすと辻褄があう!つまり」

半径rのn次元球の体積は
\frac{\pi^{\frac{n}{2}}r^n}{\Gamma(\frac{n}{2}+1)}

その夜はねむれなかった。

結論

数学で遊ぶのってほんとおもしろい。

離散と連続がからみあったりするし。なんでガンマ関数が多次元球の体積になるのか。まだわからない。

おもしろすぎる。

数学ガールみたいに、複数人で物語がひろがったわけじゃないけど、僕はこうやって、ふたつの事実が繋がる瞬間にであって、すごく感動した。

あ、あと、ここから先が楽しみなのでネタバレしないでね。