2020年3月30日月曜日

おまつのブログ シーズン 2 「近世頒暦の研究」緒言

 
このブログでは、上代日本語について動詞を中心に調べたことをつらつらと書き並べてきたわけだが、それだけを書こうと思ってはじめたわけではない。思ったこと・調べたことを、いろいろ書こうと思っていたのだが、日本語に関しての調べものに、思ったより深入りしてしまった。
ここから、まったく別のテーマについてしばらく書いていく。
暦についてである。

明治に新暦に改暦する前の太陰太陽暦、特に江戸時代、幕府天文方によって作暦されていた暦の暦法について、調べたことを書いていきたい。日本で使われていた太陰太陽暦は、下表のとおりである。このうち、貞享暦・宝暦暦・寛政暦・天保暦が対象となる。
なぜこれらを対象とするかというと、それより前の暦については、暦の計算方法の情報が結構世に出回っているのだが、意外にも、江戸時代の幕府天文方の暦の計算方法の情報は少ないように思ったからだ。
それ以前の暦については、作成された暦が残っていない年が多いので、「計算方法を調べ、作暦して補完する」という作業が必要であり、計算方法を整理して説明してくれている論文などがあったりする。が、江戸時代の暦はすでに作暦されたものがまとめて残っているのでその必要がない。天文学史的な観点からその暦法を研究しているものは多く、当然研究された方は作暦方法をご存じなのだろうが、まとまった形で作暦方法を解説してくれている情報は発見できなかった。
というわけで、「江戸時代の幕府天文方の暦の作暦方法を調べてみよう」というのが当面のテーマとなる。

日本での適用期間 暦法書 元ネタ
元嘉暦 ?~696 宋書 宋(六朝時代の劉宋)の元嘉暦 (445~509)
儀鳳暦 文武天皇元年(697)
~763
唐書 唐の麟徳暦 (665~728)
大衍暦 天平宝字八年(764)
~857
唐書 唐の大衍暦 (729~761)
五紀暦 天安二年(858)
~861
唐書 唐の五紀暦 (762~783)
宣明暦 貞観四年(862)
~1684
唐書 唐の宣明暦 (822~892)
貞享暦 貞享二年(1685)
~1754
貞享暦書 元の授時暦 (1281~1644) を参考に、
渋川春海により日本で作成された暦
宝暦暦 宝暦五年(1755)
~1797
暦法新書(宝暦)
暦法新書続録
貞享暦のマイナーアップデート
寛政暦 寛政十年(1798)
~1843
暦法新書(寛政)
寛政暦書
清の時憲暦 (※1)「暦象考成後編」を参考に、
高橋至時らにより日本で作成された暦
天保暦 天保十五年(1844)
~1872
新法暦書
新法暦書続編
ラランデ暦書 (※2) を参考に、
渋川景佑らにより日本で作成された暦
  • (※1) 清朝の暦はすべて時憲暦と呼ばれているが、実際は暦法の異なる3期(一期1645~1725、二期1726~1735、三期1736~1911)がある。「暦象考成後編」は三期の時憲暦の暦法書。ドイツ人イエズス会士であり、清朝の欽天監を務めていた Ignaz Kögler によって書かれた。
  • (※2) フランスの天文学者 de Lalande (ド・ラランド) による天文学の教科書 "Astronomie" (1764) のオランダ語訳版を、日本では「ラランデ暦書」と通称している。

「暦」との出会い

昔、カレンダーを作るプログラムを自作して使っていたことがあった。祝日等を、振替休日なども含め自動計算するものだが、そこでネックになるのが春分の日・秋分の日である。当初は、「まあ大体の計算でそうはずれないだろう」ということで
  • 春分 = 3月 int(20.838419 + 0.2423855 * (y - 1980) - int((y - 1980) / 4) 日
  • 秋分 = 9月 int(23.253038 + 0.2420355 * (y - 1980) - int((y - 1980) / 4) 日
みたいな感じの単純な計算で実装しており、実際、この計算でそんなにずれることもない (※) のだが、「もうちょっとちゃんと計算しようとするとどうなるの?」というのが気になっていた。
  • (※) 上の概算式だと、もうちょっとこましな方法で計算したのに比べて、春分秋分の時刻が±15分ぐらいずれるようだ。よって、春分秋分が夜中0時の前後15分の間に発生する場合は、日付もずれ得るのだが、手元で計算してみる限り、幸いにして日付がずれるケースは当面ないように見受けられる。
  • また、上の概算式は、4で割り切れるがうるう年でない年(100で割り切れ、400で割り切れない年)の考慮を端折っているので、 1900~2099年の間だけ有効。

水路部式

そこでいろいろ調べて見つけたのが「水路部式」などと呼ばれている略算式である。今でこそGPSがあるわけだが、それ以前、外洋航海する船舶は、六分儀を使って天体観測し、それを天体暦 (ephemeris) とつきあわせて自分の位置を確認する天測航法を行う必要があった。このため、海上保安庁水路部(2002年以降、海上保安庁海洋情報部)が、「天測暦」というブックレットを毎年発行し、船舶航行の便に供していた(というか、今でも発行している)。
この「天測暦」で、コンピュータや関数電卓等を使って太陽・月・惑星の座標を略算する式が、昭和53 (1978) ~ 55 (1980) 年版の付録として掲載された。下記に示すのは太陽の黄経 (λSUN) を求める式だ。春分・秋分を求めるには、それぞれ λSUN=0°, λSUN=180°となるような時刻 t を求めればよいのだが、この式は、時刻から黄経を求める式なので、λSUN=0°, 180°となるような時刻 t を求めたければ、漸近的に求めることになる。
  • なお、この式における時刻 t は、1975/1/0 (1974/12/31) 0:00 をゼロとし、365.25日 (ユリウス年) を1とする時刻である。
    また、地球の自転を時計の針として使う UT/GMT (グリニッジ標準時) ではなく、それに近似するように定義されているが、力学的に均質な時刻系(地球の自転速度は経年変化するため、地球の自転を時計の針として使う時刻系は力学的に均質な時刻系ではない)、暦表時 (ET: ephemeris time) である。

\[ \begin{align}
\lambda _{SUN} = & 279°.0358 + 360°.00769 t \\
& + (1°.9159 - 0°.00005 t) \sin(356°.531 + 359°.991 t) \\
& + 0°.0200 \sin(353°.06 + 719°.981 t) \\
& - 0°.0048 \sin(248°.64 - 19°.341 t) \\
& + 0°.0020 \sin(285° + 329°.64 t) \\
& + 0°.0018 \sin(334°.2 - 4452°.67 t) \\
& + 0°.0018 \sin(293°.7 - 0°.2 t) \\
& + 0°.0015 \sin(242°.4 + 450°.37 t) \\
& + 0°.0013 \sin(211°.1 + 225°.18 t) \\
& + 0°.0008 \sin(248°.4 + 659°.29 t) \\
& + 0°.0007 \sin(53°.5 + 90°.38 t) \\
& + 0°.0007 \sin(12°.1 - 30°.35 t) \\
& + 0°.0006 \sin(239°.1 + 337°.18 t) \\
& + 0°.0005 \sin(10°.1 - 1°.5 t) \\
& + 0°.0005 \sin(99°.1 - 22°.81 t) \\
& + 0°.0004 \sin(264°.8 + 315°.56 t) \\
& + 0°.0004 \sin(233°.8 + 299°.3 t) \\
& - 0°.0004 \sin(198°.1 + 720°.02 t) \\
& + 0°.0003 \sin(349°.6 + 1079°.97 t) \\
& + 0°.0003 \sin(65° - 44°.43 t)
\end{align} \]

天体位置計算をやったことがない人がこの式を見たら「え?こんな面倒くさそうな式が略算式なの?」と思うかもしれないが、非常に簡便な略算式である。
上の式を下の方まで見てもらえれば、振幅が 0°.0003 の項までの計算であり、それより振幅が小さい項の計算をしていないことがわかる。
太陽の黄経は、1年365日で、一周360°変化するので、ざっくり1日1°変動する。0°.0003の角度差を生ずるのに必要な期間は、概ね 0.0003日 = 26秒だ。これ以下の項を切り捨てているわけだから、春分・秋分の時刻を計算するとき、26秒以下の項がいくつか重なって、プラスマイナス相殺してくれればいいが、そうじゃないと、トータル1~2分ぐらいは、ずれることになる。それ以上の精度を求めるのであれば、さらに振幅の小さい項も含めて計算しないといけない。
また、現在、国立天文台暦計算室が作成している「暦要項」「理科年表」などでは、水路部式でやっているような、「平均項(水路部式では、\( 279°.0358 + 360°.00769 t \)) に、三角関数で表示した摂動項を加減していく」ようなクラシックな計算はしていない。
じゃあ、どうやっているのかというと、太陽系内の各天体の時刻ゼロにおける位置・速度ベクトル・質量等を入力パラメータとして与え、そこから力学的エミュレーションを行って、時刻 t における各天体の位置を求めている。
そんなことをやるのに比べれば、水路部式の計算なんてすこぶる楽ちんな略算式なわけである。なお、上記に示したのは太陽の黄経の計算式だが、月の計算の場合、太陽・地球双方の重力の影響を大きく受けるため、軌道がはるかに複雑で、数倍長ったらしい式になる。それでも、もっと精度の高い計算に比べれば、計算の簡単な略算式である。

なんで、昭和53~55年という、今となってはかなり古い計算式を今使うのかというと、この手の計算式がそれ以降出ていないからだ。
実をいうと今の天測暦でも、コンピュータ等を使って計算するための式が掲載されている。なぜそれを使わないのか。今掲載されているのは、4ヶ月間だけ有効な級数展開で表示された式である。それが「1~4月用」「5~8月用」「9~12月用」の3組、毎年掲載されている。来年の計算をしたければ、来年版が出版されるのを待たねばならない。今年の式を見てもまったく役に立たない。
この方式のほうが精度は高いのだろうし、航行の目的では現在の天体位置がわかればいいので、これでまったく問題ないのだろうが、暦の計算では過去未来にわたって計算したいことが多々あるため、あまりうれしくない。昭和53~55年に掲載された、万年暦的に用いることができる計算式の方がありがたいわけである。

「旧暦」の計算に挑戦してみる

さて、太陽黄経の水路部式を実装することによって、春分の日・秋分の日の計算を、比較的よい精度で行うようになっただけでなく、ほかのこともできるようになった。
市販のカレンダー等によく表示されているような、二十四節気(啓蟄とか立春とか大寒とかのアレ)や節分(立春の前日)なども自作のカレンダーに表示して悦に入っていた。
そこで、ふと考えた。「水路部式では月黄経の計算式もあるわけだから、それを使えば旧暦の計算もできるんじゃね?」と。
当時、海外の祝日も把握していた方が何かと便利な職場にいたため、旧暦の計算ができれば中国の春節の日付も計算できるんじゃないかという実用的な意味もあったし、純粋に興味があったので、旧暦の実装をしてみることにしたのである。

実際、太陽黄経と月黄経の計算式があれば、旧暦の計算は実装できる。旧暦では月の朔(新月)の時刻を含む日が毎月の一日だ。これは、\( {\lambda_{MOON}} - {\lambda_{SUN}} = 0° \) となる時刻を含む日ということになる。毎月一日の日がどの日かわかれば、一日からの日数を数えれば「その日は旧暦で何日?」がわかる。
さらに、「その月は旧暦で何月?」がわかる必要がある。これは、「閏月はどの月?」という問いと等価(閏月を除けば正月~12月を繰り返すだけだから)であり、これを求めるには二十四節気が必要。これは太陽黄経から求められる。二十四節気は、太陽黄経が 15° の倍数となる時刻だ。春分は、λSUN=0° となるような時刻 t であったが、立春を求めたいのであれば、λSUN=315° となるような時刻 t を求めればよい。

細かい計算方法は、次のポストで説明しようと思う(旧暦の計算の仕方なんて、ググればいくらでも情報があると思うのでこのブログで書かなくても別にいいとは思うが、まあ一応)が、まあ、そんなこんなで旧暦を実装出来た。

「江戸の暦」の計算方法を調べてみる

そうなると、「過去の暦はどうなっていたのか」 を計算したくなった。
水路部式は、20世紀あたりで使うことを想定された式だから、それを使って江戸時代とかを計算するのは若干無理があるのだが、まあそれでも幕末あたりならまあまあ使えそうだ。しかし、計算すると合わないことが多々ある。
まあ、合わないのは当たり前だ。江戸時代の人は水路部式を使って計算してないんだから。

「じゃあ、どうやって計算してたの?」というのが気になり、いろいろ調べ始めた。
当初は、ググったら誰か解説してくれてるんじゃないかと思ったが、具体的な計算方法がわかるような記述は見つけることが出来なかった。冒頭に述べたように、江戸の幕府天文方暦の作暦方法の情報は意外になかなかない。宣明暦とかなら結構情報が出てくるんだが。

一方、自分で調べるつもりなら、情報源はかなり揃っていることもわかった。
貞享暦・宝暦暦・寛政暦・天保暦の公式暦法書、実際に出版された暦を、ネットで閲覧することができる。情報化社会万々歳だ。
暦法書に書いてある計算式を読んで実装していき、計算して、出版された暦と突き合わせて答え合わせをしていけばよい。

と、言葉で書くのは簡単だが、実際にやるとなるとなかなか骨のある作業だ。

暦法書の式は、漢文であり、当然、西洋数学の記述法ではないので、読み解くのがそもそも大変。とはいえ、まあ、それなりに決まりきったスタイルで記述されているから、記述スタイルに慣れてしまえば、作業のなかでは比較的簡単な部類だ。ただ、「この計算は何を計算しているのか、得られた値は天文学的にいって何の値なのか」を理解してやっていかないとバグの元なので、そこは文系人間にはちょっと大変。

どちらかというと面倒なのは、実際の暦と突き合わせて答え合わせをする作業の方。オンラインで閲覧できると言ってもデータ化したものではないので、目で見て答え合わせをしていく必要がある。これが、結構手間だ。

そして、さらに面倒なのは、答え合わせをした結果、往々にして答えが合わないということだ。自分の計算がバグっていることも多々あるのだけれど、バグをつぶしていっても、やっぱり合わないことがある。「端数の処理方法など、暦法書には書いていないような計算の細部で差がでている」とか「実は、暦法書に書いてあるとおりの計算を、江戸時代の作暦者はしていない」とか理由はいろいろ考えられる。なるべく合うように計算方法を微調整して試行錯誤してみるのだが、完全には合わないことも多々ある。「江戸時代の作暦者が計算間違いしている」可能性もあるし。

まあ、そういった作業を経て、なんやかんやで、実際に出版された江戸時代の暦と見比べて、当たらずとも遠からずぐらいの実装が出来上がったわけだ。

これにより、 貞享暦→宝暦暦→寛政暦→天保暦の暦法の進化の歩みを追うことができたのだが、なかなか感慨深いものがある。「昔の人、がんばったなあ」と。
実際のところ、別に「すごいなあ。えらいなあ」という感じはしない。貞享暦は元の授時暦をほぼほぼパクッて若干「天経或問」あたりからの情報で補正したものだし、宝暦暦は貞享暦のパクりだし、 寛政暦は、清の時憲暦の元ネタ用にイエズス会士が書いた「暦象考成後編」のパクりだし、天保暦は、フランスの天文学の教科書(ラランデ暦書)のパクり。ほぼほぼパクりなんだけど(天体位置計算の方法にオリジナリティーなんていらないからパクりでいいんだが)、鎖国で情報が少ないなか、よく勉強したなあという感じ。
寛政暦は貞享暦・宝暦暦から桁違いに精度をあげているし、天保暦は寛政暦からまた桁違いに精度をあげている。(さらに言えば、天保暦から明治の新暦のところでも桁違いに精度があがっているが)。着実に進化していっていて、まあ、やっぱり「がんばったなあ」という感想ですね。暦学は、江戸時代の西洋科学導入の最先端だったんだろうなと。

まあ、そういったところを、皆様にも味わっていただきたく、私が読み解いたものをこの場でさらしていこうと思います。

0 件のコメント:

コメントを投稿