$10$adic連分数展開
$10$adic連分数展開の方法については、 $10$adic連分数展開 を参照してください。
必要な知識
Maxima:リスト、ラムダ式、rreduceの使用法
数学:10進数の基礎的知識+10adicの知識
CFList(n,N)
nの10adic連分数展開を(N-1)個の分数で切ったリストの形で結果を得る関数.
CFList(n,N):=block([list1:[],list2:[],e:0], for i thru N do ( block([count2:0,count5:0], if n - mod(n,10)=0 then return(e:1), list1:endcons(mod(n,10),list1), n: n - mod(n,10), while mod(n,2)=0 do (n:n/2,count2:count2+1), while mod(n,5)=0 do (n:n/5,count5:count5+1), list2:endcons(2^count2*5^count5,list2), n:inv_mod(n,10^N) ), if(e=1) then return(0) ), [list1,list2] )$ CFList(32,5);
実行結果.
[[2,7,7,9,9],[10,20,10,10,10]]
CF(n,N,mode)
nの10adic連分数展開を(N-1)の連分数で切ったときに得られる分数を得る関数。CFList(n,N)を利用する。
mode=0とするとそのままの分数で表示。
modeを0以外の数にすると、mod 10^mode の世界で計算した結果を返す。
CF(n,N,mode):=block([list:[],list2:CFList(n,N),len,r], len:length(list2[1]), list:makelist([list2[1][i],list2[2][i]],i,1,len-1), list:endcons(list2[1][len]+list2[2][len],list), r:rreduce(lambda([x,y],x[1]+x[2]/y),list), if mode=0 then r else mod(num(r)*inv_mod(denom(r),10^mode),10^mode) )$ CF(32,5,0);
実行結果.
42208/13819
GetTexCommand(n,N,Max)
nの(N-1)個の連分数展開をMaxで打ち切ったもののTeXコマンドを得る。CFList(n,N)を利用する。
GetTexCommand(n,N,Max):=block([list:[],list2:CFList(n,N)], list:makelist([list2[1][i],list2[2][i]],i,1,Max-1), list:endcons(printf(false,"~a+~a",list2[1][Max],list2[2][Max]),list), rreduce(lambda([x,y],printf(false,"~a+\\cfrac{~a}{~a}",x[1],x[2],y)),list) )$ GetTexCommand(32,5,5);
実行結果.
2+\cfrac{10}{7+\cfrac{20}{7+\cfrac{10}{9+\cfrac{10}{9+10}}}}
WordなどのTeXコマンドが実行できる環境で実行すると次が表示される。
\[2+\cfrac{10}{7+\cfrac{20}{7+\cfrac{10}{9+\cfrac{10}{9+10}}}}\]