maxima入門

連分数

連分数とは分母にさらに分数が含まれているような分数のことです。
詳しくはwikipediaをどうぞ。
連分数に関連する関数には接頭辞cfがついていますが
これは連分数の英語表記であるcontinued fractionからきています。

wikipediaの表記にならうと
√3 = [1;1,2,1,2,1,2,...]
となります。
無理数の場合、このように無限に項が続くため
maximaで表示する際、どれだけ繰り返し表示するかを制御するための
変数がcflengthです。
数値を連分数展開するための関数がcfで
結果を連分数表示したい場合cfdisrep関数を使います。
また、結果を分数の和で表したいときには
cfexpand関数を使います。

連分数を扱う

(%i1) cf(sqrt(3)),cflength=8; (%o1) [1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2] (%i2) cfdisrep(%); (%o2) 1+1/(1+1/(2+1/(1+1/(2+1/(1+1/(2+1/(1+1/(2+1/(1+1/(2+1/(1+1/(2+1/(1+1/(2+1/(1+1/2))))))))))))))) (%i3) cfexpand(cf(sqrt(3))),cflength:8; (%o3) matrix([51409,18817],[29681,10864]) (%i4) float(sqrt(3)); (%o4) 1.732050807568877 (%i5) float((51409/29681 + 18817/10864)/2); (%o5) 1.732050808464121
cfexpandで計算した分数は ちゃんと近似値になっていることが分かります。 連続して処理をする場合は cflengthをあらかじめ設定しておくと 記述が楽になるでしょう。
since 2014/03/23