2014-01-28 44 views
1

我很想知道在陰影將通過對視線從觀測到太陽的線路的障礙物投什麼時間(s)。給定的位置,計算出一天的時間觀察

所以我想回計算日期/時間太陽是相對於觀察者天空中的特定位置。 (特定年份的所有事件)。

使用PyEphem它非常簡單做相反的;對於一個觀察者位置(拉特,長)和時間計算太陽的位置 - 這讓我想知道爲什麼它不簡單做相反?

我獵殺繞瞭解決這個問題,我無法找到一個。任何幫助將不勝感激。

感謝

回答

0

這帶來了一個有趣的不對稱性在各種數學模型 - 他們有一個天然的「向前」的方向發展,使我們可以在時間計算我們所期望的值是(就像太陽的高度或方位角的值一樣),但沒有簡單的方法來解決或表達另一方向的公式。因此,我們使用一系列技術,如優化,根發現和曲線擬合,我們在「前向」公式中拋出不同的猜測並查看出現的結果,調整輸入直到輸出足夠接近我們需要的價值。

如果您在PyEphem內部查看諸如日出,日落和分點等事件的例程,您會看到使用稱爲Newton方法的迭代搜索匹配環境的示例。

同樣的技術可以被用於確定的其他情況的時候,如:當是太陽在20℃高度?

import ephem 

boston = ephem.Observer() 
boston.lat = '42.37' 
boston.lon = '-71.03' 
boston.date = '2014/1/29 03:12:47' 

sun = ephem.Sun() 
sun.compute(boston) 
print 'Starting altitude:', sun.alt 

def f(x): 
    boston.date = x 
    sun.compute(boston) 
    return sun.alt - ephem.degrees('20.0') 

x = boston.date 
print 'Searching for the correct time...' 
ephem.newton(f, x, x + 0.01) 
print 'At the time and date', boston.date 
print 'the solar altitude is', sun.alt 

這個腳本的輸出是:

Starting altitude: -57:02:36.3 
Searching for the correct time... 
At the time and date 2014/1/28 19:30:49 
the solar altitude is 20:00:00.0 

因此,正確認定的那一刻,當太陽高度是非常,非常接近二十度 - 因爲Netwon功能尋找的過零點他們分析的功能,在讓Netwon功能看到它之前,我們在高度上減去20°。

如果你想了解更多關於如何使用和控制它所使用的迭代過程的知識,還有大量關於優化的資源,還有一些非常好的SciPy例程支持你可能想要使用的優化,而不是脆弱的上面所用的小newton()方法已內置到PyEphem:

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

+0

感謝分享這一點 - 它是非常有用的!我一直在研究這種方法,但我很困惑,在上面的代碼示例中,如果輸入的不是整數(例如20.5),則返回的sun.alt會偏移一個度數。在這種情況下,它返回以下結果;開始高度:-57:02:36.3 搜索正確的時間... 在時間和日期2014年1月28日19時26分27秒 太陽高度角爲20:30:00.0我是不是犯了一個錯誤,也許從某個角度轉換成rad? – user3246379

+0

不,它看起來像你的代碼是完美的 - 「20:30:00」的措施意味着20°30'00''正好是20.5,因爲30分鐘是半小時(60分鐘)。 –