使用泰勒展开式以用户设置的精度值计算pi

时间:2019-03-16 09:10:58

标签: python

输入是计算pi的精度,我需要输出计算出的pi的值和达到该值的项数。

这是我编写的代码,应该可以打印出来(3.33968,5)。有人可以检查我哪里出了问题吗?

1 个答案:

答案 0 :(得分:0)

我认为第一个问题是您的代码难以阅读,因此难以调试。最好使用有意义的变量名,并尽量减少不必要的变量声明。

如标题所述,这是您的问题的有效实现方式,例如计算给定精度的pi:

# Pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...
import numpy as np

def taylor(precision):

    t_pi, factor, error, order = 0, 0, np.pi, 0

    while (error >= precision):
        t_pi += 4 * (-1)**factor / (2*factor + 1)
        error = abs(np.pi - t_pi)
        order += 1
        factor += 1

    return t_pi, order

taylor(0.2)

>>> (3.3396825396825403, 5)

这是您的代码的更正版本:

def taylor(t_precision):
    t_list = []
    t_number = 0
    t_final = 0
    while t_precision <= abs(np.pi - t_final):

        t_answer = (-1)**t_number / (2*t_number+1)
        print(t_answer)

        t_list.append(t_answer)
        t_final = 4 * (sum(t_list))
        t_number = t_number + 1


    return (t_final,t_number)

t_precision = 0.2
taylor(t_precision)

>>> (3.3396825396825403, 5)

错误是:

  • while循环的条件。您正在根据pi的实际值与所需精度之间的差异来检查最终近似值。例如如果您的近似值为2.6,精度为0.1,则该条件已经成立,而误差大于所需的精度

  • return语句的缩进错误,因此无论什么情况,循环都会在第一次执行时退出。