3

私はPyEphemを使用して、さまざまな時点での空の太陽の位置を計算しています。

私はオブザーバーポイント(Stonehengeにある可能性があります)を持っており、PyEphemを使用して、日の出、日の入り、および1日の任意の時間の太陽の高度角度と方位角(北からの角度)を計算できます。素晴らしい、問題ありません。

しかし、私が本当に必要としているのは、既知の方位角から太陽の高度角を計算できるようにすることです。したがって、同じオブザーバーポイント(long / lat / elev / date(時間ではなく、yy / mm / ddのみ))と太陽の方位角を設定します。そして、この入力から、太陽の高度とその方位角にある時間を計算します。

Sun.dateとSun.azを設定して、これらの値から逆方向に作業できることを望んでいましたが、残念ながら。PyEphemでこれにアプローチする方法(そしてそれがアプローチ可能であるかどうか)について何か考えはありますか?

私が利用できると思っている他の唯一のオプションは、私が望む方位角の誤差の範囲内に入るまで、一連の時間にわたって反復することによって方位角に「忍び寄る」ことですが、それはただひどいです。

よろしくお願いします、デイブ

4

2 に答える 2

2

天文学ソフトウェアは、地球と太陽の位置を JPL で予測することにより、太陽の位置を予測します。JPL は、特定の日付範囲をカバーする一連の多項式として表現します。「太陽が方位角zにあるのはいつですか?」と尋ねると、は、それぞれ異なる速度で変化する 3 つの異なる多項式 (太陽の多項式、太陽の周りを回転する地球と月の重心、および重心の周りを回転する地球の多項式) がたまたま、正確に特定の角度に2つの位置。

そして、その問題は「大まかな」数学の問題、または専門家が言うように「非閉形式解問題」のクラスに分類されることが判明しました。しかし、私はあなたの「グロス」という言葉が好きです。なぜなら、世界の多くが単に答えを出すのではなく、試行錯誤によって取り組まなければならないことを発見したとき、私たちのほとんどがどのように感じるかを非常によく表しているからです。

幸いなことに、「この大きくて複雑な関数が正確に値zに到達するのはいつですか?」と尋ねる標準的な方法があるという意味で、十分に広大な科学の見本は「粗雑」です。ますます人気が高まっている Python の科学ライブラリである SciPy をインストールして試すことができれば、それぞれが異なる戦術を使用してソリューションに忍び寄るルーチンのコレクション全体が含まれていることがわかります。もう 1 人の回答者は、そのような戦術の 1 つ (試行ごとに検索スペースを半分にする) をすでに特定していますが、これは一般的に最も遅い (極端なケースでは最も安全な) アプローチです。ここにいくつかの他のものがあります:

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

太陽の方位角が必要な方位角から「どれだけ離れているか」を返す小さな関数を作成します。t方位角が正確に正しい場合、関数は最終的にゼロを返します。

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

次に、その SciPy ページの「ルート検索スカラー関数」の 1 つを試してください。このbisect()関数は、他の回答者が示唆するように、検索スペースを半分に切り詰めて絞り込みます。しかし、私の推測では、ニュートン法の方がはるかに「グロス」でなく、はるかに高速であることがわかると思います —newton()またはbrentq()を試してみて、何が起こるか見てください!

于 2013-02-25T00:07:28.777 に答える
0

PyEphem が実行している内部計算の詳細を知らなければ、それらの計算を逆にして必要な結果を得ることがどれほど簡単か難しいかわかりません。

ただし、「忍び寄る」オプションに関しては、方位角が目的の値のいずれかの側 (一方が大きく、もう一方が小さい) であることがわかっている 2 つの開始時刻 (日の出と正午など) を選択できます。次に、単純な「間隔を半分にする」アプローチを使用して、おおよその解決策をすばやく見つけます。

于 2013-02-24T21:12:02.867 に答える