人気ブログランキング | 話題のタグを見る

級数

長さ1mの棒に50cmの棒を継ぎ足す。次は、それに25cmの棒を継ぎ足す。その次は .. というように次々に半分にした棒を継ぎ足していったらその長さはどうなるだろうかという問題。

まず、次々に半分になっていく棒を作る。

Prelude> take 5 $ iterate (*0.5) 1
[1.0,0.5,0.25,0.125,6.25e-2]

それを継ぎ合わせる。

Prelude> sum $ take 5 $ iterate (*0.5) 1
1.9375

本数を増やす。

Prelude> sum $ take 10 $ iterate (*0.5) 1
1.998046875

もっと増やす。

Prelude> sum $ take 1000 $ iterate (*0.5) 1
2.0

実際、S = 1 + r + r^2 + r^3 + ... とすると、rS = r + r^2 + r^3 + r^4 + ... となるので、

S - rS = (1 - r)S = 1

つまり、S = 1 / (1 - r) だから、アタリマエのことだが、無限に足しても無限に大きくはならないというのは不思議な感じがする。

アキレスと亀の場合もそうだ、どんなにわずかな時間でもアキレスが亀に追いつくまでには亀はさらに先に行っている。したがってアキレスは永遠に亀に追いつくことはできないというのはもっともな推論のように見えるが、それは単にアキレスと亀の位置の観測点を無限に刻んでいっただけで、その総和が無限になるわけではない。無限に足しても有限の値にしかならないということを知っていると、アキレスが「永遠に」亀においつけないという議論が間違いであることが分かる。「永遠に」観測したわけではないからだ。

身の回りの素朴な疑問や錯覚を Haskell で気楽に調べてみる事ができるのは楽しい。
by tnomura9 | 2011-10-28 06:50 | Haskell | Comments(0)
<< 金種計算 Haskell 圏 IOモナド... >>