如何用while循环求解给定温度下普朗克函数的峰值波长
用while循环寻找普朗克函数峰值波长的Python实现
问题分析
我们需要通过遍历波长(从200nm开始,步长5nm),计算每个波长对应的普朗克辐射值,跟踪最大值对应的波长,直到辐射值开始下降(普朗克函数随波长增加呈先增后减的趋势),从而确定峰值波长。
普朗克函数实现
采用波长形式的普朗克公式,统一单位后计算辐射出射度:
import math def planck(lambda_nm, temp): # 物理常数 h = 6.626e-34 # 普朗克常数,J·s c = 3e8 # 光速,m/s k = 1.38e-23 # 玻尔兹曼常数,J/K # 波长转换为米 lambda_m = lambda_nm * 1e-9 # 计算分子部分 numerator = 2 * h * c**2 / lambda_m**5 # 计算指数项 exponent = h * c / (lambda_m * k * temp) # 计算分母部分 denominator = math.exp(exponent) - 1 return numerator / denominator
主程序逻辑(while循环实现)
# 给定参数 temperature = 13000 # 温度,K start_lambda = 200 # 初始波长,nm step = 5 # 步长,nm # 初始化变量 current_lambda = start_lambda prev_radiance = planck(current_lambda, temperature) # 移动到下一个波长,初始化当前辐射值 current_lambda += step current_radiance = planck(current_lambda, temperature) # 记录峰值信息 peak_lambda = current_lambda if current_radiance > prev_radiance else start_lambda max_radiance = current_radiance if current_radiance > prev_radiance else prev_radiance # 进入while循环,直到辐射值开始下降 while True: next_lambda = current_lambda + step next_radiance = planck(next_lambda, temperature) if next_radiance > current_radiance: # 辐射值仍在上升,更新状态 prev_radiance = current_radiance current_radiance = next_radiance current_lambda = next_lambda # 更新峰值记录 if current_radiance > max_radiance: max_radiance = current_radiance peak_lambda = current_lambda else: # 辐射值开始下降,退出循环 break # 输出结果 print(f"温度为 {temperature} K 时,普朗克函数的峰值波长为 {peak_lambda} nm")
运行结果说明
根据维恩位移定律,理论峰值波长约为 2898000 / 13000 ≈ 222.9 nm,由于采用5nm的步长,程序会找到最接近理论值的225nm作为峰值波长,这是符合步长精度的合理结果。
内容的提问来源于stack exchange,提问作者Nishtha Kothari
相关产品推荐
相关产品推荐

