我需要计算导致一个气象气球的力量与一个特定的数量上升。在搜索了好几个小时,我发现所需的公式,可用于计算在一定高度的压力。(令人惊讶的是,在给出的公式德国比从维基百科提供更好的价值英语一个)
这是需要空气的密度,然后可以使用阿基米德原理的浮力气球的高度。
然而,它的公式只返回有效值表示,海拔高达11公里。有没有一种方法来计算空气压力在一个更高的高度吗?
江南体育网页版地球科学堆栈交换是一个问答网江南电子竞技平台站对于那些感兴趣的地质学、气象学、海洋学、环境科学。注册只需要一分钟。
报名加入这个社区我需要计算导致一个气象气球的力量与一个特定的数量上升。在搜索了好几个小时,我发现所需的公式,可用于计算在一定高度的压力。(令人惊讶的是,在给出的公式德国比从维基百科提供更好的价值英语一个)
这是需要空气的密度,然后可以使用阿基米德原理的浮力气球的高度。
然而,它的公式只返回有效值表示,海拔高达11公里。有没有一种方法来计算空气压力在一个更高的高度吗?
原始的描述我们。1976年标准大气结果包括更多和详细的信息比维基百科文章。最后,我现在已经找到了工作使用固定变量H_b,美元\ rho_b,美元T_b L_b美元,美元的确定标准的高度,(空气)密度、温度和温度梯度层b美元,分别。足够的概述这些值可以在找到维基百科。
这种方法给了非常准确的结果,适合提供的值等密度的振荡。
似乎没有中央参考标准温度和大气压力在高海拔地区。下面是我写的代码结合两个资源后,可以在评论里找到。这c++代码计算标准大气压力一直到86公里。
浮动getStandardPressure(浮子高度/ *米* /)/ /返回Pa{/ /低于51公里:实际气象罗兰横梁,pg 12 / / 51公里以上:http://www.braeunig.us/space/atmmodel.htm / /验证数据:https://www.avs.org/avs/files/c7/c7edaedb - 95 b2 - 438 f - adfb - 36 de54f87b9e.pdf高度=高度/ 1000.0 f;/ /转换成米公里浮geopot_height = getGeopotential(高度);浮动t = getStandardTemperature (geopot_height);如果(geopot_height < = 11)返回101325 *战俘(288.15 f / t、-5.255877 f);else if (geopot_height < = 20)返回22632.06 * exp (-0.1577 f * (geopot_height - 11));else if (geopot_height < = 32)返回5474.889 f *战俘(216.65 f / t、34.16319 f);else if (geopot_height < = 47)返回868.0187 f *战俘(228.65 f / t、12.2011 f);else if (geopot_height < = 51)返回110.9063 f * exp (-0.1262 f * (geopot_height - 47));else if (geopot_height < = 71)返回66.93887 f *战俘(270.65 f / t、-12.2011 f);else if (geopot_height < = 84.85)返回3.956420 f *战俘(214.65 f / t、-17.0816 f); throw std::out_of_range("altitude must be less than 86km. Space domain is not supported yet!"); } //geopot_height = earth_radius * altitude / (earth_radius + altitude) /// all in kilometers //temperature is in Kelvin = 273.15 + celcius float getStandardTemperature(float geopot_height) { //standard atmospheric pressure //Below 51km: Practical Meteorology by Roland Stull, pg 12 //Above 51km: http://www.braeunig.us/space/atmmodel.htm if (geopot_height <= 11) //troposphere return 288.15f - (6.5 * geopot_height); else if (geopot_height <= 20) //Staroshere starts return 216.65f; else if (geopot_height <= 32) return 196.65f + geopot_height; else if (geopot_height <= 47) return 228.65f + 2.8 * (geopot_height - 32); else if (geopot_height <= 51) //Mesosphere starts return 270.65f; else if (geopot_height <= 71) return 270.65f - 2.8 * (geopot_height - 51); else if (geopot_height <= 84.85) return 214.65f - 2 * (geopot_height - 71); //Thermospehere has high kinetic temperature (500c to 2000c) but temperature //as measured by thermometer would be very low because of almost vaccume throw std::out_of_range("geopot_height must be less than 85km. Space domain is not supported yet!"); } float getGeopotential(float altitude_km) { constexpr float EARTH_RADIUS = 6356.766; //km return EARTH_RADIUS * altitude_km / (EARTH_RADIUS + altitude_km); }