简体   繁体   English

Python:使用泰勒级数逼近ln(x)

[英]Python: Approximating ln(x) using Taylor Series

I'm trying to build an approximation for ln(1.9) within ten digits of accuracy (so .641853861). 我正在尝试在十位数的精度内建立ln(1.9)的近似值(so .641853861)。

I'm using a simple function I've built from ln[(1 + x)/(1 - x)] 我正在使用从ln [(1 + x)/(1-x)]构建的简单函数

Here is my code so far: 到目前为止,这是我的代码:

# 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)

What I need to do now is reformat this so that it tells me the number of terms needed to approximate ln(1.9) to the above 10 digits, have it display the value that series gives, and also show the error. 现在我需要做的是重新设置格式,以便告诉我将ln(1.9)近似于上述10位数字所需的项数,让它显示序列给出的值,并显示错误。

I assume I need to build my function into a for loop somehow, but how can I get it to stop iterating once it's reached the 10 digits needed? 我假设我需要以某种方式将函数构建到for循环中,但是一旦达到所需的10位数字,如何才能停止迭代呢?

Thank you for your help! 谢谢您的帮助!

The principle is; 原理是;

  • Look at how much each iteration adds to the result. 查看每个迭代为结果增加多少。
  • Stop when the difference is smaller than 1e-10. 当差异小于1e-10时停止。

You're using the following formula, right; 您正在使用以下公式,正确;

ln公式

(Note the validity range!) (请注意有效范围!)

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

Test: 测试:

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

In [3]: print('{:.10f}'.format(taylor_two()))
0.6418538862

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM