零分误差:0.0 到负或复数幂



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

Traceback (most recent call last):
  File "E:pythonShADsin.py", line 27, in <module>
    sum+=(ser(i*2*3.1415926/k))**8
  File "E:pythonShADsin.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

而且我只是看不出某物在哪里被零除或有权力 对于复数,所有变量只有实正值。

不对。 在第一次迭代中

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是一个复数。

最新更新