【发布时间】:2021-02-03 00:41:15
【问题描述】:
这是我的代码:
def fact(y):
if y == 0:
fact=1
return fact
else:
fact=1
for k in range (1, y+1):
fact = fact * k
return fact
def e_negative_x(x):
n=0
numerical_precesion=1
numerical_precesion_ideal= 10**(-8)
while numerical_precesion > numerical_precesion_ideal:
sum=0
for i in range (0, n+1):
ind=((-x)**i)/fact(i)
if i> 0 & n-i == 0:
ind_2=((-x)**(i-1))/fact(i-1)
numerical_precesion_1 = ind_2 - ind
numerical_precesion = abs(numerical_precesion_1)
sum = sum + ind
if numerical_precesion > numerical_precesion_ideal:
n += 1
elif sum < 0:
n += 1
return sum
我尝试将其用于x=0.1;1;10;15 作为练习,并且我的精确度得到了“正确”,但是当我尝试x=30 时,它卡在了-8e-5(错误答案)。我试图增加我的条款,但它仍然停留在-8e-5,小数位不同,并且在条款大幅增加之后根本没有改变。
编辑:-8e-5 是错误的,因为在无穷大时这个数列趋向于 0。我做了一个无限循环(对于无限项)并让它打印出它有多少项以及这些项的总和。在我关闭之前,我有600 + 条款。在89term 我被困在-8e5 之后 117 我被困在-8.553016433669241e-05 直到600 + term。
【问题讨论】:
-
它似乎没有卡住我。我尝试了 50,结果为 -7015.776232596799,而 100 结果为 -2.8756582514726483e+26。您确定这些不是预期结果吗?
-
@mulaixi 但这些显然是错误的值。实函数向 0 单调递减,并且始终为正。
-
我没有考虑函数,是的,你是对的。当我尝试代码时,结果会波动。所以,这些反对票没有意义。 @KonradRudolph 顺便说一句,我没有投反对票。
-
我进行了编辑,以便更清晰。
-
不相关,但您在自己内部隐藏了
sum内置函数和您自己的fact函数;另外,您可以使用math.factorial。此外,您的elif似乎毫无意义:如果之前的if为假,则循环将结束并且n将不再使用。
标签: python function exponential taylor-series