観測者から太陽までの視線上の障害物によって、いつ影が投じられるかを知りたいです。
だから私は、太陽が観測者に対して空の特定の場所にある日付/時刻を逆算したいと思います。(特定の年のすべての発生)。
PyEphem を使用すると、反対のことを行うのは非常に簡単です。観測者の位置 (緯度、経度) と時間については、太陽の位置を計算します。これを逆にするのは簡単ではないのではないかと思います。
この問題の解決策を探しましたが、見つかりません。どんな助けでも大歓迎です。
ありがとう
これは、さまざまな数学的モデルで興味深い非対称性を引き起こします。つまり、自然な「前方」方向があり、時間tで予想される値 (太陽の高度や方位角の値など) を計算できます。しかし、式を逆方向に解いたり表現したりする簡単な方法はありません。
そのため、最適化、ルート検索、カーブ フィッティングなどのさまざまな手法を使用して、さまざまな推測を「フォワード」式に投入し、結果を確認して、出力が必要な値に十分近くなるまで入力を調整します。
PyEphem の日の出、日の入り、分点などのルーチンの内部を見ると、ニュートン法と呼ばれるものを使用して一致する状況を繰り返し検索する例が表示されます。
太陽が高度 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
そのため、太陽高度が 20 度に非常に近い瞬間を正しく検出します。これは、Netwon 関数が分析する関数のゼロクロッシングを探し、Netwon 関数に表示させる前に高度から 20° を差し引いているためです。
newton()
最適化が使用する反復プロセスの使用方法と制御方法について詳しく知りたい場合は、最適化に関するオンラインのリソースがたくさんあります。また、上記で使用した壊れやすい小さな方法の代わりに使用したい最適化をサポートするいくつかの非常に優れた SciPy ルーチンもあります。PyEphem に組み込まれています。