基于恒星大小与温度计算宜居带:方程反转出错求助
宜居带计算方程反转错误修正
原行星温度计算函数
原JS函数用于基于恒星温度、半径和行星半长轴估算行星温度:
function calcBodyTempSolar(starTemp, starRadius, bodySemiMajorAxis) { // 基于行星与恒星的距离估算行星温度 return starTemp * Math.sqrt(starRadius/(2 * bodySemiMajorAxis)) * Math.pow(.7, 1/4) }
问题描述
尝试反转上述方程计算宜居带(即给定目标行星温度时,求解对应的行星半长轴),但得到错误结果。自行推导的反转公式为:
(Math.pow(starTemp/(254.58 * Math.pow(0.7, 1/4)), 2) * (starRadius/2))/AU
代入无大气层地球参数(目标温度254.58K、太阳温度5778K、太阳半径1太阳半径)时,预期结果为1AU,但实际得到约1.428AU,推导过程存在错误。
错误根源与正确推导
原方程的数学表达式为:
Tₚ = Tₛ × √(Rₛ/(2a)) × F
其中:
- Tₚ:行星温度
- Tₛ:恒星温度
- Rₛ:恒星半径
- a:行星半长轴
- F = 0.7^(1/4)(反照率相关系数)
我们需要解出a(半长轴):
- 将F移到等式左侧:
Tₚ/F = Tₛ × √(Rₛ/(2a)) - 两边除以Tₛ:
(Tₚ/(Tₛ×F)) = √(Rₛ/(2a)) - 两边平方:
(Tₚ/(Tₛ×F))² = Rₛ/(2a) - 整理求解a:
a = Rₛ × (Tₛ×F/Tₚ)² / 2
对比你的推导,错误在于将F的位置放反了——你使用了(Tₛ/(Tₚ×F))²,而正确的应该是(Tₛ×F/Tₚ)²。
修正后的反转公式
(Math.pow(starTemp * Math.pow(0.7, 1/4) / 254.58, 2) * (starRadius/2))/AU
验证结果
代入无大气层地球参数:
- starTemp=5778K,Math.pow(0.7,1/4)≈0.9146
- 计算得:
(5778×0.9146 /254.58)² × (1/2) /1 ≈ (5285/254.58)² ×0.5 ≈20.76²×0.5≈430.9×0.5≈215.45(太阳半径单位),转换为AU后约1AU,符合预期。
内容的提问来源于stack exchange,提问作者William A. Bohn
相关产品推荐
相关产品推荐

