1

我想找到一个积分 ((sin x)^8, {x,0,2*Pi}) 并尝试编写一个简单的程序,没有任何外部模块作为“数学”,它计算泰勒级数并将其总结为区间(0,2*Pi) 但有错误

Traceback (most recent call last):
  File "E:\python\ShAD\sin.py", line 27, in <module>
    sum+=(ser(i*2*3.1415926/k))**8
  File "E:\python\ShAD\sin.py", line 21, in ser
    sin_part+=((-1)**(j-1))*(a**(2j-1))/(fact(2*j-1))
ZeroDivisionError: 0.0 to a negative or complex power

突然发生。而且我只是看不到某些东西被零除或具有复数的幂,所有变量都只有真正的正值。“k”是序列数量和区间 (0,2*Pi) 除法的值。

sum=0
k=20
res=0

def fact(t):
    if t==0 or t==1:
        res=1

    else:
        res=1
        for l in range(2,t+1):
            res=res*l           
    return res

def ser(a):
    sin_part=a
    for j in range(2,k):
        print fact(2*j-1)
        sin_part+=((-1)**(j-1))*(a**(2j-1))/(fact(2*j-1))
        print 'yay'
    return sin_part


for i in range(0,k-1):
    sum+=(ser(i*2*3.1415926/k))**8
print sum
4

1 回答 1

2

而且我只是看不到某些东西被零除或具有复数的幂,所有变量都只有真正的正值。

不对。在第一次迭代中

for i in range(0,k-1):
    sum+=(ser(i*2*3.1415926/k))**8

你有i=0,所以 的参数ser是 0,所以a == 0,你有(a**(2j-1)),这需要 0 的复数幂。

也许你的意思是a**(2*j-1)?Python 使用j虚数单位,复数也是如此2j-1

于 2013-09-24T15:52:59.870 回答