【问题标题】:Python: Approximating ln(x) using Taylor SeriesPython:使用泰勒级数逼近 ln(x)
【发布时间】:2015-11-21 00:41:54
【问题描述】:

我正在尝试在十位精度内建立 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 位数字后停止迭代?

感谢您的帮助!

【问题讨论】:

  • 请注意,函数定义中使用的“r”从未使用过。由于尚未声明 x,因此“print taylor_two(x, 12)”行也会出错。要在所有 n 次尝试之前从函数返回,您必须提交一个较低(可能是较高)的数字,以将计算出的数字与 if .6418538
  • 嗨,乔,感谢您的评论。我现在看到没有声明 x 存在问题。您能否举一个编码示例来说明下限和上限的含义?我不确定你在这里的意思。
  • 我在上一篇文章中放了一个if语句。浮点数可能不是 100% 准确,因此您必须将“等于”定义为上下两个数字,并且介于两者之间的任何数字都是“相等”

标签: python numerical-integration taylor-series


【解决方案1】:

原理是;

  • 查看每次迭代对结果的影响。
  • 当差值小于 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

【讨论】:

  • 感谢您的回复,罗兰。我实际上使用 2*sum k=1 到无穷大,使 (x^(2k - 1))/(2k - 1) 近似。我已经尝试了您的代码,但这并不是我想要做的。也许我用错了问题的措辞。我需要系统达到所需的值并在精度达到 10 位数时停止,然后让它给我那个值。您提供的代码需要我自己输入值。这有意义吗?
  • 我假设需要某种循环,直到 ln(1.9) 和结果值之间的差异非常小。我只是不确定如何构建它。
  • @BigD4J 查看更新的答案。该算法一直运行到下一步的加法 print()。
猜你喜欢
  • 2021-08-12
  • 2021-08-13
  • 2019-07-11
  • 2022-06-18
  • 2022-07-10
  • 2017-07-02
  • 1970-01-01
  • 2017-06-06
  • 2020-04-01
相关资源
最近更新 更多