ヨーキョクデイ

100% pure impurities, which may imply some value. (j は虚数単位)

閏年の判定を三角関数で書く

日曜数学 Advent Calendar 2025 - Adventar の 12 日目の記事であります。

整数 $a,b$ について $a$ は $b$ の整数倍であることを $b \mid a$、そうでないことを $b \nmid a$ と表すものとする。ここで、閏年は次のように定義される。

閏年
整数 $y$ について西暦 $y$ 年(グレゴリオ暦)を考える。$4 \mid y$ かつ $100 \nmid y$ または $400 \mid y$ のとき $y$ は閏年、そうでないとき平年と呼ぶ。
このとき、\[L(y) = \begin{cases}
1 & \text{($y$ は閏年)} \\
0 & \text{($y$ は平年)}
\end{cases}\]となる閏年判定関数 $L(y)$ を三角関数を用いて表したい。

準備

三角関数と天井関数・床関数による倍数判定

$a,b$ を実数(ただし $b \neq 0$)として、\[\sin{\frac{a \pi}{b}} = 0 \iff \cos{\frac{a \pi}{b}} = \pm 1 \iff \text{$a$ は $b$ の整数倍}\]が成り立つ。すなわち、\[\left\lceil \abs{\sin{\frac{a \pi}{b}}} \right\rceil = \left\lceil \sin[2]{\frac{a \pi}{b}} \right\rceil = \begin{cases}
0 & \text{($a$ は $b$ の整数倍)} \\
1 & \text{(そうでない)}
\end{cases}\]および\[\left\lfloor \abs{\cos{\frac{a \pi}{b}}} \right\rfloor = \left\lfloor \cos[2]{\frac{a \pi}{b}} \right\rfloor = \begin{cases}
1 & \text{($a$ は $b$ の整数倍)} \\
0 & \text{(そうでない)}
\end{cases}\]が成り立つ。

not 関数

実数 $x$ の関数 $\mathrm{not}(x)$ を\[\mathrm{not}(x) \triangleq \left\lfloor \frac{1}{1 + \abs{x}} \right\rfloor = \begin{cases}
1 & \text{($x = 0$)} \\
0 & \text{($x \neq 0$)}
\end{cases}\]と定める。

閏年判定関数(案 1)

定義を論理演算的に表した形で、\[\left\lfloor \abs{\cos{\frac{\pi y}{4}}} \right\rfloor \qty(\left\lceil \abs{\sin{\frac{\pi y}{100}}} \right\rceil + \left\lfloor \abs{\cos{\frac{\pi y}{400}}} \right\rfloor) \]と書けそうである。ただし $+$ は通常の和ではなく論理和である。ただ、\[\left\lceil \abs{\sin{\frac{\pi y}{100}}} \right\rceil = \left\lfloor \abs{\cos{\frac{\pi y}{400}}} \right\rfloor = 1\]となる整数 $y$ が存在しなければ、通常の和としてもよい。実際に、$400 \mid y$ ならば $100 \mid y$ なので、上記が成り立つような整数 $y$ は存在しない。

ゆえに、閏年判定関数(案 1)として、\[L(y) \triangleq \left\lfloor \abs{\cos{\frac{\pi y}{4}}} \right\rfloor \qty(\left\lceil \abs{\sin{\frac{\pi y}{100}}} \right\rceil + \left\lfloor \abs{\cos{\frac{\pi y}{400}}} \right\rfloor) \]と書ける。

ただ、なにか味気ない。

閏年判定関数(案 2)

別のアプローチで考えてみよう。$y$ が閏年のとき $f(y)=0$、平年のとき $f(y) \neq 0$ となるような関数 $f(y)$ を適当に定めれば、\[L(y) = \mathrm{not}(f(y))\]と書ける。

ここで、$f(y)$ を\[\frac{ \sin{\frac{\pi y}{4}} \sin{\frac{\pi y}{400}} }{ \sin{\frac{\pi y}{100}} }\]のような形で書ければよさそうである。$100 \mid y$ のとき $0/0$ の形になるようにあえてこのようにしたが、ひとまず極限を用いて、\[f(y) \triangleq \lim_{t \to y} \frac{ \sin{\frac{\pi t}{4}} \sin{\frac{\pi t}{400}} }{ \sin{\frac{\pi t}{100}} }\]と定義しておき、これが $100 \mid y$ のときにいい具合に収束してくれればよい。

well-defined か

$y$ によって場合分けする。ナイーブに

  • $4 \nmid y$
  • $4 \mid y$ かつ
    • $100 \mid y$ かつ $400 \mid y$
    • $100 \mid y$ かつ $400 \nmid y$
    • $100 \nmid y$ かつ $400 \mid y$
    • $100 \nmid y$ かつ $400 \nmid y$

と場合分けできるが、

  • $4 \nmid y$
  • $4 \mid y$ かつ
    • $400 \mid y$
    • $100 \mid y$ かつ $400 \nmid y$
    • $100 \nmid y$

としてよい。

それぞれの場合について考えると、$4 \nmid y$ のとき、分母・分子はいずれも非 $0$ であるから $f(y) \neq 0$ である。

$4 \mid y$ のとき分子は $0$ である。$100 \nmid y$ のとき、分母は非 $0$ だから $f(y) = 0$ である。$100 \mid y$ のとき $0/0$ の不定形となるが、$m$ を整数として、\[\begin{align}
\lim_{t \to 100m} \frac{\qty( \sin{\frac{\pi t}{4}} \sin{\frac{\pi t}{400}} )'}{\qty( \sin{\frac{\pi t}{100}} )'}
&= \lim_{t \to 100m} \frac{ \frac{\pi}{4} \cos{\frac{\pi t}{4}} \sin{\frac{\pi t}{400}} + \frac{\pi}{400} \sin\frac{\pi t}{4} \cos\frac{\pi t}{400} }{\frac{\pi}{100} \cos{\frac{\pi t}{100}} } \\
&=\lim_{t \to 100m}
\frac{
100 \cos{\frac{\pi t}{4}} \sin{\frac{\pi t}{400}} + \sin{\frac{\pi t}{4}} \cos{\frac{\pi t}{400}}
}{
4 \cos{\frac{\pi t}{100}}
} \\
&= \frac{100 \cos{25 m \pi} \sin{\frac{m \pi}{4}} + \sin{25 m \pi} \cos{\frac{m \pi}{4}}}{4 \cos{m \pi} } \\
&=25 \sin{\frac{m \pi}{4}}
\end{align}\]となり収束するが、$m$ によってその値が異なる。すなわち、$400 \mid y$ のとき $f(y) = 0$ であり、$100 \mid y$ かつ $400 \nmid y$ のとき $f(y) \neq 0$ であることが l'Hôpital の定理より従う。

これにより $f(y)$ は well-defined であるといえる。

不定形の解消

定義に極限を用いたくないので、除去可能特異点は除去する。

倍角の公式(積)

$n$ 倍角の公式を積の形で書けるので、これを用いる。すなわち、\[\sin{n\theta} = 2^{n-1} \prod_{k=0}^{n-1} \sin(\theta + \frac{k \pi}{n})\]が成り立つから、$n=25,\theta=\pi y/100$ として、\begin{align}
\sin{\frac{\pi y}{4}}
&= 2^{24} \prod_{k=0}^{24} \sin(\frac{\pi y}{100} + \frac{k \pi}{25}) \\
&= 2^{24} \sin{\frac{\pi y}{100}} \prod_{k=1}^{24} \sin(\frac{\pi y}{100} + \frac{k \pi}{25})
\end{align}である。ゆえに、\begin{align}f(y)
&= 2^{24} \sin{\frac{\pi y}{400}} \prod_{k=1}^{24} \sin(\frac{\pi y}{100} + \frac{k \pi}{25}) \\
&= 2^{24} \sin{\frac{\pi y}{400}} \prod_{k=1}^{24} \sin{\frac{\pi (y+4k)}{100}}
\end{align}となる。総乗が $24$ 個の因子からなって醜いので、積和の公式から\begin{align}f(y)
&= 2^{24} \sin{\frac{\pi y}{400}} \prod_{k=1}^{12} \sin(\frac{\pi y}{100} + \frac{(25-k) \pi}{25}) \sin(\frac{\pi y}{100} + \frac{k \pi}{25}) \\
&= 2^{24} \sin{\frac{\pi y}{400}} \prod_{k=1}^{12} \frac{1}{2} \qty( \cos( \pi - \frac{2k \pi}{25}) - \cos(\frac{2\pi y}{100} + \pi) ) \\
&= 2^{12} \sin{\frac{\pi y}{400}} \prod_{k=1}^{12} \qty(\cos{\frac{\pi y}{50}} - \cos{\frac{2k \pi}{25}})
\end{align}などと変形できるが、方法はいくつかありそう。頭の定数倍を除去したものを改めて $f(y)$ としてもよい。もうちょっとシンプルな見た目にならないだろうか。

第 2 種 Chebyshev 多項式

第 2 種 Chebyshev 多項式 $U_n (x)$ は、\[\sin{n \theta} = U_{n-1}(\cos{\theta}) \sin{\theta} \]を満たす $n$ 次の多項式。これを用いて、$n=25,\theta=\pi y/100$ とすると、\[\sin{\frac{\pi y}{4}} = U_{24} \qty(\cos{\frac{\pi y}{100}}) \sin{\frac{\pi y}{100}} \]より、\[f(y) = U_{24} \qty(\cos{\frac{\pi y}{100}}) \sin{\frac{\pi y}{400}} \]とシンプルに書ける。ただ、$U_{24}(x)$ は $24$ 次式で、$x$ の偶数乗の項 $13$ 個の和だ。

蛇足ながら、上記 $U_{n-1}(\cos{\theta})$ の表式は、回転行列について行列の冪をもとの行列と単位行列の線型和で表すと得られるはず。

Dirichlet 核

Dirichlet 核 $D_n(x)$ は、\[D_n(x) \triangleq 1 + 2 \sum_{k=1}^{n} \cos{kx}\]と表される*1。このとき、\[\sin{(2n + 1) x} = D_n(2x) \sin{x} \]が成り立つから、これを用いて $n=12,x=\pi y/100$ とすれば、\[\sin{\frac{\pi y}{4}} = D_{12} \qty(\frac{\pi y}{50}) \sin{\frac{\pi y}{100}} \]より、\[f(y) = D_{12} \qty(\frac{\pi y}{50}) \sin{\frac{\pi y}{400}} \]と、これもまたシンプルに書ける。が、$D_{12}$ もまた $13$ 個の項からなる。

また、一般に正の奇数 $2n + 1,2m + 1$ について、\begin{align}\sin{(2n + 1)(2m + 1) x}
&= D_n(2 (2m+1) x) \sin{(2m+1) x} \\
&= D_n(2 (2m+1) x) D_m(2x) \sin{x}\end{align}となるから、$n=m=2,x=\pi y/100$ とすれば\[f(y) = D_{2} \qty(\frac{\pi y}{10}) D_{2} \qty(\frac{\pi y}{50}) \sin{\frac{\pi y}{400}} \]とも書けて総和の項数を減らせる。

完成形

以上の議論より、たとえば Dirichlet 核を用いた後者のバージョンを書き下して、\[L(y) \triangleq \left\lfloor \frac{1}{1 + \abs{(1+2\cos{\frac{\pi y}{10}}+2\cos{\frac{\pi y}{5}}) (1+2\cos{\frac{\pi y}{50}}+2\cos{\frac{\pi y}{25}}) \sin{\frac{\pi y}{400}}}} \right\rfloor\]などと表せる。

もうちょっと変な方法がありそう。さて、今年も来年も平年であるが、なんでこんなことをしているのだろう。

*1:これを 1/2 倍した定義もあるようだ