如何计算和打印ln(1+x)的值使用级数展开: ln (1 + x)扩张
使用while循环,并包含大小大于10-8的项。打印出每一项的和,以显示收敛的结果。 到目前为止,这是我的代码,但它计算lnsum2是一个非常大的数字,因此永远不会结束。
n=1
lnsum2= np.cumsum((((-1)**(n+1)*(x**n)/n)))
while lnsum2>10**-8:
n+=1
lnsum2 = lnsum2 + np.cumsum((((-1)**(n+1)*(x**n)/n)))
else: print('The sum of terms greater than 10^-8 is:', lnsum2)
多谢。 现在我有了使用while循环的代码。谢谢你的帮助!! 问题来源StackOverflow 地址:/questions/59380645/taylor-expansion-in-python
也许有点过头了,但这里有个不错的解决方法,用辛普森法来计算无穷级数。
from sympy.abc import k
from sympy import Sum, oo as inf
import math
x = 0.5
result = Sum(
(
x**(2*k-1) /
(2*k-1)
) - (
x**(2*k) / (2*k)
),
(k, 1, inf)).doit()
#print(result) # 0.5*hyper((0.5, 1), (3/2,), 0.25) - 0.14384103622589
print(float(result)) # 0.4054651081081644
print(math.log(x+1, math.e)) # 0.4054651081081644
编辑: 我认为您的原始代码的问题是您还没有完全实现这个系列(如果我正确地理解了您问题中的数字)。看起来您试图实现的系列可以表示为
x^(2n-1) x^(2n)
( + ---------- - -------- ... for n = 1 to n = infinity )
2n-1 2n
而您的代码实际上实现了本系列
(-1)^2 * (x * 1) ( (-1)^(n+1) * (x^n) )
----------------- + ( -------------------- ... for n = 2 to n = infinity )
1 ( n )
编辑2: 如果你真的必须自己做迭代,而不是使用症状,这里是工作的代码:
import math
x = 0.5
n=0
sums = []
while True:
n += 1
this_sum = (x**(2*n-1) / (2*n-1)) - (x**(2*n) / (2*n))
if abs(this_sum) < 1e-8:
break
sums.append(this_sum)
lnsum = sum(sums)
print('The sum of terms greater than 10^-8 is:\t\t', lnsum)
print('math.log yields:\t\t\t\t', math.log(x+1, math.e))
输出:
The sum of terms greater than 10^-8 is: 0.4054651046035002
math.log yields: 0.4054651081081644
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。