連分数を処理する数式処理ソフトウェア
記事の都合上, 解釈が面倒な数式を書くので, 同じ式を表現した WolframAlpha へのリンクを設定しています.
連分数とは、分数の分母にさらに分数が含まれるような数値表現である.
例えば, 1+2/(3+4/(5+6/7))というようなものである.
特に、分子の部分がすべて 1 になっているような連分数のことを正則連分数といい, 単に連分数といった時には正則連分数であることを暗黙で示していることがある.
正則連分数について, a0+1/(a1+1/(a2+1/a3)) を [a0; a1, a2, a3] と表現する. 各 ai は正の整数 (a0 は0や負の値を含めた整数) である.
ある実数を(正則)連分数に変換することを連分数展開というが, 有理数ならば有限項の連分数で, 無理数ならば無限項の連分数で表現されることがわかっている.例えば, 355/113=[3; 7, 16], π=[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, …] となる.
無理数を分数(整数比)で近似する場合, 連分数展開を途中で打ち切って真分数や仮分数に戻すという手段が使われる。 そうして現れる分子や分母の値は, それ以下の整数を用いたあらゆる整数比(分数)よりもよりよい近似となることが知られている.
実際に, 例に挙げた 355/113=[3; 7, 16]=[3; 7, 15, 1] は 355 以下の整数を用いた分数の中で最良の円周率の近似である.
さて, 正則連分数展開は次の手順で行われる.
- 正則連分数展開を行いたい数を ω0 とし, n を 0 とする.
- ωn の整数部分を an とする.
- ωn の小数部分が 0 に等しい場合は, ak (k≥n+1) は存在しない, すなわち, 連分数表現は an の項で打ち切る.
- ωn+1 を ωn=an+1/ωn+1 を満たすように定める.
- n に 1 を加えて2番目の手続きに戻る.
この作業を行う数式処理ソフトををいくつか紹介する.
もっとも有名であろう数式処理ソフト Mathematica
は ContinuedFraction
関数がある.
連分数表現を分数に計算する関数 FromContinuedFraction
もある.
連分数変換の対象として指定できるのは任意の実数である.
フリーウェアの中でも知名度が高い Maxima
は cf
関数で連分数展開し, cfexpand
関数で分数近似を表す行列が表示される.
ただし, cf
関数の対象は整数, 有理数, 浮動小数, 多倍長浮動小数, 整数の平方根, 正則連分数展開として解釈されるリスト、これらの四則演算となっている.
つまり、
円周率の連分数展開を行うには, 例えば次のようにする.
- fpprec: 16;
- cf(bfloat(%pi));
- cfexpand(%);
これにより, 円周率を10進数16桁の精度で近似した小数に対し, 連分数展開と通常の仮分数表現が行われる.