以下の文書は次の翻訳です。
Ptolemy's table of chords - Wikipedia (プトレマイオスの弦の表)
弦の表とは基本的には三角関数の正弦の表のことです。プトレマイオスが 2 世紀に著した アルマゲストに 掲載されている表で、驚くべきことに誤差まで評価しています。従って、非常に正確です。
プトレマイオスの弦の表は 0.5° ごとの表で、これ以外の角度に関しては線形補間によって処理するように書かれています。 もしも、これを正弦の表とみなせば線形補間をする場合でも 10 進表記で小数点以下が 5 桁まで有効であることがわかります (訳注 1)。
以上の評価は計算機によるものですが、プトレマイオスの弦の数表は全体としては、任意の角度の弦が 60 進数で小数点以下 3 桁まで 求められるように作られていたのに相違ないと思い至り、これが証明できることもわかりました (訳注 2、但し最後の桁に±1の曖昧さがある。詳細は本文を参照)。 注意する必要があるのは、もしもプトレマイオスが弦の表を 1° ごとに与えていれば、 この精度は不可能で 0.5° ごとの表で始めて可能となることです。
従ってプトレマイオスは表自身の誤差の評価もしていますが (これだけでも唖然としますが)、 更に表を使用した線形補間の誤差も評価しているのです。 線形補間は古代バビロニアで多用された方法のようですが、プトレマイオスはこれを適用するのに 数学的評価を与えている。更に更に唖然とします。
なお、プトレマイオスの弦の数表が意図して任意の角度の弦が 60 進数でおおよそ小数点以下 3 桁まで 求められるようにしていたことに関しては別の根拠があります。 プトレマイオスよりも以前にヒッパルコスが弦の数表を作っています。 (ヒッパルコスの弦の数表を参照) これは現存していませんが、 7.5° ごとの弦の数表で、加法公式を併用して任意の角度の弦を決定したようです。 この表はおよそ小数点以下 2 桁程度の 60 進数と考えることができます。 ヒッパルコスの方法では任意の角度の弦が決定できるのに、 プトレマイオスの弦の表で任意の角度の弦が決定できないわけがないからです。 線形補間を併用して、この精度を実現するには弦の表は 0.5° ごとでないといけないのです。 従ってプトレマイオスの弦の数表の構成法は意図されたものなのです。
実際にはプトレマイオスの弦の数表には随所で最後の桁に ±1 の間違いがあります。 (プトレマイオスの弦の数表のエラーを参照。) しかし、これはプトレマイオスの計算が四捨五入によるものであることを意味し、 誤差が累積していないことから判断すると、計算の手順、あるいは誤差の評価に 綿密な考察をしたことがうかがい知れます。従って、最後の桁の ±1 のエラーは プトレマイオスの「偉大さ」を示すもので、その逆ではありません。
追加: プトレマイオスの弦の数表の計算方法は「正多角形 + 三角法」によって円周率を決定する方法であることが わかりました。 恐らくヒッパルコスがした方法の真似です。 しかもプトレマイオスは chord(1) を決定する際に、円周率 π=3;8,30 (10 進数では 3.1416 に相当) を再チェックして、検算に使用したのに相違ないことも判明しました。 以上に関してはヒッパルコスの弦の数表の 正多角形で円周率 π=3.1416 を求める方法を参照のこと。
「弦の数表」とは天文学者で幾何学者であったプトレマイオスが AD 2 世紀にエジプトで作ったものであり、 プトレマイオスの アルマゲスト -- これは数理天文学の専門書 -- の巻 I の II 章に含められている三角関数の数表である。 「弦の数表」は本質的には正弦関数の数表と同等なものである。 これは最も初期の三角関数の数表で、非常に詳しいため、多くの実用的な目的には十分であり、 これには天文学が含まれる。(ヒッパルコスによる、これ以前の弦の数表は 7½° = π/24 ラジアンの 倍数の角度の弦のみが与えられていた) 数世紀が経過してから、もっと詳しい三角関数の数表が作られた。
円周の弦とは両端が円周上にある線分のことである。 プトレマイオスは直径が 120 の円を考えた。 彼は、両端が n 度離れた弦の長さを表にした、 但し n は 1/2 から 180 まで渡り、1/2 づつ増加した。 現代の記号では、角度 θ に対応する弦 (chord) の長さは次で与えられる。 【訳注:2 番目の表示は角度、3 番目の表示はラジアン】
θ が 0 から 180 まで増える時、角度 θ° の弦は 0 から 120 に増える。 微小円弧に対しては、弦 (の長さ) と角度の比は π と 3 の比に等しく、 より厳密には、θ を十分に小さくとれば、比率はいくらでも π/3 ≈ 1.04719755 に近くなる。 従って、(1/2)° の円弧の場合には、円弧は弦 (の長さ) よりはわずかに大きい。 円弧の大きさが増えるにつれ、弦と円弧 (の角度) の比率は減少する。 円弧が 60° になったときに、弦の長さは円弧 (の角度) に一致する、すなわち chord 60° = 60。 60° 以上の円弧に対しては、弦 (の長さ) は円弧 (の角度) より小さい、 180° の円弧に達しても、弦 (の長さ) はまだ 120 である。
また、増減に関してはグラフを描く方がわかりやすい。
chord(θ) ≈ 60×2×(θ・π/360) = θ・π/3 chord(θ)/θ ≈ π/3
弦の長さの小数部分は、60 進数で表示されている。 例えば、112° の円弧に対する弦の長さは "99 29 5" と表記されており、 これは長さを丸めると
99 | + | + |
となることである。
円弧と弦のカラムの後ろに、第 3 のカラムがあり、「60 分の 1」と命名されている。 角度 θ° の場合には「60 分の 1」には次の数が記されている。
これは、θ° と (θ+1/2)° の中間で、 θ° が 1' 増えた時に chord(θ°) に加えなければならない 60 分の 1 の平均である。 これは、線形補間に使用される。 Glowatzki と Göttsche は、「60 分の 1」に見出される角度の精度を達成するためには、 プトレマイオスが弦を 5 桁の 60 進数まで計算したのに相違ないことを示した。
アルマゲストの巻 I の 10 章には弦を計算するのに使用した幾何学の定理が載せられている。 プトレマイオスは 72°, 36° の弦を計算するのにユークリッド原論の巻 XIII の命題 10 に基づいた 幾何学的論証を使用している。 命題の主張する所は、正五角形が円に内接する時に 辺の平方が、同じ円に内接する正六角形と正10角形の辺の平方の和に等しい。
プトレマイオスは、半円弧の弦、2 つの円弧の和の弦、2 つの円弧の差の弦 【訳注:要するに正弦関数の加法公式など】を導くために、 円に内接する四角形に関してのプトレマイオス (トレミー) の定理を使用した。 定理の述べる所は: 円に内接する四角形の対角線の長さの積は、 向かい合う辺の長さの積の和に等しい。 三角関数に関しての等式を導き出すためには、 円に内接する四角形で、1 辺が円の直径となるものを使用すればよい。
1° 及び ½° の円弧に対する弦 (の長さ) を求めるために、 プトレマイオスは アリスタルコスの不等式に基づく近似をした。 不等式は 0<β<α<90° となる円弧 α, β に対して
< | < |
プトレマイオスは、1° 及び ½° の円弧に対しては、 整数部を取り除いて、2 桁の 60 進数に丸めると、近似が正確であることを示した。
以上に書かれているだけでは、プトレマイオスがどのようなことをしたのかに関しておおよそ理解できますが、 もう少し考えていましょう。まずアリスタルコスの不等式を証明しましょう。
正弦曲線のグラフを描けば
となり、ここから
< | ⇒ | < |
同様に tan のグラフを描くことから次が得られる。
< |
プトレマイオスの弦の数表の構成にはアリスタルコスの不等式を完全に使用するものでは ありません。これは次で説明します。
アルマゲストの邦訳は読みにくくて参考になりませんが、英訳のアルマゲストは読むことができます。
G.J.Toomer, Ptolemy's Almagest, Princeton Universtiy Press, 1998
「カッツ、数学の歴史」にもプトレマイオスの弦の表の構成法の解説があります。
プトレマイオスは次のように議論しています。
プトレマイオスは以上のように論証してから、9 番目の事実から次のような計算をしています。 3/4<1 より
chord(1)/chord(3/4) | <1/(3/4) | |
chord(1) | <(4/3) chord(3/4) | ≒1;2,50 (60 進数表示) |
1<3/2 より
chord(3/2)/chord(1) | <(3/2)/1 | |
chord(3/2) | <(3/2) chord(1) | |
chord(1) | >(2/3) chord(3/2) | ≒1;2,50 (60 進表示) |
そして、ここから chord(1) = 1;2,50 を結論しています。chord(1) と chord(3/2) が既知ですから、chord(1/2) を決定でき、弦の数表を 0.5° ごとに記述できることになります。
chord(α) = 2 sin(α/2)と定義していました。この方が現代人には理解しやすいからです。ところがプトレマイオスは角度 α の弦 chord(α) を半径が 60 の中心角が α となる「弦の長さ」を「α の弦」と呼んでおり、この定義では
chord(α) = 60×(2 sin(α/2))となります。従ってプトレマイオスの 60 進表示では小数点の位置が右に 1 つずれます。
chord=0;1,2,50 を得るためには 5 桁の 60 進数で 計算しないといけないことがわかります。ほとんど手書きの計算と関数電卓でチェックできる程度の計算ですが、 桁を色々取り換えることをすればプログラムの方が若干便利です。
出力結果を整理すると
下限 | 丸め | 上限 | |
cos(3/2) | 59 58 45 58 | 59 58 45 59 | 59 58 45 59 |
cos(3/4) | 59 59 41 29 | 59 59 41 30 | 59 59 41 30 |
chord(3/2) | 1 34 14 39 | 1 34 14 39 | 1 34 15 17 |
chord(3/4) | 0 47 7 0 | 0 47 7 0 | 0 47 8 17 |
(2/3)chord(3/2) | 1 2 49 46 | 1 2 49 46 | 1 2 50 11 |
(4/3)chord(3/4) | 1 2 49 21 | 1 2 49 21 | 1 2 51 2 |
下限 | 丸め | 上限 | |
cos(3/2) | 59 58 45 58 55 | 59 58 45 58 56 | 59 58 45 58 57 |
cos(3/4) | 59 59 41 29 40 | 59 59 41 29 41 | 59 59 41 29 42 |
chord(3/2) | 1 34 14 41 37 | 1 34 14 42 15 | 1 34 14 42 53 |
chord(3/4) | 0 47 7 23 40 | 0 47 7 24 56 | 0 47 7 26 13 |
(2/3)chord(3/2) | 1 2 49 47 44 | 1 2 49 48 10 | 1 2 49 48 35 |
(4/3)chord(3/4) | 1 2 49 51 33 | 1 2 49 53 15 | 1 2 49 54 57 |
4 桁では 上限・下限から決めても、四捨五入から決めても (4/3)chord(3/4) = 1,2,50 が得られない。 (2/3)chord(3/2) = 1,2,50 となることは 4 桁でも、5 桁でも求められる。 なおアルマゲストでは chord(3/4) = 0,47,8 としてあるが、これは誰かによる写しまちがい。 chord(3/4) = 0,47,8 とすると (4/3)chord(3/4) が 1,2,50 に一致しない。
少し好奇心に駆られ、プトレマイオスの弦の数表の誤差をチェックしてみました。
プトレマイオスの弦の数表のエラー
結果を見ると、末尾の桁に ±1 までのエラーがありますが、 それ以上のエラーがありません。随分正確だというべきでしょう。
円弧 (の角度) と弦の長さの整数部分は、10 進法で表示され、 これには以下の表の 21 個のギリシャ語のアルファベットと、1/2 を表す "∠'" が使用された。 以下で "archaic" (古語) と記された 2つの文字はアルマゲストが書かれた時点では、 ギリシャ語で何世紀もの間使用されなくなっていたものである。
従って、例えば円弧 143½°は のように表示される。
弦の長さの小数部分は高い精度が要求され、数表では 2 つのカラムが使用されている。 最初のカラムは 1/60 の倍数を与える 0-59 の範囲の整数値で、 第二のカラムは 1/602 = 1/3600 の倍数を与える 0-59 の範囲の整数値である。
従って、 Heiberg 版のアルマゲスト (PDF) の p48-p63 の弦の数表の冒頭で、 円弧 1/2° から 7½° までの部分は次のようになっている。
数表の後の方で、円弧 (の角度) と弦の長さを表示する整数部分が 10 進表示であることがわかる。 従って 85° の円弧は πε (π は 80, ε は 5) と書かれ、60 + 25 のように分割されておらず、 対応する弦の長さは 81 と小数部分からなり πα で始まり、60 + 21 のように分割されていない。 しかし、小数部分は 4/60 + 15/602 であり、1/60 のカラムには 4 に対応する δ が書かれ、 1/602 のカラムには 15 に対応する ιε が書かれている。
数表は 8 ページからなり、1 ページは 45 行からなっている。従って全部で 360 行からなっている。
結論としては、この節の内容は訳注 2 で証明されます (但し、逆関数の部分は証明していません)。 そのため、計算機による計算は最終的には不必要となります。 しかし、唐突に訳注 2 のみ書けば理解しにくいので、考察の過程も残しておきます。
何故、このようなことをしたのかの理由もつけておきます。
ここではプトレマイオスの弦の表自身は正確な表であることを前提にし、 計算間違いがないと仮定する。そのため、プトレマイオス自身の表は参考にしません。
一変数関数 g(x) に対して 2 つの実数 a, b (a<b) を与え、 a における値 A = g(a) と b における値 B = g(b) が与えられた時に、 中間点 c (a<c<b) における値を線形補間で (つまりグラフが直線であるとみなして) 決めると 、その値は
となります。プトレマイオスの弦の数表は 0.5° ごとの表で、正弦の表と思えば 0.25° ごとの表になります。 そこで 0.25° ごとの正弦の表が与えられた時に (但しこの表に誤差がないと仮定する)、1' (= 1/60°) ごとの値を線形補間で定めた時に 誤差がどの程度になるかを考え、次のような Java プログラムでこれを決めてみましょう。 (プログラミングを知らない人は単に結果を信用して下さい。)
public class chord { static double pi = 3.14159; public static void main(String[] args) { double Max, D; double i,j; Max = 0.0; for(i = 0.0; i<90.0; i=i+0.25){ for(j = 1.0; j<15.0; j = j+1.0){ D = Math.sin(rad(i+j/60.0)) -hokan(i,i+0.25, i+j/60.0); if(D > Max){ Max = D; } } } System.out.println("Max=" + Max); } // 角度をラジアンに変換するメソッド public static double rad(double d){ return d*pi/180.0; } // a と b における正弦値 sin(a), sin(b) から、 // 中間 c (a<c<b) における正弦値を線形補間で定め // それを返すメソッド public static double hokan(double a, double b, double c){ double A, B; A = Math.sin(rad(a)); B = Math.sin(rad(b)); return A + (B-A) * (c-a)/(b-a); } }
その結果、誤差の最大は
となり、10-5 より小さくなります。一方、プトレマイオスの 弦の表は半径が 60 の円で、弦の長さを小数点以下 2 桁の 60 進数で 与えていますから、実際には小数点以下 3 桁の 60 進数で与えていることになります。 ところが、
となるので、 プトレマイオスの弦の数表は、 10 進数で考えれば小数点以下 5 桁まで有効な正弦の表を与えていることになり、 先の線形補間による誤差も加味すれば、次がわかります。
但し、少し問題が残ります。それはプトレマイオスは弦の表を 作っており、弦の値は正弦の値の倍 (chord α = 2 sin(α/2)) となり、 弦に変換すると誤差が倍になります。 この場合には
となり、60 進表示の小数点以下 3 桁目には ±1 の影響があり得ます。 しかし、これは 10 進表示では小数点以下 6 桁目に相当します。
正弦の逆関数のことも考えてみましょう。 一変数関数 g(x) の ai (i = 0, 1, .., n) における値 Ai = g(ai) (i = 0, 1, .., n) が 与えられた時、g-1(C) の値を線形補間によって決定するには 次のようにします。
となる m を決めて、g-1(C) を次の値と思う。
線形補間は基本的にはグラフを直線と思って計算しますから、誤差が出ます。 プトレマイオスの弦の表から正弦の逆関数の値を決めると誤差がどれくらいになるか 計算してみましょう。 アークサイン sin-1 を含む式で最大値を求めるのは至難な業なので、0.25° 区間を 100 等分して、 そこにおける誤差の最大値を求めてみます。 本当の意味の最大値ではないかもしれませんが、極めて近い値となるはずです。
計算をする前に注意することがあります。正弦 sin(x) の逆関数を x = 90° の近くで考えるのは 馬鹿げています。x = 90° で y = 1 が sin(x) の接線となっているからです。 つまり 45°<x<90° の範囲でアークサインを考えても誤差が大きくなるだけなので、 45°<x<90° の範囲であれば
から直接 x を求めるのではなく、まず
を計算し、cos(x) = sin(90 - x) を利用して
から x の値を計算するのが合理的です。 つまりアークサインを線形補間で決定する際の誤差は 0<x<45° の場合のみ調べます。
public class chordInverse { public static double pi = 3.14159; public static void main(String[] args) { double i, j; double A, B, C, D, Max; Max = 0.0; for(i = 0.0; i<90.0; i=i+0.25){ A = Math.sin(rad(i)); B = Math.sin(rad(i+0.25)); for(j = 1.0; j<100.0; j = j+1.0){ C = A + (B-A)*j/100.0; D = hokan(A, B, C) - Math.asin(C); if(D > Max) Max = D; } } System.out.println("Max=" + Max); } // 角度をラジアンに変換するメソッド public static double rad(double d){ return d*pi/180.0; } // A = sin(a), B = sin(b) のとき、中間の A<C<B に対して // c = sin(C) となる c を線形補間で求め、それを返すメソッド。 // asin = アークサイン public static double hokan(double A, double B, double C){ double a, b; a = Math.asin(A); b = Math.asin(B); return a + (b-a) * (C-A)/(B-A); } }
すると結果は次のようになります。
これが誤差の最大で、10 進表記では少数以下 5 桁まで有効であることがわかり、 随分ゆとりがある評価です。 従って、次のようにまとめることができます。
以上をまとめると、大雑把には次のようになります。
この節の目的は訳注 1 で計算機によって確認したことを、数学的に 確認することを目的とします。
sin(a+x)≒(sin a)(1 - (1/2) (Cx)2) + (cos a)Cx
となり、この時の誤差は 3×10-8 より小さい。証明: 1 に関して。 ヒッパルコスの弦の数表の補題 1.1から
0<Cx - sin(x) < C (1/4) - sin(1/4) ≒ 2.40×10-8
Cx - sin(x) = δ、 |δ|<2.5×10-8
(Cx)2 | = (sin(x))2 + 2δ(sin(x)) + δ2 |
|(Cx)2 - (sin(x))2| | ≦ 2|δ|(sin(x))| + |δ|2 |
≦ 2|δ||sin(1/4)| + |δ|2 | |
≦ 2×2.5×10-8×0.004... + |δ|2 | |
= 2. ... × 10-10 + |δ|2 < 3×10-10 |
2 に関して。 n が自然数の時に、二項定理
3 に関して。 式変形をすると
(1 + a1t + a2 t2 + a3 t3 +... + amtm)2 = 1 - t + (tm+1 以上の項の和)
が成立するように、順番に a1, a2, a3,... を定めることができます。 考え方としては、筆算による平方根の計算と類似のものです (おつりを順番に消していく)。一般に平方根の計算が無限に続くように、 この計算も無限に続く。t が微小量の時は (1 - t)1/2 の近似値を与えることになり、 場合によっては平方根の計算をすばやくすることができます。証明: 0≦x≦1/4 に対して、角度 a, a+x が区間 [0, 60°] に属しているとし、
F(x) = | x + sin(a) |
|sin(a + x) - F(x)|<10-5
- x2 + x/4 = - (x - 1/8)2 + 1/64 | (A) |
0≦x≦1/4 であれば |-x2 + x/4|≦1/64 | (B) |
(C) |
よって、中間の近似式による誤差 (6×10-8) は無視することができ、(C) により与えられる 2.3..× 10-6 が最終的な誤差である。おおまかに評価すれば |sin(a + x) - F(x)|<10-5 を得る。
式 (C) による誤差の最大は 2.3...× 10-6 となりますが、この値は訳注 1 の計算機による誤差の計算と 一致していることがわかります。
従って、弦の言葉に直せば、訳注 1 で述べたことが、そのまま成立することが わかります。すなわち、線形補間により分の単位まで、弦の値を決めた時に 60 進表示の小数点以下 3 桁目には ±1 の誤差があり得る。(但し、これは弦の表に誤差がないと仮定している。) しかし多くの場合にこれはほとんど問題とならない。
このような高い精度を実現するためには 1° ごとに表を作成したのでは無理で、 0.5° ごとに表を作成することで始めて可能となる。 (プトレマイオスが 0.5° ごとに弦の表を作ったことは誤差を評価したことを意味している。)
弦の場合の 0.5° は正弦の場合には (1/4)° に対応します。 この 1/4 は式 B を成立させるために必要で、これが誤差を低減させるのに 多大な貢献をしていることがわかります。 従ってプトレマイオスは式 (A) を良く理解していた。
なお上の誤差評価では円周率を 3.1416 で実行していますが、3.14159 とした場合でも 誤差の評価はほとんど変化しない。だから上の方法では円周率の精度にはあまり影響を受けない。 ヒッパルコスの弦の求め方は円周率の精度に依存しており、 精度を上げるためには円周率の精度を上げないといけない。 この点で、プトレマイオスは多大な進展をした。
古代ギリシャにおける文献は基本的にはエジプトから輸入されたパピルスに記述された。 乾燥したエジプトとは違い、ギリシャではパピルスは時間と共に劣化します。 そのため文献を維持するためには定期的に書き写す必要がありました。 これは膨大な作業となり、重要性が低いとみなされた文献は歴史から消え失せてしまったのです。 計算法を記した本も重要性が低いとみなされた文献のはずで、 誤差評価を記した本もそのような本に含まれたのではないかと思われます。