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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:43:17