2013年3月3日日曜日

気づかないこととの差

Clip to Evernote
こちらの記事を読みました。

R-style » 1に満たないものを繰り返し足していく

大変素晴らしい記事です。私は5回ほど読みました。
(5回読んでもページビュー数は1しか加算されません。一方でとても重い1です。これもまた0.1に属するものなのでしょう。)

記事タイトルにある通り、とても小さい数(もの)を繰り返し足し算していくことについてのお話です。詳しい内容については、ぜひリンク先をご参照いただければと思います。

さて、数値解析と呼ばれる分野に関する知識を少しでもお持ちの方は、先の記事から同じものをかなり高い確率で連想することでしょう。
数値積分の計算のことです。

本エントリの話題に関係するところに順に触れていきます。
まずは積分の知識です。

ある関数 f(x) があったとき、x の区間 [a, b] での積分は

と表されます。なお、ここでの f(x) は具合の良い性質のものだとしておきます。

この式はすなわち、横が dx で縦が f(x) の長方形の面積を何度も足し算してください、とのことを訴えています。


数学的には、この理解でまったく間違いありません。

他方の数値解析という分野は、実際に数字を入れて計算するときの様子についてまで議論するものです。
計算そのものはコンピュータが行うことが想定されているでしょう。そこで、コンピュータにいかに計算させるのが良いかに興味があるのが数値解析なのです。

積分値を実際にコンピュータに計算させたいと思ったら、素朴なアイディアは積分の定義をそのまま持ってくることになります。
要は、横が dx で縦が f(x) の長方形の面積を何度も足し合わせるのです。ここで縦 f(x) は明確ですが横 dx はそうではないため、実際には適当な小さい値を決定して計算に用いることにします。逆に言えば、それだけ決定してしまえばすぐに計算を始めることができます。

ところが、計算を始めてみるとこの方法では問題が出てきてしまいます。積分の定義をそのまま流用してでは、数値積分をコンピュータに実施させることはできないのです。

その様子を見てみます。

話を単純にするために、いま用いるコンピュータが10進数で有効数字3桁だったとしましょう。これは、そのコンピュータには数字が3桁までしか見えないことを意味します。
10進数で有効数字3桁のコンピュータは聞いたことがありませんが、しかしいかなるコンピュータにもこの有効数字なるものは存在します。
やや説明が不足しています。おそらく続きを見ていただく方がわかりやすいと思いますので、いったん先に進みます。

次に、一回で足し算される細長い長方形の面積が0.1だったとします。f(x) の挙動によって本来は毎回異なる値を取りますが、とりあえずだいたい0.1くらいだとしてしまいます。

まとめると、数字が3桁までしか見えない世界で、0.1を何度も足し算しようとするわけです。

初めの足し算は

0.1 + 0.1

です。ここは数字が3桁まで見える世界で、いまは1桁しかありません。結果は問題なく0.2になります。
幾度か繰り返していくと、

0.9 + 0.1

という場面に出くわします。この計算も問題ありません。1.0になります。
さらに進むと

9.9 + 0.1

に出会うでしょう。これもやはり、10.0になります。
そのすぐ後に、

10.0 + 0.1

があり、結果は10.1になります。
ここは数字が3桁しか見えない世界でした。10.1は数字が3桁あります。これは問題ありません。
その先の

99.9 + 0.1

はどうなるでしょう。これは100.0になります。この世界では100.0は1桁の数字になりますので、ここまでは大丈夫なのです。
次は

100.0 + 0.1

です。この世界では3桁までの数字しか見えないため、この結果は100.0になります。100.1だと4桁になってしまうのです。
すると、次の計算は

100.0 + 0.1

です。やはりこの結果は100.0です。

目的に立ち返って確認してみましょう。
コンピュータに素朴な方法で数値積分をさせようとすると、あるところから計算が先に進まなくなってしまうのです。

これは、その方法で計算させようとしたのがまったく誤りだったことを意味します。
人類は大きな方向転換を余儀なくされます。コンピュータがあれば何でもできると思ったのは、幻想だったのです。

と思いきや、人類には賢い人がいました。ここでは例えば、ラグランジュさんやシンプソンさんです。

ラグランジュ補間を元にしたシンプソンの公式を用いることで(もちろん他にもたくさんあります)、先述した問題を回避して数値積分を求めることができます。
ここではそれらに立ち入りません。小さい数を何度も足し算する類の方法ではない、とのことだけ触れておきます。

とはいえ、初めの素朴なアイディアでいったん取り組んでみるのも良いと私は思います。直感に反しませんし、素直に正しそうだと思えるからです。

やってみたら、何かがおかしいと気づくわけです。

しかし、気づくということは不確実で難しいもので、気づかないこととの差はほとんどありません。
そうであるなら、自分が正しいと感じたことを信じてひたすらやってみることも、きっと悪くないと思います。

冒頭でご紹介した記事「1に満たないものを繰り返し足していく」から引用いたします。
何かを感じられるようになることは大切だが、その前に「信じる」というトンネルをくぐり抜けなければならないのだろう。
きっといつか、何かを感じられるようになるはずなのです。


終わりに


ちなみに、ラグランジュ補間やシンプソンの公式が考え出されたのは(おそらく)コンピュータが存在しないときのことです。
本エントリからはあたかもそうでないかのように読み取れてしまいます。言葉の綾というやつです。