数表を作り続ける人類

 数値計算をテーマに連載は続いてきました。連載「知って得する、いかに早く計算するか」では、多項式の数値計算に必要なかけ算の回数を減らすホーナー法を取り上げました。

 連載「電卓遊びが導いた数値計算の世界」では、私が小学生の時に遭遇した電卓の謎(√とsin)が、高校生の時にマクローリン級数を知って解決していった思い出を語りました。

 連載「知っておきたい平方根の計算方法」では、平方根の3つの数値計算法を紹介しました。そして、連載「対数表は紙計算機」では、対数表の数値計算の進化の風景を紹介しました。

 ネイピアの20年に及ぶ計算、ネイピアの後を継いだブリッグスの平方根の計算を24回繰り返し行う方法、オイラーによるマクローリン級数を工夫した計算。

 4000年前の古代エジプトに始まる三角法の歴史は、三角関数表作成とともに発展してきました。古代ギリシャのプトレマイオス(83-168)、15世紀ドイツの天文学者レギオモンタヌス(1436-1476)、16世紀オーストリアの天文学者ゲオルク・レティクス(1514-1574)らが脈々と三角関数表を作り上げてきました。

 我が国での最初の三角関数表は江戸時代の数学者建部賢弘(1664-1739)によって作成されました。

 そして、天文学と航海術における三角関数表は、時代を追うごとにその精度が高くなっていきました。三角関数の計算克服のために誕生したのがネイピアによる対数表だったことは連載「ジョン・ネイピア物語〜対数は天文学者の寿命を2倍にした」で紹介した通りです。

 人は死して数表を遺してきたということです。遺された数表のおかげで後世の人々は、計算のための時間を節約することができたわけです。

ネイピアの対数表から200年後、天才出現

 ところが、数表の精度が高くなることは新たな問題も引き起こすことになります。ミスがない数表を作ることの困難さです。理由は単純で、すべての計算は人間の手によるものだったからです。

 計算道具といっても、18世紀のヨーロッパではネイピアの計算棒(九九表を印字した棒)や算盤だけでした。

 「computer」とは元々計算する者という意味ですが、「コンピューター」が計算したものを印刷工が活字を組んで印刷することで数表は作成されます。そのすべてのプロセスでミスが生まれてしまいます。

 1812年、1人の男が間違いだらけの対数表を眺めながら奇想天外なアイデアを思いつきます。「そうだ、数表作成をすべて機械にやらせよう」、そう呟いた者こそ数学者チャールズ・バベッジ(1791-1871)です。

 ネイピアが20年を費やして対数表を完成させたのが1614年。それからというもの対数のおかげで数学のみならず諸科学は大きく発展しました。中でも最大のイノベーションは微分積分法です。

 連載「人類最高傑作、微分積分はこうして生まれた」でも紹介したように、英国のニュートン(1642-1727)とドイツのライプニッツ(1646-1716)が同時期に発見します。

 裕福な資産家の家に生まれたバベッジは、1810年にケンブリッジ大学トリニティ・カレッジに入学します。

 学生時代はケンブリッジ大学に浸透するニュートン流微分積分法に反発し、合理的なライプニッツ流を推進し始めるために仲間と解析協会(Analytical Society)を設立するほどでした。のちに、バベッジは37歳でニュートンが座っていたルーカス教授職に就くことになります。

 1812年、20歳を過ぎたばかりの青年バベッジの頭脳に浮かんだアイデアが数表自動作成マシンでした。

階差の手法(Method of differences)

 三角関数や対数の数値計算に有効なのがマクローリン級数です。

 マクローリン級数は多項式なのでxのn乗──かけ算──の計算が必要になります。連載「知って得する、いかに早く計算するか」で紹介したホーナー法は多項式の数値計算法ですが、かけ算の回数を減らす工夫であってかけ算をなくすまではいきません。

 連載「対数表は紙計算機」で紹介したように、対数のアイデアはまさにかけ算をたし算で行う画期的な計算方法です。

 バベッジが「歯車」を用いた機械を考えたのは、対数ではないかけ算をたし算で行う方法を知っていたからです。それが階差の方法(Method of differences)と呼ばれる数値計算法です。

 以下にその計算方法を見ていきます。最初の例はバベッジ自身も用いた多項式f(x)=x^2+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の3つの数値f(0)、D1(0)、D2(0)の空欄に上から41、2、2と入ります。これが初期値(x=0の数値)になるのですが、次のように計算されます。

2次多項式 f(x)=a+bx+cx^2の場合の初期値(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+x^2(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)=x^2+x+41を微分するとf'(x)=2x+1となり、さらに微分するとf''(x)=2となります。2次関数の2階微分f''(x)が定数になるということです。

 残りの空間を埋めていってみてください。f(x)にはxの2乗がありますが、たし算だけでf(1)、f(2)、f(3)、…と順に求まっていくことが分かります。

 ところでこの2次多項式x^2+x+41は、オイラーが素数生成式として発見したものでx=0から39まですべて素数になる興味深い式です。バベッジはそのことを知っていたのでしょう。

 次いでに次数を上げた例をもう一つ紹介しておきましょう。

4次多項式f(x)=x^4+2x^3-4x^2+7x+6(a=6、b=7、c=-4、d=2、e=1)

 まず、初期値 f(x)=a+bx+cx^2+dx^3+ex^4の計算

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と途中のすべての計算が必要であることが特徴です。これは不便にも思えますが、バベッジの目標はあくまでも数表作成なのでこれでいいのです。

 ここに数表自動作成マシンの驚くべき能力があります。印刷機能です。数表は紙に印刷されて完成です。バベッジのマシンとは、自動で計算を行い、その結果を自動で印刷して数表がプリントアウトされるという代物だったのです。

 階差機関の開発のために、英国政府による資金約1万7000ポンドと同額の自己資金をつぎ込みましたが、バベッジ自身は階差機関を完成させることができず、1833年に製作は中止されました。

 その原因の1つにバベッジは階差機関の開発の最中にさらに高度なマシンを考案したことにあります。

 バベッジが解析機関(Analytical Engine)と呼んだマシンは、数値記憶と演算部分を分けた構造で、プログラムとデータの入力用にパンチカードを備え、印刷原版作成機と曲線プロッターを出力装置としたもので、動力源として蒸気機関を用いるというモンスターマシンです。

 バベッジは製作に取りかかるるも、こちらも実際には完成させることはできませんでした。

 アラン・チューリング(1912-1954)の100年前にプログラム可能、プリンター内蔵の計算機を考案した数学者が「コンピューターの父」と呼ばれるチャールズ・バベッジです。

 今でこそコンピューターの心臓部分である演算装置CPUは、車のそれになぞらえてエンジンと呼ばれます。今から200年以上も昔、蒸気機関の時代に自動演算装置を夢見て、それをエンジンと呼んだのもチャールズ・バベッジです。

人は死して数表を遺す

 三角関数や対数の数表は、バベッジにディファレンス・エンジンを考え出させるほど大きな存在だったということです。数値計算の根底にあるのは、人生という大きな制限です。いかに計算に費やす時間を節約するか、ネイピアもバベッジも考えていました。

 バベッジは、統計学会創立にも尽力しています。現在、私たちが使っている平均寿命(0歳の平均余命)が分かる数表「生命表」もバベッジが考案者です。

筆者:桜井 進