如何在python中绘制谐波的总和

2024-06-12 09:03:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面的手动方法来绘制谐波的总和。下面的方法是有效的好吧,拜托参考图片下面。什么时候在for循环中实现了相同的东西,它的工作方式不是想要的。那个for循环意味着要考虑n个谐波数价值观。可以你能帮我吗?在

import numpy as np
import matplotlib.pyplot as plt
# omega =2*pi

x=np.linspace(0,2*np.pi,2000)
y1=np.sin(1*2*np.pi*x)/1
y2=np.sin(3*2*np.pi*x)/3
y3=np.sin(5*2*np.pi*x)/5
y4=np.sin(7*2*np.pi*x)/7
y5=np.sin(9*2*np.pi*x)/9
Y=y1+y2+y3+y4+y5 
plt.plot(x,Y)
plt.grid()
plt.show()

#Implementation in for loop is not working

def Harmonic(i):
    y = [] 
    for n in range(0,i):
        y=np.sin((2*n+1)*(2*np.pi)*(x))/(2*n+1)
        y += y
        plt.plot(x,y)
        plt.grid()
        plt.show()

Harmonics


Tags: 方法importforplotasnppiplt
3条回答

你的意思是这样吗?在

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0,2*np.pi,2000)
y = [0 for _ in x]

def Harmonic(i):
    global y
    global x
    for n in range(0,i):
        y += np.sin((2*n+1)*(2*np.pi)*(x))/(2*n+1)

Harmonic(5)
plt.plot(x,y)
plt.grid()
plt.show()

或者,如果您想使用“绘制图”功能:

^{pr2}$

如果目标是“实时”查看增加谐波数量的影响,您应该使用FuncAnimation

fig,ax = plt.subplots()
x=np.linspace(0,2*np.pi,2000)
y=np.zeros((2000,))
l, = ax.plot(x,y)

def initPlot():
    ax.set_xlim(0,2*np.pi)
    ax.set_ylim(-1,1)
    l, = ax.plot(x,y)
    return l,

def Harmonic(i):
    y=l.get_ydata()
    y += np.sin((2*i+1)*(2*np.pi)*(x))/(2*i+1)
    l.set_ydata(y)
    return l,

anim = animation.FuncAnimation(fig, Harmonic, init_func=initPlot, frames=150, interval=100, blit=True)

下面是一个简单重构的示例:

import numpy as np
import matplotlib.pyplot as plt


def first_solution(N=2000):
    w = 2 * np.pi
    x = np.linspace(0, w, N)

    y1 = np.sin(1 * w * x) / 1
    y2 = np.sin(3 * w * x) / 3
    y3 = np.sin(5 * w * x) / 5
    y4 = np.sin(7 * w * x) / 7
    y5 = np.sin(9 * w * x) / 9
    y = y1 + y2 + y3 + y4 + y5
    plt.plot(x, y)


def second_solution(i, N=2000):
    w = 2 * np.pi
    x, y = np.linspace(0, w, N), []

    harmonics = [np.sin((n * 2 + 1) * w * x) / (n * 2 + 1) for n in range(i)]
    plt.plot(x, sum(harmonics))

plt.figure(1)
plt.subplot(211)
first_solution()
plt.grid()
plt.subplot(212)
second_solution(5)
plt.grid()
plt.show()

我已经给你的工作方法打了第一个_解决方案,第二个解决方案是针对你的有缺陷的方法。希望有帮助

相关问题 更多 >