2012-02-13 120 views
1

私は、デカルト座標をケプラー要素に収束させるコードを書き込むためのscipyを使っています。私はエラーを取得するpython scipy.optimize.newtonは収束しないと言っていますが、それはそうだと思われます

self.f = lambda x: x-self.e*scipy.sin(x)-self.M 
self.df= lambda x: 1-self.e*scipy.cos(x) 

全体のコードを実行している

E = scopt.newton(self.f, self.M, self.df, args=(), tol=10^(-10), maxiter=10000) 

RuntimeError: Failed to converge after 10000 iterations, value is 5.25182613825 

私が実行している場合、私は次の式を使用しケプラーにデカルト変換するための

それはより少ない繰り返し(50)のために、私は得る:

RuntimeError: Failed to converge after 50 iterations, value is 5.25182613825 

2つの値を比較すると、明らかに収束します。許容値を10 ^(-2)に減らしても、私はまだ同じ実行時エラーが発生します。

誰もこのエラーが発生する理由を知っていますか?

+0

51回繰り返し実行すると、同じ値になりますか?それとも、2つの値を反転していますか? – WolframH

+0

RuntimeError:51回の反復後に収束できませんでした。値は5.25182613825なので、同じ値です... –

+1

5.25182613825は正しい解決法ですか? self.eとself.Mの値は何ですか? –

答えて

8

Pythonのべき乗演算子は**です。 tol=10**(-10)または1E-10を使用してください。

^はビット単位でXORです。

+0

ありがとうございます!これは私の問題を解決した –

関連する問題