月齢とルナティック
月は神秘的です。闇を煌々と照らす満月を見ると何かざわついた気持ちになりませんか。満月、新月、満潮、干潮…。人間をはじめ、動物、植物の活動と月の動き(満ち欠け)には何らかの関連があります。もっと大きな話では、月がなければ生物は地球上に生まれなかったとも言われるほどです。
実際に満潮と干潮が海の生物に影響を与えているのは確実ですし、交通事故が起こるのは満月の夜が多いと言われています。でも月の満ち欠けって一体、何でしょう。
地球の周りを公転している月が太陽からの光を反射するとき、その反射具合が満ち欠けとなって見えるのですが、上弦・下弦の月、三日月、待宵月など多くの呼び名があります。昔から月の満ち欠けに関心が高かった証拠でしょうね。
この満ち欠け具合を月齢と言います。月の満ち欠けは新月から次の新月までを、大体29.5日間の周期で繰り返すのですが、これを月齢として0から29.5までで表します。満月は月齢14±1、新月は29と0になります。
月齢を計算しよう
この月齢を計算できる数式があります。最大で2日くらいズレることがありますが、それくらいの誤差でも構わないという人には、次のmoonというrpnプログラムを紹介します。
このプログラムは8桁の日付から月齢を計算します(package入門(カレンダー・システム編)の曜日と月齢に詳しくあります)。DOSプロンプトを起動してから、以下のrpn式を入力してください。
5
上のrpn式で、2001年1月1日の月齢を求めています。計算では月齢5になりました。新月になってから5日目ということですね。同様に以下の書き方でも月齢計算できます。好きな記述スタイルで計算できます。
5
対話型プログラムとして使いたい場合は、以下のように空ファイルを渡してください(空ファイルに関してはpackage入門(カレンダー・システム編)の空ファイルを参照ください)。誕生曜日で使ったweekdayと同じ仕様です。入力プロンプトが表示されたら、年、月、日の順に数字を打ち込んでみましょう。
rpn [年月日] -c moon <stdin
年=
最初のプロンプトの"年"に1969とキーを打って、最後にエンターキーを押してください。
rpn [年月日] -c moon <stdin
年=1969
月=
次のプロンプトの"月"には7を入力します。
rpn [年月日] -c moon <stdin
年=1969
月=7
日=
最後のプロンプト"日"には20です。
rpn [年月日] -c moon <stdin
年=1969
月=7
日=20
月齢6
アポロ11号が月面に着陸したとき、新月から6日でした。三日月よりちょっと明るい程度だったんですね。
ちょっと不気味なルナティック
最後に都市伝説的な話です。満月になると犯罪が増えたり、自殺も起こりやすい、そして大きな事故や事件が発生しやすいと言われます。ルナティックと呼ばれる現象です。
ロンドンで起こった切り裂きジャック事件も、主に新月と満月の夜に犯行が行われたそうです。どの殺人事件が切り裂きジャックの手によるものか分からない事件もあるのですが、16件の事件に関して月齢計算してみました。
jack.txtに8桁の事件発生日のデータがあるとします。月齢計算して、xypとnpdでグラフ化します。
^y 30 (新月)
| *
| *
|
| * *
| * *
| * *
-・・・・・・・・・・・・・・・・・・・・・・・・・*・・・・・・・・・・・・・ (満月)
| * * *
| *
| *
|
|
| * x
|o 16
+-|-|--|-|--|-|--*-|--|-|--|-|--|-|--|-> (新月)
横軸が16件の事件が発生した時系列、縦軸が月齢です。満月の前後に事件が起こっている様子はありますが、このグラフではそれほどの集中はないような気もします。
そこで、今度は縦軸を事件発生頻度、横軸を月齢にしてグラフを描いてみましょう。
^y 3
(新月) (半月) (満月) (半月) (新月)
| : :
2 : * *
| : :
| : :
| : :
* * : * * * * * * * * : * *
| : :
| : : x
|o : : 30
+1-2-3-4-5-6-7-8-9-1011121314151617181920212223242526272829>
半月より大きく、満月以下の月齢時に起こった事件は10件。逆に半月より小さく、新月以下だと4件で、2倍以上の発生頻度です(半月時に2件)。確かに満月付近に事件が発生しているような雰囲気はあります。
あなたはどう感じますか。ルナティックは存在しているのでしょうか。
番外編:月齢を計算する簡易式
古くからある月齢の計算式で、1740年以降なら簡単に月齢が計算できるようです。ただし、上記のrpnプログラム同様に誤差はあります。
プログラムの仕様としては年と月と日を指定して計算してくれると便利です。以下がそのrpn式ですが、長いので2行に分けて表示してあります。
===(この行の1行下からコピー)===
#d #m #y 1 #1 2 #2 -1 #3 -1 #5 \
@y 1740 - 210 * 19 / 2 - @m + @d + @m @ + 30 %
===(この行の1行上までコピー)===
プログラムの部分をコピーしてテキストファイルに貼り付けてください。保存時にテキストファイルに名前を付けるのですが、ファイル名は"moonage.rpn"としておきましょう。
プログラムの使い方は年と月と日を指定して、rpnファイルの"moonage.rpn"を読み込むだけです。計算結果は月齢で出てきます。下の例は1980年12月8日の月齢計算です。
0
ジョン・レノンが倒れたその夜に月はありませんでした。
カレンダー・システムパッケージのmoonは採用している計算式が異なります。
月齢に関する話が、package入門(カレンダー・システム)の曜日と月齢にもあります。興味のある方は閲覧ください。また、実践コーナーの投資アラカルトには満月の日に株価は動くがあります。興味のある方は閲覧ください。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
rownumはカンタン分析パッケージに同梱されています。freqはrpnマイスターパッケージに同梱されています。 moon, nullはカレンダー・システムパッケージに同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。