You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计算玻尔兹曼方程并绘图出现Overflow Error,Second_factor溢出求替代方案

问题原因

  • 单位换算错误:计算用的能量DE单位是电子伏特(eV),而玻尔兹曼常数K的单位是焦耳/开尔文(J/K),两者单位不统一,导致DE/(K*T)的计算结果比实际值大了近10^19倍,指数运算直接超出浮点数范围触发溢出错误。
  • 列表索引错误:你构造的n列表存储的就是1到100的能级值,循环for i in n时直接用i即可,不需要再写n[i],否则会出现索引越界或者取值错误的问题。
  • 指数运算精度问题:直接用pow(2.71828, x)的精度远低于Python内置的math.exp(x),也更容易触发精度溢出。

可行解决方案

第一步:补充eV到J的单位换算

1eV = 1.602×10^-19 J,计算DE后乘以这个换算系数统一单位。

第二步:修正列表索引逻辑

直接用循环变量i作为能级值,不需要额外索引n列表。

第三步:极端参数场景可选优化

如果需要计算极低温或者极高能级的场景,可以先对玻尔兹曼分布取对数计算,最后再做指数还原,或者使用numpy的高精度浮点运算处理。

修正后可运行代码

import matplotlib.pyplot as plt
import math

n = []
NnN1 = []
n2i = 2
K = 1.38 * (10 ** -23)
eV_to_J = 1.602 * (10 ** -19) # eV转J单位换算系数

# 构造能级列表
for i in range(1, 101):
    n.append(i)
T = 100
for i in n:
    DE = -13.6 * (1 / (i ** 2) - 1 / n2i) * eV_to_J # 补充单位换算
    gn = 2 * (i ** 2)
    Dg = gn / n2i
    Second_factor = math.exp(DE/(K*T)) # 改用高精度exp函数
    Nn = Dg * Second_factor
    NnN1.append(Nn)

# 绘制分布图像
plt.plot(n, NnN1)
plt.xlabel("能级n")
plt.ylabel("Nn/N1")
plt.show()
print(NnN1)

内容的提问来源于stack exchange,提问作者FTL WRATH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:39:03