绘制放射性同位素功率输出指数曲线出错,请求技术协助
问题解决:放射性同位素功率随时间变化曲线绘制
核心问题分析
你的代码存在三个关键问题,导致无法输出正确的指数衰减曲线:
- 时间单位不匹配:你将衰减常数λ转换为秒⁻¹,但时间
t仅取0-49秒。对于半衰期5.27年的Co-60来说,这么短的时间内衰减幅度极小,肉眼几乎看不到变化。 - 不必要的
exp手动替代:用2.718**x既存在精度损失,也没必要——math.exp不支持数组运算,但np.exp专门适配numpy数组,完全可以直接使用且不会报错。 - 语法错误:计算
co60的代码末尾多了一个闭合括号,会直接触发语法报错。
修正后的代码
import matplotlib.pyplot as plt import numpy as np # 定义常数,用科学计数法更简洁清晰 ln2 = 0.693 avon = 6.02214076e23 mev_to_j = 1.6e-13 half_life_years = 5.27 # 生成时间序列:0到20年,取100个点让曲线更平滑 t = np.linspace(0, 20, 100) # 计算年衰减常数λ,和时间单位统一 lambda_decay = ln2 / half_life_years # 拆分计算:先算初始功率P0,再乘以衰减项e^(-λt) P0 = (lambda_decay * avon * mev_to_j * 2.505) / 60 co60_power = P0 * np.exp(-lambda_decay * t) plt.plot(t, co60_power, label='Co-60') plt.xlabel('时间 (年)') plt.ylabel('功率 (W)') plt.legend() plt.grid(True) plt.show()
关键调整说明
- 单位统一:将衰减常数λ和时间
t统一为年,这样能直观看到Co-60的衰减趋势(20年约为3.8个半衰期,功率会降到初始值的6%左右)。 - 使用
np.exp:numpy的exp函数支持数组批量运算,避免手动幂运算的精度问题,代码逻辑也更清晰。 - 拆分计算步骤:把初始功率
P0和衰减项分开计算,便于排查公式转译错误。 - 平滑时间序列:用
np.linspace生成更多时间点,让绘制的曲线更顺滑。
额外提示
如果一定要用秒作为时间单位,需要将t设置为足够大的范围(比如覆盖0到4个半衰期,每天取一个点:np.arange(0, 5.27*365*24*3600*4, 86400)),同时保持λ的单位为秒⁻¹,也能得到正确的衰减曲线,但数值会极大,需要注意坐标轴刻度设置。
内容的提问来源于stack exchange,提问作者fissile_uranium
相关产品推荐
相关产品推荐

