
差分エンジンは、多項式関数を表にまとめるために設計された自動機械式計算機です。1820年代に設計され、チャールズ・バベッジによって開発されました。差分エンジンという名称は、少数の多項式係数を用いて関数を補間または表にまとめる方法である有限差分法に由来しています。工学、科学、航海でよく使われる数学関数の多くは、対数関数や三角関数から成り立っており、これらは多項式で近似できるため、差分エンジンは多くの有用な表を計算することができます。

数学関数を計算するための機械式計算機の概念は、紀元前2世紀のアンティキティラ島の機械にまで遡ることができ、近世初期の例としては、 17世紀のパスカルとライプニッツが挙げられる。
1784年、ヘッセン軍の技師JHミュラーは加算機を考案・製作し、1786年に出版された著書の中で差分機の基本原理を説明した(差分機に関する最初の文献は1784年に遡る)が、そのアイデアを進めるための資金を得ることができなかった。[ 1 ] [ 2 ] [ 3 ]
チャールズ・バベッジは1819年頃に小型の差分機関の製作を開始し[ 4 ]、1822年までに完成させた(差分機関0)[ 5 ] 。彼は1822年6月14日、王立天文学会に「天文表および数学表の計算への機械の応用に関する覚書」と題する論文で自身の発明を発表した[ 6 ] 。この機械は十進数システムを使用し、ハンドルを回すことで動力を得た。表の作成は時間と費用がかかるため、英国政府は差分機関によって作業がより経済的になることを期待し、関心を示した[ 7 ] 。
1823年、英国政府はバベッジにプロジェクト開始のために1700ポンドを与えた。バベッジの設計は実現可能であったが、当時の金属加工技術では必要な精度と数量の部品を経済的に製造することはできなかった。そのため、実施は政府の当初の見積もりよりもはるかに費用がかかり、成功も疑わしいことが判明した。1830年の差分機関第1号の設計によれば、約25,000個の部品があり、重量は4トン[ 8 ]で、6次差分で20桁の数を処理する予定だった。1832年、バベッジとジョセフ・クレメントは、 2次差分で6桁の数を処理する小型の動作モデル(計画の7分の1)を製作した[ 5 ] 。 [ 9 ] [ 10 ]レディ・バイロンは1833年に試作機を見た時のことをこう述べている。「先週の月曜日に、私たちは二人で(そう思える)思考機械を見に行きました。それはいくつかの数を2乗と3乗し、二次方程式の根を抽出しました。」[ 11 ]レディ・バイロンの娘エイダ・ラブレスは後にこれに魅了され、差分機関を利用してベルヌーイ方程式を解くことを目的とした最初のコンピュータプログラムの作成に取り組むことになる。より大型の機関の開発は1833年に中断された。
政府が1842年にこのプロジェクトを放棄するまでに、[ 10 ] [ 12 ]バベッジは開発に17,000ポンド以上を受け取り、費やしたが、それでも実用的なエンジンを完成させるには至らなかった。政府は機械の出力(経済的に生産された表)だけを評価し、機械自体の開発(予測不可能なコスト)は評価しなかった。バベッジはその窮状を認めようとしなかった。[ 7 ]一方、バベッジの関心は解析エンジンの開発に移り、差分エンジンの最終的な成功に対する政府の自信をさらに損なうことになった。バベッジは解析エンジンとしての概念を改良することで、差分エンジンの概念を時代遅れにし、それを実装するプロジェクトを政府の見解では完全な失敗にした。[ 7 ]
未完成の差分機関1号は、1862年にロンドンのサウスケンジントンで開催された国際博覧会で一般公開された。[ 13 ] [ 14 ]
バベッジはその後、より汎用的な解析エンジンを設計したが、後に1846年から1849年の間に改良版の「差分エンジン2号」(31桁の数と7次差分)を設計した[ 9 ]。バベッジは解析エンジン用に開発されたアイデアを利用して、新しい差分エンジンの計算速度を向上させ、使用する部品数を減らすことができた[ 15 ] [ 16 ] 。

1834年のバベッジの差分機関に触発されたスウェーデンの発明家、ペル・ゲオルク・シューツは、いくつかの実験モデルを製作した。1837年、息子のエドヴァルドは金属製の実動モデルを製作することを提案し、1840年には5桁の数列と1次差分を計算できる計算部を完成させた。これは後に3次差分まで拡張された(1842年)。1843年、印刷部が追加され、モデルは完成した。
1851 年、政府の資金援助により、より大型で改良された (15 桁の数字と 4 次差分) 計算機の製作が開始され、1853 年に完成しました。この計算機は1855 年のパリ万国博覧会で実演され、その後 1856 年にニューヨーク州オールバニーのダドリー天文台に売却されました。1857 年に納入されたこの計算機は、販売された最初の印刷計算機でした。[ 17 ] [ 18 ] [ 19 ] 1857 年に、英国政府は次のシューツ差分計算機を発注し、これは 1859 年に製造されました。[ 20 ] [ 21 ]これは以前のものと同じ基本的な構造で、重量は約10 cwt (1,100ポンド、510 kg )でした。[ 19 ]
マルティン・ウィバーグはシューツの構造を改良した(1859年頃、彼の機械はシューツのものと同じ容量、30桁、6次)が、彼の装置は印刷された表(1860年の利子表、 1875年の対数表)の作成と出版にのみ使用された。[ 22 ]
1862年頃、ロンドンのアルフレッド・ディーコンは小型の差分機関(20桁の数値と3次差分)を製作した。[ 17 ] [ 23 ]
アメリカ人のジョージ・B・グラントは、バベッジとシューツ(シェンツ)の研究を知らずに、1869年に計算機の開発に着手した。1年後(1870年)、彼は差分機関について知り、自ら設計を進め、1871年にその構造を記述した。1874年、ボストン・サーズデー・クラブは大型模型の製作のための寄付を集め、1876年に製作された。精度を高めるために拡張可能で、重量は約2,000ポンド(910kg )であった。[ 23 ] [ 24 ] [ 25 ]
クリステル・ハマーンは、1909年に「バウシンガーとペータースの表」(「小数点以下8桁の対数三角関数表」)のために1台の機械(16桁の数字と2次差分)を製作し、1910年にライプツィヒで初めて出版されました。その重さは約40キログラム(88ポンド)でした。[ 23 ] [ 26 ] [ 27 ]
バローズ社は1912年頃、航海暦局向けに2次差分機関として使用される機械を製造した。[ 28 ] : 451 [ 29 ]これは後に1929年にバローズクラス11(13桁の数値と2次差分、または11桁の数値と(少なくとも) 5次差分)に置き換えられた。[ 30 ]
アレクサンダー・ジョン・トンプソンは、 1927年頃、自身の対数表「Logarithmetica britannica」のために、積分および差分演算機(13桁の数値と5次差分)を製作した。この機械は、4台の改造されたTriumphator計算機で構成されていた。[ 31 ] [ 32 ] [ 33 ]
レスリー・コムリーは1928年に、ブルンスヴィガ・デュプラ計算機を2次(15桁の数字)の差分機関として使用する方法を説明した。 [ 28 ]また、1931年には、ナショナル・アカウンティング・マシン・クラス3000を6次差分機関として使用できることも指摘した。[ 23 ] : 137–138
1980年代、オーストラリアのシドニー大学の准教授であるアラン・G・ブロムリーは、ロンドンの科学博物館の図書館で、バベッジの差分機関と解析機関の原図を研究した。 [ 34 ]この研究により、科学博物館は、当時のコンピューティング・キュレーターであったドロン・スウェードの 指揮の下、1985年から1991年にかけて、差分機関第2号の動作可能な計算部を構築した。これは、1991年のバベッジ生誕200周年を記念するためであった。2002年には、バベッジが当初差分機関用に設計したプリンタも完成した。[ 35 ]オリジナルの設計図をエンジニアリング製造業者が使用できる図面に変換したところ、バベッジの設計にいくつかの小さな誤りがあることが判明した(おそらく、設計図が盗まれた場合に備えて導入されたものと思われる) [ 36 ] 。差分機関とプリンタは19世紀の技術で達成可能な公差で製造されており、バベッジの設計がジョージ王朝時代の工学的手法で機能したかどうかという長年の議論に決着がついた。この機械は8,000個の部品で構成され、重量は約5トンである。[ 37 ]
プリンターの主な目的は、印刷機で使用するステレオタイプ版を作成することであり、これは柔らかい石膏に活字を押し付けてフロンを作成することによって行われます。バベッジは、以前の表の多くのエラーが人間の計算ミスではなく、手動の植字工程でのミスによるものであることを認識していたため、エンジンの結果を大量印刷に直接伝えることを意図していました。[ 7 ]プリンターの紙出力は、主にエンジンの性能をチェックする手段です。
ネイサン・ミルボルドは、サイエンス・ミュージアムの差分エンジンの出力機構の建設資金を提供するだけでなく、2 つ目の完全な差分エンジン No. 2 の建設も依頼しました。これは、2008 年 5 月から 2016 年 1 月まで、カリフォルニア州マウンテンビューのコンピュータ歴史博物館に展示されていました。 [ 37 ] [ 38 ] [ 39 ] [ 40 ]その後、シアトルのIntellectual Venturesに移管され、メイン ロビーのすぐ外に展示されています。[ 41 ] [ 42 ] [ 43 ]
差分エンジンは、 1からNまでの番号が付けられた複数の列で構成されています。このマシンは、各列に1つの小数値を格納できます。このマシンは、列n + 1の値を列nに加算して、新しいnの値を生成することしかできません。列Nには定数のみを格納でき、列1には現在の反復における計算結果が表示されます(場合によっては印刷されます) 。
エンジンは、列に初期値を設定することによってプログラムされます。列 1 は、計算開始時の多項式の値に設定されます。列 2 は、同じXの値での多項式の1 階および高階導関数から導出された値に設定されます。列 3 からNまでの各列は、多項式の1階および高階導関数。 [ 44 ]
バベッジの設計では、主軸が1回転するごとに1回の反復(つまり、加算と繰り上がり演算の完全なセット)が行われます。奇数列と偶数列は、1サイクルで交互に加算を実行します。列の演算シーケンスは次のとおりです。したがって、次のようになります。[ 44 ]
ステップ1、2、3、4は奇数列ごとに実行され、ステップ3、4、1、2は偶数列ごとに実行されます。
バベッジの当初の設計ではクランクを主軸に直接取り付けていたが、後に、機械を回すのに必要な力が人間が快適に扱えるほど大きくないことが分かった。そのため、実際に製作された2つのモデルでは、クランクに4:1の減速ギアが組み込まれており、1サイクルを完了するにはクランクを4回転させなければならない。
各反復処理によって新しい結果が得られ、それは下の図の右端に示されているハンドルの4回転に対応する4つのステップで実行されます。その4つのステップは次のとおりです。
このエンジンは負の数を10の補数で表現します。減算は負の数の加算に相当します。これは、現代のコンピュータが減算を行う方法( 2の補数と呼ばれる)と同じです。
差分エンジンの原理は、ニュートンの分割差分法です。多項式の初期値(およびその有限差分)が何らかの方法でXの値に対して計算されると、差分エンジンは一般に有限差分法として知られる方法を使用して、任意の数の近傍値を計算できます。たとえば、2次多項式を考えてみましょう。
p (0)、p (1)、p (2)、p (3)、p (4)などの値を表にまとめることを目的とする。以下の表は次のように構成されている。2列目には多項式の値が、3列目には2列目の左隣の2つの値の差が、4列目には3列目の隣の2つの値の差が含まれる。
3番目の値列の数値は一定です。実際、 n次多項式から始めても、 n + 1列目は 常に一定になります。これがこの手法の成功の鍵となる重要な事実です。
この表は左から右に作成されていますが、より多くの値を計算するために、右から左へ対角線に沿って作成を続けることができます。p (5) を計算するには、最も低い対角線の値を使用します。4 列目の定数値 4 から始めて、それを列の下にコピーします。次に、3 列目を続け、11 に 4 を加えて 15 を取得します。次に、2 列目を続け、前の値 22 を取得し、3 列目の 15 を加えます。したがって、p (5) は 22 + 15 = 37 です。 p (6)を計算するには、 p (5) の値に対して同じアルゴリズムを繰り返します。4 列目から 4 を取得し、それを 3 列目の値 15 に加えて 19 を取得し、次にそれを 2 列目の値 37 に加えて 56 を取得します。これがp (6) です。このプロセスは無限に続けることができます。多項式の値は、乗算を行うことなく生成されます。差分エンジンは加算のみが可能であればよいのです。ループごとに、2つの数値を格納する必要があります。この例では、(1列目と2列目の最後の要素)です。n次多項式を表にまとめるには、n個の数値を格納できる十分な記憶容量が必要です。
バベッジの差分機関2号機は、1991年にようやく完成し、それぞれ31桁の10進数を8つ格納でき、7次多項式をその精度で表すことができる。シューツの最高の機械は、それぞれ15桁の4つの数を格納できた。[ 45 ]
列の初期値は、まず関数の連続するN個の値を手動で計算し、その後バックトラッキング(つまり、必要な差分を計算する)を行うことで算出できます。
コル計算開始時の関数の値を取得しますコルの違いは そして... [ 46 ]
計算する関数が多項式関数である場合、次のように表されます。
初期値は、データ点を計算することなく、定数係数 a₀、a₁、a₂、...、aₙ から直接計算できます。したがって、初期値は次のとおりです。
一般的に使用される関数の多くは解析関数であり、例えばテイラー級数などのべき級数で表現できます。初期値は任意の精度で計算できます。正しく計算すれば、エンジンは最初のNステップで正確な結果を返します。その後は、エンジンは関数の近似値のみを返します。
テイラー級数は、関数をある点における導関数の和として表します。多くの関数では、高階導関数を求めるのは簡単です。例えば、正弦関数は0で0または1/2の値をとります。すべての導関数について。計算の開始点を0とすると、簡略化されたマクローリン級数が得られます。
係数から初期値を計算する方法は、多項式関数の場合と同じ方法を使用できます。多項式の定数係数は、次の値になります。
上記の方法の問題点は、誤差が蓄積し、系列が真の関数から乖離する傾向があることです。一定の最大誤差を保証する解決策は、曲線フィッティングを使用することです。N個以上の値を、目的の計算範囲に沿って等間隔に計算します。ガウス縮小などの曲線フィッティング技術を使用して、関数の N −1 次多項式補間を見つけます。[ 46 ]最適化された多項式を使用すると、上記のように初期値を計算できます。
{{cite book}}ISBN /日付の不一致(ヘルプ)代替URLWikiSourceに収録、また
『チャールズ・バベッジ著作集』
第2巻119ページ以降にも再録。