Pythonで連分数展開

Pocket

Pythonで連分数展開する方法を考えてみました。

連分数とは

次のような形で書かれる式のことを連分数といいます。分子が1になっているところが特徴です。

変わるのは1,2,3,4,5の部分です。
これを[1,2,3,4,5]というリスト(配列)で表すことにします。

連分数を計算する関数

[1,2,3,4,5]というリスト(配列)を渡すと連分数としての値を計算する関数です。

def calc_continued_fraction(seq):
  len_seq = len(seq)
  a = 0
  for i in range(len_seq):
    if i == 0:
      a = seq[len_seq - i - 1]
    else:
      a = seq[len_seq - i - 1] + 1 / a
  return a

連分数展開する関数

ある数を渡すと連分数に展開する関数です。リストを返します。

def make_continued_fraction(src, keta = 10):
  seq = []
  c0 = 1 / src
  for i in range(keta):
    b0 = math.floor(1 / c0)
    seq.append(b0)
    c0 = 1 / c0 - b0
  return seq

使用例

seq = [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
dst = calc_continued_fraction(seq)
print(dst)

実行結果
1.4142135642135643

√2のような値になりました。

今度は√2を連分数にしてみます。

src = 2 ** (1 / 2)
print(src)
seq = make_continued_fraction(src, 20)
print(seq)
dst = calc_continued_fraction(seq)
print(dst)

実行結果

1.4142135623730951
[1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
1.4142135623730965

一行目が元の√2の値です。
二行目が連分数を表す配列です。
三行目が連分数の値です。
かなり近い値になります。

[ 2024年4月16日 | カテゴリー: Python | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報