6
import numpy as np
from scipy.optimize import fsolve

musun = 132712000000
T = 365.25 * 86400 * 2 / 3
e = 581.2392124070273


def f(x):
    return ((T * musun ** 2 / (2 * np.pi)) ** (1 / 3) * np.sqrt(1 - x ** 2)
        - np.sqrt(.5 * musun ** 2 / e * (1 - x ** 2)))


x = fsolve(f, 0.01)
f(x)

print x

このコードの何が問題になっていますか? うまくいかないようです。

4

2 に答える 2

7

fsolve()の根を返しますf(x) = 0(こちらを参照)。

f(x)-1 から 1 の範囲でforの値をプロットすると、とxに根があることがわかりました。ただし、またはの場合、両方の関数に負の引数が渡されるため、エラーが発生します。x = -1x = 1x > 1x < -1sqrt()invalid value encountered in sqrt

fsolve()関数の有効範囲の最後にあるルートを見つけられないことは驚くことではありません。

関数の根を見つける前に関数のグラフをプロットすることは常に良い考えであることがわかりました.アルゴリズム。

于 2013-04-14T06:06:49.190 に答える