如何计算大分母连分式的收敛性?

2024-09-29 17:22:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从这个公式中找到DpDq

enter image description here

我尝试使用ContFraclib执行此任务:

pip install ContFrac

import contfrac

find_number = 2140e225
value = (1,math.sqrt(find_number))
conv = list(contfrac.convergents(value))
print(conv)

但输出是奇数,因为数字太大:

0 + 1/(my_sqrt)

Symphy中的方法也不起作用,返回0

print(continued_fraction((1//sqrN)))

Article link

更新1:

我在玩Symphy时发现我应该使用这个库sqrt实现

from sympy import sqrt

lm = continued_fraction((1 / sqrt(number)))
lz = flatten(lm)
print(list(continued_fraction_convergents(lz)))

但这些将导致内部异常:

PrecisionExhausted: Try simplifying the input, using chop=True, or providing a higher maxn for evalf

但正如我所见,我无法为continued_fraction操作培养人才。 我也无法将数字作为十进制数传递:

decimal.getcontext().prec = 125
lm = continued_fraction((1 / sqrt(decimal.Decimal(find_number))))

ValueError: expecting a rational or quadratic irrational, not 2.16152455423408e-125

Tags: importnumbervalue数字sqrtfindlistlm
1条回答
网友
1楼 · 发布于 2024-09-29 17:22:08

刚刚找到一个要点。它给出了与Wolfram的Alpha Convergents[]相同的值。然而,我不确定第5个元素之后的精度,因为Wolfram只给出该点的值

import math
import itertools

def continued_fraction(n, d):
    while d:
        q, r = divmod(n, d)
        n, d = d, r
        yield q


def alternative_continued_fraction(n, d):
    gen = continued_fraction(n, d)
    p = next(gen)
    for q in gen:
        yield p
        p = q
    yield p - 1
    yield 1


def convergents(n, d):
    hh, kk, h, k = 0, 1, 1, 0
    for x in continued_fraction(n, d):
        hh, kk, h, k = h, k, h * x + hh, k * x + kk
        yield h, k

decimal.getcontext().prec = 500
print(list(convergents(1, Decimal(find_number).sqrt())))

相关问题 更多 >

    热门问题