Korzystam z pakietu FuncAnimation, aby utworzyć film z gaszącego falą gaussowską kolidującego z potencjalną barierą przy użyciu metody real-space z różnicą skończoną do rozwiązania równania Schrodingera. Odpowiedni kod znajduje się poniżej. Zasadniczo, kiedy go uruchomię, wszystko działa dobrze - pojawia się film pokazujący dokładnie to, czego chcę. Jednak zmiana argumentu "frames =" nie zmienia faktycznie liczby klatek. Możesz zobaczyć, że drukuję bieżącą iterację w mojej funkcji animacji. Ten licznik idzie do liczby określonej w "frames =", ale potem wraca do zera i kontynuuje. Animacja działa dalej niż określono. Nawet jeśli określę "frames = 1", film będzie trwać w nieskończoność (próbowałem zostawić go uruchomionego na popołudnie). Nie jestem pewna, co się dzieje, ale jestem pewien, że to głupie.FuncAnimation przechodzi obok argumentu klatek
# Set up the matplotlib figure and axes
fig = plt.figure()
ax = plt.axes(xlim = (0, hamiltonian.L), ylim = (0, 3))
line, = ax.plot([], [], lw = 2)
time_text = ax.text(.02, .95, '', transform=ax.transAxes)
ax.grid()
def init():
"""initialize the animation"""
line.set_data([], [])
time_text.set_text('')
return line, time_text
def animate(i):
"""actually perform the animation"""
print i
global hamiltonian, wavepacket
hamiltonian.propagate(wavepacket)
line.set_data(wavepacket.x, wavepacket.psi_sq)
time_text.set_text('time = %.3f' % wavepacket.time_elapsed)
return line, time_text
# Now call the animator
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=100, interval=1, blit=False)
#anim.save('gaussian_reflection.mp4', fps=150, extra_args=['-vcodec', 'libx264'])
plt.show()
rozwiązany, dzięki. –