首页 > 解决方案 > 滑块实时变化波包动画 Matplotlib

问题描述

我的动画很慢,因为更新函数会不断计算一个仅在我移动滑块时才会改变的矩阵:

def evolve(psi0, height, width):
    global psi
    potential = potentialBarrier(height, width)
    tM = timeMatrix(hamiltonian(potential))
    psi = tM.dot(psi0)
    presenceProbability = abs(psi) ** 2
    norm = sum(presenceProbability)
    presenceProbability /= norm
    psi /= norm ** 0.5
    return presenceProbability


def update(frame):
    line.set_ydata(evolve(psi, potentialSlider.val*10, widthSlider.val))
    line2.set_ydata(potentialBarrier(potentialSlider.val, widthSlider.val))
    return

wavePacketAnimation = animation.FuncAnimation(fig, update, interval=5, blit=False)

如何让更新函数在我移动滑块值时计算我的矩阵的新结果,并在我不移动滑块时使用以前的结果?

我试图定义我的全局矩阵,但它没有用。到目前为止我有这个

sliderHasChanged = True
tM = timeMatrix(hamiltonian(potentialBarrierInit))


def evolve(psi0, height, width):
    global tM
    global sliderHasChanged
    if sliderHasChanged:
        potential = potentialBarrier(height * 10, width)
        tM = timeMatrix(hamiltonian(potential))
        sliderHasChanged = False
    global psi 
    psi = tM.dot(psi0)
    presenceProbability = abs(psi) ** 2
    norm = sum(presenceProbability)
    presenceProbability /= norm
    psi /= norm ** 0.5
    return presenceProbability


potentialSlider_ax = fig.add_axes([0.25, 0.15, 0.65, 0.03])
potentialSlider = Slider(potentialSlider_ax, '$V_0$', 0, 1, valinit=0.1)
potentialSlider.label.set_size(15)

widthSlider_ax = fig.add_axes([0.25, 0.1, 0.65, 0.03])
widthSlider = Slider(widthSlider_ax, '$a$', 0, 20, valinit=10.0)
widthSlider.label.set_size(15)


def sliderChange():
    global sliderHasChanged
    sliderHasChanged = True
    return


potentialSlider.on_changed(sliderChange())
widthSlider.on_changed(sliderChange())


def update(frame):
    line.set_ydata(evolve(psi, potentialSlider.val, widthSlider.val))
    line2.set_ydata(potentialBarrier(potentialSlider.val, widthSlider.val))
    return


wavePacketAnimation = animation.FuncAnimation(fig, update, interval=5, blit=False)
wavePacketAnimation.running = True

动画在初始矩阵值下运行良好,但滑块的变化不会影响动画

标签: pythonmatplotlibanimationsliderphysics

解决方案


推荐阅读