python - 滑块实时变化波包动画 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
动画在初始矩阵值下运行良好,但滑块的变化不会影响动画
解决方案
推荐阅读
- java - 如何比较两个不同的列表列表?
- python - CSV -> JSON -> PostgreSQL“令牌无效”
- c# - MySqlConnection ADO.Net 高 CPU 使用率
- ms-access-2013 - RecordSet2 与 RecordSet DAO.Recordset 不匹配
- c++ - std::atomic 发生了什么
::值类型? - jquery - 使用 jquery 验证插件验证数组输入 - 为第一个输入添加一个错误
- python - Keras中的变分辍学
- java - 使用回收视图时如何突出显示单个文本和背景颜色
- excel - 如何在 2 个表中搜索特定值并使用 VBA 复制到新工作表
- javascript - 将 javascript array.map 转换为 php array_map