我希望能够用动画展示波函数的时间演化,但又不想每次都计算所有时间步骤,因为这样会花费大量时间,而是要将上一个波函数值作为初始值。我不知道如何使用 animation.FuncAnimation
实现这个功能。
import numpy as np
from matplotlib import animation
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
wavefunction_0 = some array
def next_wavefunction(wavefunction_init):
wavefunction = time_propagation(Psi = wavefunction_init)
return wavefunction
def animate(framenumber, wavefunction, surf):
if framenumber == 0:
wavefunction = wavefunction_0
else:
wavefunction = next_wavefunction(wavefunction)
ax.clear()
surf = ax.plot_surface(X, Y, np.reshape(np.abs(wavefunction), (space_shape)), rstride=1, cstride=1, linewidth=0, antialiased=False, cmap='jet', edgecolor='none')
return surf, wavefunction
anim = animation.FuncAnimation(fig, animate, fargs=(wavefunction, surf),
interval=200, blit=False)
目前它不工作,因为fargs = wavefunction
但是animate(...)
的返回值是wavefunction
。是否可以将animate
的返回值作为fargs
传递?