Webページでは数式を表すためにLaTeX表記が使えるMathJaxを利用しています。 WebブラウザにはSafari/Chrome/Firefoxを使って下さい(IEでは表示できないようです。)

連分数展開と有理数近似

次の単純連分数 \[ a_0+\cfrac{1}{a_1+\cfrac{1}{a_2+\cfrac{1}{\ddots+\cfrac{1}{a_n}}}}=\frac{p_n}{q_n} \] を $a_0+[a_1,a_2,\dots,a_n]_C$ と表記しよう。 $[a_1,a_2,\dots,a_n]_C$は$[0,1)$内の有理数である。

連分数展開リストが与えられると、オブジェクト指向--有理数計算を例にしてで定義した既約有理数を計算するクラス rational を使って有理数表現が可能になる。

参考書は、不滅の名著、高木貞治『初等整数論講義』(第二版1931年、共立出版)

円周率

高木貞治『初等整数論講義』によると、$\pi$の単純連分数は \[ \pi = 3+ [7,15,1,292,1,1,1,2,1,3,1,14,2,1,1,2,2,2,2,1,84,2,1,1,15,3,13,1,4,2,6,6,1]_C \] と表されるとある。 小数10位まで用いては連分数 $3+ [7,15,1,292,1]_C$ でより以上には表すことはできない(連分数の収束性はたいへん高いということだ)。 円周率 $\pi$ は超越数であり、無限小数や単純連分数展開において現れるディジット(整数)には周期性などは観測されない(ただし、単純でない連分数で規則性を持つものが存在する)。

演習: 既約有理数を計算するクラス rational を使って、整数値を要素とする非空リスト nlist からその既約有理数を返す関数 continued_fraction(nlist) を定義しなさい。

この関数 continued_fraction によって長さ i = 0,1,2,.. の $\pi$ の連分数展開リストから計算した有理数と浮動小数を次のように表示するスクリプト continued_fraction.py を書きなさい。

./continued_fraction.py
0 3/1 3.0
1 22/7 3.14285714286
2 333/106 3.14150943396
3 355/113 3.14159292035
4 103993/33102 3.14159265301
5 104348/33215 3.14159265392
6 208341/66317 3.14159265347
....
....
この結果の後半は、プログラムが正しくとも出力は正しくない。 円周率 $\pi$ の詳しい結果を調べて、どの結果から正しくないかを調べて、その理由を考えなさい。

連分数展開

区間$(0,1]$の点 $x$ の連分数展開 $[a_1(x),a_2(x),\dots, a_n(x)]_C$ は次のようにして求めることができる。 写像 $ T_C: (0,1]\rightarrow (0,1]$ を \[ T_C(x) = \frac{1}{x} - a(x), \qquad a(x) = \lfloor \frac{1}{x} \rfloor \] で定める。 ここで、$\lfloor x \rfloor$ は $x$ を越えない最大の整数を返す床関数である。 $T_C$を使って、次のようにして $x=x_0$ から逐次的に $x_1,x_2,\dots, x_{n}$、および整数の列 $[a_1(x),a_2(x),\dots, a_n(x)]_C$ を計算することができる。 \[ x_{n+1} = T_C^{n+1}(x) = x_{n} - a(x_{n}),\quad a_{n+1}(x)=a(x_n) \] この $[a_1(x),a_2(x),\dots, a_n(x)]_C$ が $x\in(0,1]$ の連分数展開である(もちろん、一般には$n\rightarrow\infty$なのであるが)。

演習: 自然対数の底 $\mathrm{e}$ は次のような規則性を持っていることが知られている。 \[ \mathrm{e} = 2 + [1,2,1,1,4,1,1,6,1,1,8,1,1,10,\dots]_C \] 長さ20までの連分数リストに対して、長さ 1 から 20までの$\mathrm{e}$の有理数近似とその浮動小数点を表示しなさい。 また、高精度の$\mathrm{e}$の値を調べて、その連分数展開の結果と上記結果を比較してみなさい。
演習: 区間$(0,1]$内の数で、単純連分数で最も近似し難いもの(収束性が悪いもの)は \[ \tau = [1,1,1,1,1,1,1,1,\dots]_C \] である。 $\tau$ の値を解析的に求めなさい。 長さ 1 から 30までの有理数近似とその浮動小数点を表示しなさい。