势垒贯穿
这一节研究一下量子力学里的势垒贯穿。为了完整运行本节 python 程序,需要将本文最后封装的 QuantumTunnel 类 copy 到 jupyter notebook 的最前面。
首先使用 np.heaviside 函数定义几个常见的势垒。heaviside(x, 0.5) 有两个参数,第一个参数 x 是一个数组,函数对 x < 0 区域返回 0,x>0 的区域返回 1,x==0 返回 0.5。
# 三种势垒的定义
def barrier(x, avgE=2.06, shape="square"):
'''shape: {square, heavyside, well}'''
L = x[-1] - x[0]
if shape == 'square':
pot = (np.heaviside(x - 0.45 * L, 0.5)-np.heaviside(x - 0.55 * L, 0.5)) * avgE
elif shape == 'heavyside':
pot = np.heaviside(x - 0.5 * L, 0.5) * avgE
elif shape == 'well':
pot = (np.heaviside(x - 0.55 * L, 0.5)-np.heaviside(x - 0.45 * L, 0.5)) * avgE
return pot
使用上面这段代码,可以定义3种不同形状的势垒。先看下面这种阶梯状势垒,
%matplotlib inline
pot = lambda x: barrier(x, shape='heavyside')
# 注意 QuantumTunnel 类在文章的最后提供
qt = QuantumTunnel(potential_wall = pot)
qt.plot_potential()
初始波包的位置在 x=20 附近。波函数和概率密度如下图所示,
qt.plot_wave_packet()
调用类 QuantumTunnel 对象