2

次のコード フラグメントを実行します。

import ephem
oma=ephem.Observer()
oma.lat='50.7975189'
oma.lon='4.3579155'
oma.elevation=114.43
oma.epoch=ephem.now()
sun=ephem.Sun(oma)
print "object transit time: ",sun.transit_time
print "observer next transit time: ", oma.next_transit(sun)

これにより、次の出力が得られます。

object transit time:  2012/9/5 11:41:03
observer next transit time:  2012/9/5 11:41:06

したがって、太陽オブジェクトの時間と太陽のオブザーバーについて計算された時間の間には 3 秒の差があります。2つのうち、どちらが最も信頼できますか? これらの値をローカルで計算された値と比較すると、オブザーバーの次の通過時間が最も近くなります。

火星についても同じ計算を行うと、次のようになります。

import ephem
oma=ephem.Observer()
oma.lat='50.7975189'
oma.lon='4.3579155'
oma.elevation=114.43
oma.epoch=ephem.now()
mars=ephem.Mars(oma)
print "object transit time: ",mars.transit_time
print "observer next transit time: ", oma.next_transit(mars)

これにより、次の出力が得られます。

object transit time:  2012/9/5 15:05:32
observer next transit time:  2012/9/5 15:05:32

だから違いはありません。

よろしくお願いします、

大理石

4

2 に答える 2

1

どちらの関数が最も正確かを判断するには、オブザーバーの関数に与えられた 2 つの時間を単純に入力しcompute()、方位角が正確に 180° のときに実際のトランジットの瞬間に最も近い着陸を確認します。

import ephem
oma = ephem.Observer()
oma.lat, oma.lon = '50.7975189', '4.3579155'
oma.elevation = 114.43
sun = ephem.Sun()
for t in ('2012/9/5 11:41:03',
          '2012/9/5 11:41:06'):
    oma.date = t
    sun.compute(oma)
    print 'azimuth at', t, 'was', sun.az

このスクリプトからの出力は11:41:06、新しいnext_transit()関数からの時間がより正確な結果を与えることを示しています。

azimuth at 2012/9/5 11:41:03 was 179:58:45.4
azimuth at 2012/9/5 11:41:06 was 179:59:49.5

古い属性の精度が低い.transit_timeため、現在の PyEphem のドキュメントnext_transit()では、それが機能するすべてのトランジット計算に常に使用することが推奨されています。(これは地球衛星以外のすべてを意味し、.transit_timeとにかく別のアルゴリズムに切り替えます。)

実際、現在のドキュメントでは.next_transit、非地球衛星の を要求することさえ可能であるとは言及されておらず、この属性は古代の下位互換性のためにのみ存在します。

どちらの関数も同じように機能します。時間を推測し、その時点で方位を確認し、答えが気に入るまで何度も推測を修正します。最近のnext_transit()関数はこれをはるかにうまく行うので、それを使用する必要があります。

2 つの関数が火星について同じ答えを出した理由は、単なる偶然です。9 月 5 日以外の日付で火星に対して関数を実行すると、異なる答えが出てくることがわかります。それはすべて、関数が一連の推測を行う順序と、最後の推測がたまたま近くに到達するか、離れて到達するかによって異なります。そして、彼らの答えは9 月 5 日でさえ実際には一致していなかったに違いありません。これら 2 つの回答の完全精度のユリウス日をrepr(float(…))、それぞれの回答の を出力して表示すると、1 秒の分解能で表示できた範囲を超えて、小数点以下の桁まで不一致が見つかることは間違いありません。

それはあなたのすべての懸念をカバーしていますか?

于 2012-09-08T00:10:12.940 に答える
0

これは、transit_timeがオブザーバーに適用されないためです。

私はあなたのコードを改善して変更しました:

from ephem import Observer, Sun, now
oma=Observer()
oma.lat='50.7975189'
oma.lon='40.3579155'
oma.elevation=114.43
oma.epoch=now()
sun=Sun(oma)
print "object transit time: ",sun.transit_time
print "observer next transit time: ", oma.next_transit(sun)

そしてこれは与える:

object transit time:  2012/9/6 09:16:48
observer next transit time:  2012/9/7 09:16:27

さて、なぜlonを4から40に変更するのに1日差(または-11秒)があるのですか?それらのlonとlatはephemでどの単位で表現されていますか?この質問の一部ではないと思います。

于 2012-09-06T09:28:00.537 に答える