Bokeh可视化:使用LaTeX数学公式绘制薛定谔方程解
概述
本文将介绍如何使用Bokeh库可视化一维谐振子的量子力学波函数解。这个示例展示了如何在Bokeh图表中使用LaTeX数学公式来标注图表标题和轴标签,特别适合需要展示复杂数学表达式的科学可视化场景。
技术要点
- Bokeh的数学公式支持:通过LaTeX语法在图表中添加数学表达式
- 量子力学可视化:展示谐振子波函数的数学特性
- 高级图表布局:多行标题、精确标签定位等技巧
实现细节
1. 创建基础图表
首先创建一个宽度800像素、高度600像素的图表,设置x轴范围为[-6,6],y轴范围为[0,8],并隐藏y轴和网格线:
p = figure(width=800, height=600, x_range=Range1d(-6, 6), y_range=Range1d(0, 8))
p.xaxis.axis_label = r"$$q$$" # 使用LaTeX语法设置x轴标签
p.yaxis.visible = False
p.xgrid.visible = False
p.ygrid.visible = False
2. 添加多行数学标题
使用Bokeh的Title
模型添加多行包含LaTeX数学表达式的标题:
title = [
r"Wave function $$\psi_v(q)$$ of first 8 mode solutions...",
r"Each wave function is labelled with its quantum number...",
r"in a potential $$V(q) = \frac{q^2}{2}$$ shown by the dashed line.",
]
for text in reversed(title):
p.add_layout(Title(text=text, text_font_style="normal"), "above")
3. 计算谐振子波函数
使用SciPy库计算谐振子的前8个能级的波函数:
q = np.linspace(-6, 6, 100)
for v in range(8):
H_v = hermite(v) # 厄米多项式
N_v = (np.pi**0.5 * 2**v * factorial(v))**(-0.5) # 归一化常数
psi = N_v*H_v(q)*np.exp(-q**2/2) # 波函数
E_v = v + 0.5 # 能级
4. 可视化波函数
使用varea
方法填充波函数曲线,并用不同颜色区分波函数的正负部分:
y = yscale*psi + E_v
p.varea(q, np.where(y >= E_v, y, E_v), E_v, fill_color="#5D3A9B") # 正部分
p.varea(q, np.where(y <= E_v, y, E_v), E_v, fill_color="#E66100") # 负部分
p.line(q, y, color="red", line_width=2) # 波函数曲线
5. 添加量子数和能级标签
使用Label
模型在图表两侧添加量子数和能级信息:
p.add_layout(Label(x=-5.8, y=E_v, text=rf"$$v = {v}$$")) # 左侧量子数
p.add_layout(Label(x=3.9, y=E_v, text=rf"$$E_{v} = ({2*v+1}/2) \hbar\omega$$")) # 右侧能级
6. 绘制势能函数
最后添加谐振子势能函数的虚线表示:
V = q**2 / 2
p.line(q, V, line_color="black", line_width=2, line_dash="dashed")
物理背景
这个可视化展示了一维谐振子的量子力学解,其中:
- 横坐标q代表位置
- 纵坐标代表能量本征值
- 每条曲线对应一个量子态(v=0到v=7)
- 曲线形状由厄米多项式和指数衰减因子决定
- 填充区域表示波函数的概率密度
应用场景
这种可视化技术特别适用于:
- 量子力学教学演示
- 科学论文中的图表制作
- 交互式科学计算工具开发
- 物理模拟结果的可视化
总结
通过这个示例,我们展示了Bokeh强大的数学公式渲染能力和科学可视化能力。使用LaTeX语法可以轻松地在图表中添加复杂的数学表达式,这对于科学计算和物理模拟的可视化非常有价值。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考