使用 spyder 中具有指定容差的连续项之间的关系扩展泰勒级数

Expanding taylor series using relation between successive terms with a specified tolerance in spyder

我已经使用此代码在 spyder(Python 3.8).

中使用指定的 tole运行ce 确定了 e^pi 的值
from math import*
term=1
sum=0
n=1
while (abs(e**pi-term))>0.0001:
    term=term*pi/n
    sum+=term
    n+=1
print(sum,e**pi)

我运行这个代码好几次了。但是当我 运行 这段代码时,spyder 没有显示任何内容。我是 python 的新手。所以现在我无从知道这段代码是否正确。如果您能验证此代码是否有效,将对您有所帮助。

while 循环没有结束。

我一直处于跳出循环的状态(在 10,000 次循环时)以证明这一点:

from math import*
term=1
sum=0
n=1

while (abs(e**pi-term))>0.0001:
    term=term*pi/n
    sum+=term
    n+=1
    if n > 10_000:
        print('large n')
        break
print(sum,e**pi)

如果把while循环换成for循环,那么你可以看到每次迭代如下。

term=1
sum=0

for n in range(1, 101):
    term=term*(math.pi)/n
    sum+=term
    print(n, sum, math.e**math.pi)

这是前 10 项的结果:

1 3.141592653589793 23.140692632779263
2 8.076394854134472 23.140692632779263
3 13.244107634184441 23.140692632779263
4 17.30281976060121 23.140692632779263
5 19.852983800478555 23.140692632779263
6 21.188246569333145 23.140692632779263
7 21.787511098653937 23.140692632779263
8 22.02284172901283 23.140692632779263
9 22.104987615623955 23.140692632779263
10 22.13079450701397 23.140692632779263

数字越来越大,因此 while 循环从未退出(并且您的笔记本电脑可能在此过程中变得非常热!!)。

好的,所以 e^x 的泰勒级数是 n=0 到 x^n / n 的总和!通过在每次迭代期间乘以 pi/n,您似乎做得正确。

我注意到的一个问题是您的 while 循环条件。要检查函数的错误,您应该从实际值中减去当前的 sum。这就是你进入无限循环的原因,因为你的 term 将接近 0,所以差值将接近实际值 e^pi,它总是大于 .0001 或任何你的错误。

另外,由于n从1开始,所以sum也应该从1开始,因为泰勒级数的第0项已经是1了。这就是你进入死循环的原因,因为

因此,我们的代码应该是这样的:

from math import*
term = 1
sum = 1
n = 1
while (abs(e ** pi - sum)) > 0.0001:
    term = term * pi / n
    sum += term
    n += 1
print(sum,e**pi)

输出:

23.140665453179782 23.140692632779263

我希望这有助于回答您的问题!如果您需要任何进一步的说明或详细信息,请告诉我:)