2020年10月12日月曜日

連分数と近似分数

前回のブログ, 連分数と近似分数でeの近似分数 878/323をStern Brocot木から求めたが, 連分数との関係については書かなかった.

容易に想像できるように, LとRの列RL0RLR2LRL4RLR6L ...は, 1年前のブログにあるeの連分数展開[2,1,2,1,1,4,1,1,6,1,1,8]と同じパターンである.

昔のブログの最後の方の中間近似分数にも同じ分数が現れる.

「コンピュータの数学」には無理数αからLとRの列を求める式もある.

if α < 1 then (output(L); α:=&alpha/(1-&alpha))
           else (output(R); α:=α-1)
途中のαと一緒にLとRを計算すると

from math import e
print(e)
alpha=e
lri=[]
def sb():
    global alpha
    if alpha<1:
        lri.append("L")
        alpha=alpha/(1-alpha)
    else:
        lri.append("R")
        alpha=alpha-1
    print(alpha)

for i in range(16):
    sb()
print(lri)

2.718281828459045
1.718281828459045
0.7182818284590451
2.5496467783038432
1.5496467783038432
0.5496467783038432
1.2204792856454296
0.22047928564542962
0.2828395468977148
0.39438809777395056
0.651222501282252
1.8671574389873726
0.8671574389873726
6.5277079301786785
5.5277079301786785
4.5277079301786785
3.5277079301786785
['R','R','L','R','R','L','R','L','L','L','L','R','L',
'R','R','R']
つまり連分数で1なら文字は1回, 2なら2回 繰り返すのであり, Stern Brocot木による計算は連分数展開の近似を, 中間近似分数まで含めて得ていたのであった.

0 件のコメント: