SymPy求解准经典拉比振荡微分方程后绘图失败如何修复
报错原因
plot函数传入的sol[0]是SymPy的等式对象(sp.Eq),而非可计算的表达式,参数校验不通过导致plot_expr返回None,触发迭代报错- 求解结果中仍有未赋值的自由符号
h、V12、V21,没有具体数值无法完成绘图所需的数值计算 - 微分方程的解为复数形式,直接绘图无法处理复数输出,物理场景下我们需要观测的是能级布居数,即振幅的模平方(实数值)
修正代码
直接替换原绘图代码为以下内容即可正常出图:
# 1. 代入物理参数,此处采用自然单位制,设置耦合强度V12=V21=1,约化普朗克常数hbar=1 params = {h: 1, V12: 1, V21: 1} # 2. 提取解的表达式部分,计算两个能级的布居数(模平方) a1_pop = sp.Abs(sol[0].rhs.subs(params))**2 a2_pop = sp.Abs(sol[1].rhs.subs(params))**2 # 3. 绘制拉比振荡曲线 plot( a1_pop, a2_pop, (t, 0, 10), legend=True, label=['能级1布居数', '能级2布居数'], xlabel='时间t', ylabel='布居数' )
运行后即可得到标准的拉比振荡曲线,可观测到两个能级的布居数随时间周期性反转。
内容的提问来源于stack exchange,提问作者Sora S
相关产品推荐
相关产品推荐

