关于Python:while循环:Python:while循环 – 如何避免除零?

Python: While loop - how do I avoid division by zero?

我正在编写用于求和[-n,n]范围的傅里叶级数的代码。 然而,当它到达n = 0时我遇到麻烦。我在while循环中写了一个'if'语句,所以它可以忽略它,但似乎不是。 这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from __future__ import division
import numpy as np
import math
import matplotlib.pyplot as plt


#initial values
ni = -10
nf = 10
ti = -3
tf = 3
dt = 0.01
yi = 0 #initial f(t) value
j = complex(0,1)

#initialization
tarray = [ti]
yarray = [yi]
t = ti
n = ni
y = yi


cn = 1/(8*(np.pi)**3*n**3*j**3)*(j*4*np.pi*n) #part (b)


#iterating loop
while t<tf:
    n = ni
    y = yi
    while n<nf:
        if n == 0:
            cn = 1/6
            y += cn
            n += 1
        else:
            y +=  cn*np.exp(j*np.pi*n*t)  
            n += 1

    yarray.append(y)
    t+=dt
    tarray.append(t)

#converting list-array
tarray = np.array(tarray)
yarray = np.array(yarray)

#plotting
plt.plot(tarray,yarray, linewidth = 1)
plt.axis("tight")
plt.xlabel('t')
plt.ylabel('f(t) upto n partial sums')
plt.title('Fourier Series for n terms')
plt.legend()
plt.show()

我希望它迭代并创建一个y值的数组,范围从一些负数到一些正数(比如来自[-10,10]的n),但是一旦它达到n = 0,它似乎是 将其插入'else'子句即使我希望它使用'if'子句中的内容,给我一个"ZeroDivisionError:复杂除零"。 我该如何解决?

编辑:将整个代码块放在此处,以便您可以查看上下文。


系数cnn的函数,应在每个循环中更新。 你使它保持不变(对于正n,甚至等于1/6)。

内环可能看起来像

1
2
3
y = 1/6                                        # starting with n = 0
for n in range(1,nf):
    y -= 1/(2*np.pi*n)**2 * np.sin(np.pi*n*t)   # see below

正n和负n的对应系数是相等的并且exp(ix) - exp(-ix)= 2i sin(x),所以它很好地减少了。 (仔细检查计算。)


这不是最优雅的方式,但尝试这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while t<tf:
n = ni
y = yi
while n<nf:
    try:
        1/n
        cn = 1/6
        y += cn
        n += 1

     except ZeroDivisionError:
        y +=  cn*np.exp(j*np.pi*n*t)  #1/n*np.sin(n*t)
        n += 1

yarray.append(y)
t+=dt
tarray.append(t)