目次
数表を作り続ける人類
今回は、「エイダ・ラブレス」の記事にも登場した数学者チャールズ・バベッジを取り上げます。
古代ギリシャから作られ始めた三角関数表は、時代を追うごとに精度が大きくなっていきました。そのために誕生したのがネイピアによる対数表だったことは「ジョン・ネイピア対数誕生物語」で紹介しました。
人は死して数表を遺す。
魂を削って作られた数表のおかげで、多くの人々の計算時間を節約することができました。
ネイピアの対数表から200年後、天才出現
ところが、数表の精度が大きくなると新たな問題も引き起こすことになります。ミスがない数表を作ることの困難さです。すべての計算は人間の手によるものだったからです。
計算道具といっても、18世紀のヨーロッパではネイピアの計算棒(九九表を印字した棒)や算盤だけでした。
“computer”とは元々「計算する者(人)」という意味ですが、“コンピューター”が計算したものを印刷工が活字を組んで印刷することで数表は作成されます。そのすべてのプロセスでミスが生まれてしまうのです。
1812年、間違いだらけの対数表を眺めながら「そうだ、数表作成をすべて機械にやらせよう」と奇想天外なアイディアを思いついた人がいます。
その人こそ、数学者チャールズ・バベッジ(1791-1871)だったのです。
裕福な資産家の家に生まれたバベッジは、1810年にケンブリッジ大学トリニティ・カレッジに入学します。
学生時代はケンブリッジ大学に浸透するニュートン流微分積分法に反発し、合理的なライプニッツ流を推し進めるために仲間と解析協会(Analytical Society)を設立するほどでした。後に、バベッジはニュートンが座っていたルーカス教授職を務めています。
1812年、20歳を過ぎたばかりの青年バベッジの頭脳に浮かんだアイデアが「数表自動作成マシン」です。
階差の手法(Method of differences)
三角関数や対数の数値計算に有効なのがマクローリン級数です。マクローリン級数は多項式なのでxのn乗──かけ算──の計算が必要になります。
対数のアイデアは、まさにかけ算をたし算で行う画期的な計算方法でした。
バベッジが「歯車」を用いた機械を考えたのは、対数に代わるかけ算をたし算で行う方法を知っていたからです。階差の手法(Method of differences)と呼ばれる数値計算法です。
以下に具体的なその計算方法を見ていきます。
最初の例は、バベッジ自身も用いた多項式f(x)=x2+x+41です。ステップは表にすることで分かりやすくなります。
先に結論を見てみます。
第1階差D1(x)と第2階差D2(x)がポイントです。
この数表を、単純なたし算、ひき算だけで眺めていると、それぞれどのようなルールで計算されているのかが分かってきます。
D1(x)とD2(x)は次のように定義されます。
第1階差 D1(x)=f(x+1)-f(x)
第2階差 D2(x)= D1(x+1)-D1(x)
それでは空欄の表から順に空欄を埋めていきます。xが0の欄に上から41、2、2と入ります。
これが初期値(x=0の数値)になるのですが、次のように計算されます。
2次多項式 f(x)=a+bx+cx2の場合の初期値(x=0の数値)
f(0)=a
D1(0)=f(1)-f(0)
=(a+b+c)-a
=b+c
D2(0)=D1(1)-D1(0)
=f(2)-f(1)-(b+c)
=a+2b+4c-(a+b+c)-(b+c)
=2c
この公式から、f(x)=41+x+x2(a=41、b=1、c=1)の初期値(x=0の数値)は
f(0)=a=41
D1(0)=b+c=1+1=2
D2(0)=2c=2
と求まります。
すると、次にこの初期値からたし算だけでx=1の3つの数値が次のように求まります。
第2階差 D2(x)= D1(x+1)-D1(x)
より、
D1(x+1)=D2(x)+D1(x)
だから、x=0として
D1(1)=D2(0)+D1(0)=2+2=4
となります。
次に
第1階差 D1(x)=f(x+1)-f(x)
より、
f(x+1)=f(x) +D1(x)
だから、x=0として
f(1)=f(0) +D1(0)=41+2=43
となります。
このようにx=0の3つの数値からx=1の3つの数値がたし算だけで計算されます。
同様にx=2の3つの数値がたし算だけで計算されます。
ここで気づく重要なことがあります。
第2階差はすべて定数2であるということです。このことから、第1階差とf(x)が順に求まっていきます。
第2階差はすべて定数2であることは、微分の計算から理解されます。f(x)=x2+x+41を微分するとf'(x)=2x+1となり、さらに微分するとf''(x)=2となります。2次関数の2階微分f''(x)が定数になるということです。
残りの空間を埋めていってみてください。f(x)にはxの2乗がありますが、たし算だけでf(1)、f(2)、f(3)、…と順に求まっていくことが分かります。
ところでこの2次多項式x2+x+41は、オイラーが素数生成式として発見したもので、x=0から39まですべて素数になる興味深い式です。バベッジはそのことを知っていたのでしょう。
次いでに次数を上げた例をもう一つ紹介しておきましょう。
4次多項式f(x)=x4+2x3-4x2+7x+6(a=6、b=7、c=-4、d=2、e=1)
まず、初期値 f(x)=a+bx+cx2+dx3+ex4の計算
f(0)=a=6
第1階差D1(0)=b+c+d+e=7-4+2+1=6
第2階差D2(0)=2c+6d+14e=-8+12+14=18
第3階差D3(0)=6d+36e=12+36=48
第4階差D4(0)=24(4階微分)
あとは最初の2次関数の計算を真似てx=1、2、3、…と準備計算していきます。次のように空欄が埋まっていきます。
階差機関(difference engine)
階差(difference)の手法を実現させるマシンとしてバベッジが設計したのが階差機関(difference engine)です。
1822年、31歳のバベッジは論文"Note on the application of machinery to the computation of astronomical and mathematical tables"(天文暦と数表の計算への機械の適用に関する覚書)の中で言及したmachineryこそ、階差機関です。
階差(difference)の手法を実際に実行してみると分かりますが、f(10)の数値を求めるには、x=1、2、3、…、9、10と途中のすべての計算が必要であることが特徴です。
これは不便にも思えますが、バベッジの目標はあくまでも数表作成なのでこれでいいのです。
ここに数表自動作成マシンの驚くべき能力があります。印刷機能です。数表は紙に印刷されて完成です。
バベッジのマシンとは、自動で計算を行い、その結果を自動で印刷して数表がプリントアウトされるという代物だったのです。
階差機関の開発のために、英国政府による資金約17,000ポンドと同額の自己資金をつぎ込みましたが、バベッジ自身は階差機関を完成させることができず、1833年に製作は中止されました。
その原因の一つは、バベッジが階差機関の開発の最中にさらに高度なマシンを考案したことにあります。
解析機関(analytical engine)
バベッジが解析機関(analytical engine)と呼んだマシンは、数値記憶と演算部分を分けた構造でした。
プログラムとデータの入力用にパンチカードを備え、印刷原版作成機と曲線プロッターを出力装置としたもので、動力源として蒸気機関を用いるというモンスターマシンです。
バベッジは製作に取りかかるも、こちらも実際には完成させることができませんでした。
アラン・チューリング(1912-1954)より100年前、プログラム可能、プリンター内蔵の計算機を考案した数学者が「コンピューターの父」と呼ばれるチャールズ・バベッジです。
現代でもコンピューターの心臓部分である演算装置CPUは、車のそれになぞらえてエンジンと呼ばれます。
今から200年以上も昔、蒸気機関の時代に自動演算装置を夢見て、それをエンジンと呼んだのもチャールズ・バベッジです。
人は死して数表を遺す
三角関数や対数の数表は、バベッジにディファレンス・エンジン(階差機関)を考え出させるほど大きな存在だったということです。
数値計算の根底にあるのは、人生という大きな制限です。いかに計算に費やす時間を節約するか、ネイピアもバベッジも考えていました。
バベッジは、統計学会創立にも尽力しています。
現在、私たちが使っている平均寿命(0歳の平均余命)がわかる数表「生命表」もバベッジが考案者です。