37,718
社区成员
发帖
与我相关
我的任务
分享
import numpy as np
import matplotlib.pyplot as plt
PI=np.pi
AA=4 #振幅
OMIGA=PI #频率
Num=500 #高次谐波数量
x = np.linspace(0, 10, 1000)
y=np.zeros((Num,x.shape[0]))
for i in range(1,Num+1):
y[i-1]=(-1)**(i+1)/(i*PI)*AA*np.sin(i*OMIGA*x)
z=np.sum(y,axis=0)
fig, ax = plt.subplots(2,2)
plt.subplot(221)
plt.plot(x,y[0], 'b-')
plt.subplot(222)
plt.plot(x,y[1], 'b-')
plt.subplot(223)
plt.plot(x,y[2], 'b-')
plt.subplot(224)
plt.plot(x,z,'c-')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
PI=np.pi
Num=5000 #谐波数量
C0=0;C1=1;C3=4 #常数项,级数系数项,第三参数
def sgn(n):
return 1 if n%2==0 else -1
def ftcs(n): #fc(n)*cos(tc(n)*x)+fs(n)*sin(ts(n)*x)->(fc,tc,fs,ts)
## return 0,0,sgn(n+1)*C3/(n*PI),n #锯齿波
## return 0,0,sgn(n+1)*C3/(n*PI),0 if n%2==0 else n #方波
return 1/(2*n-1)**2,(2*n-1)/C3*PI,0,0 #三角波
x = np.linspace(-5*PI, 5*PI, 1000)
tick=np.arange(-5*PI,5*PI+1,PI)
label=np.array(["-5π","-4π","-3π","-2π","-1π","0","π","2π","3π","4π","5π"])
y=np.zeros((Num+1,x.shape[0]))
y[0]=C0
for i in range(1,Num+1):
a,b,c,d=ftcs(i)
y[i]=C1*(a*np.cos(b*x)+c*np.sin(d*x))
fig, ax = plt.subplots(2,2)
for i in range(4):
pattern,arr=('b-',y[i+1]) if i!=3 else ('c-',np.sum(y,axis=0))
plt.subplot(2,2,i+1)
if i!=3:
plt.xlabel("n=%d"%(i+1))
else:
plt.xlabel("Total")
plt.xticks(tick,label)
plt.plot(x,arr,pattern)
plt.show()