PyEphem:我可以从方位角计算太阳的高度吗

Posted

技术标签:

【中文标题】PyEphem:我可以从方位角计算太阳的高度吗【英文标题】:PyEphem: can I calculate Sun's altitude from azimuth 【发布时间】:2013-02-09 23:09:40 【问题描述】:

我正在使用 PyEphem 计算不同时间太阳在天空中的位置。

我有一个观察点(恰好在巨石阵),可以使用 PyEphem 计算一天中任何时间的太阳的日出、日落以及高度角和方位角(从 N 开始的度数)。很棒,没问题。

但是,我真正需要的是能够根据已知方位角计算太阳的高度角。所以我会设置相同的观察点(long/lat/elev/date(只是 yy/mm/dd,不是时间))和太阳的方位角。从这个输入中,计算太阳的高度和它在那个方位角的时间。

我曾希望我能够设置 Sun.date 和 Sun.az 并从这些值向后工作,但可惜。关于如何使用 PyEphem 解决这个问题(如果它甚至是平易近人的话)有什么想法吗?

我看到的唯一可用的其他选择是通过迭代一系列时间来“潜入”方位角,直到我达到我想要的方位角的误差范围内,但这只是粗略的。

提前致谢,戴夫

【问题讨论】:

【参考方案1】:

天文学软件通过 JPL 预测地球和太阳的位置来预测太阳的位置,JPL 将其表示为涵盖特定日期范围的一系列多项式。问“太阳什么时候会在方位角z?”正在询问三个不同的多项式,每个多项式都以不同的速率变化(太阳多项式,地球-月球质心围绕太阳旋转,地球围绕质心旋转),将碰巧带来两者之间的差异两个位置精确到某个角度。

而且,事实证明,这个问题属于“严重”数学问题——或者,正如专业人士所说,“非封闭形式的解决方案问题”。但我喜欢你的“恶心”这个词,因为它很好地表达了我们大多数人的感受,当我们发现世界上很多地方都必须通过反复试验来解决,而不是仅仅给我们一个答案。

幸运的是,从这个意义上说,足够广泛的科学样本是“粗略的”,以至于有标准的方法可以问“这个大而复杂的函数何时会达到精确值 z?”如果您能够安装并试用 SciPy,它是越来越流行的 Python 科学库,您会发现它有一整套可以偷偷摸摸解决方案的例程,每个例程都使用不同的策略。另一位回答者已经确定了一种这样的策略——每次试验将搜索空间减半——但这通常是最慢的(尽管在某些极端情况下是最安全的)方法;还有一些其他的:

http://docs.scipy.org/doc/scipy/reference/optimize.html

创建一个小函数,返回太阳方位角距离您想要的方位角的时间t“有多远”,当方位角完全正确时,函数最终将返回零,例如:

def f(t):
    ...        
    return desired_az - sun.az

然后从该 SciPy 页面尝试“求根标量函数”之一。就像其他回答者建议的那样,bisect() 函数将继续将搜索空间减半以缩小范围。但我的猜测是,你会发现牛顿法更不“粗暴”而且速度更快——试试newton()brentq(),看看会发生什么!

【讨论】:

谢谢!我会检查这些并报告我采取的方向。感谢您花时间做出回应。 D【参考方案2】:

在不知道 PyEphem 正在执行的内部计算的详细信息的情况下,我不知道反转这些计算以给出您想要的结果是多么容易或困难。

然而,关于“偷偷摸摸”选项,您可以选择两个开始时间(例如日出和中午),其中方位角已知为所需值的任一侧(一个大于和一个小于)所需值。然后只需使用简单的“将区间减半”方法即可快速找到近似解。

【讨论】:

如果我真的偷偷摸摸,我肯定会考虑“将间隔减半”。谢谢!

以上是关于PyEphem:我可以从方位角计算太阳的高度吗的主要内容,如果未能解决你的问题,请参考以下文章

知道太阳和月亮的中天高度以后,怎么计算日出日落,月出月落的方位

通过OSG实现对模型的日照模拟

学习交流使用函数计算器计算太阳方位测算罗经差的详细过程--来自资深二副的经验之谈

计算两个 GPS 坐标与高度之间的垂直方位

基于iMXRT1052核心板设计的太阳能智能跟踪支架系统解决方案

JavaScript - 计算正午太阳高度