3

我正在尝试在十位数的精度内建立 ln(1.9) 的近似值(所以 .641853861)。

我正在使用一个从 ln[(1 + x)/(1 - x)] 构建的简单函数

到目前为止,这是我的代码:

# function for ln[(1 + x)/(1 - x)]

def taylor_two(r, n):
    x = 0.9 / 2.9
    i = 1
    taySum = 0
    while i <= n:
        taySum += (pow(x,i))/(i)
        i += 2
    return 2 * taySum

print taylor_two(x, 12)

print taylor_two(x, 17)

我现在需要做的是重新格式化它,以便它告诉我将 ln(1.9) 逼近到上述 10 位所需的项数,让它显示系列给出的值,并显示错误。

我假设我需要以某种方式将我的函数构建到一个 for 循环中,但是一旦它达到所需的 10 位数字,我怎样才能让它停止迭代呢?

谢谢您的帮助!

4

1 回答 1

5

原则是;

  • 看看每次迭代增加了多少结果。
  • 当差值小于 1e-10 时停止。

您正在使用以下公式,对;

公式

(注意有效范围!)

def taylor_two():
    x = 1.9 - 1
    i = 1
    taySum = 0
    while True:
        addition = pow(-1,i+1)*pow(x,i)/i
        if abs(addition) < 1e-10:
            break
        taySum += addition
        # print('value: {}, addition: {}'.format(taySum, addition))
        i += 1
    return taySum

测试:

In [2]: print(taylor_two())
0.6418538862240631

In [3]: print('{:.10f}'.format(taylor_two()))
0.6418538862
于 2015-08-26T20:26:19.460 回答