方程式の根を見つけるために、scipy の optimize.fsolve 関数を初めて使用しています。問題は、推測/推定値として使用する数値が、答えとして返されるものであることです (小数点以下約 8 桁以内)。full_output=True を使用すると、exitflag が「1」になります。これは、「解が収束した」ことを意味し、私の理解では、出力が実際に方程式の根であることを意味するはずです。
方程式をグラフにすると、それらを見ることができるように、有限数の別個の根 (間隔を空けて配置されている) があることを知っています。また、未定義の値 (ゼロで除算、負の値の平方根) を返す必要がある範囲内に開始点を入力すると、fsolve が失敗します (エラー exitflags が表示されます)。ただし、それ以外は常に開始点をルートとして返します。
非常に単純な方程式で fsolve をテストしたところ、問題なく動作したので、必要なものをすべてインポートしており、fsolve を正しく使用する必要があることがわかりました。また、いくつかの入力引数をいじってみましたが、よく理解できず、何も変わっていないようです)。
以下は関連するコードです (E は唯一の変数で、それ以外はすべてゼロ以外の値です)。
def func(E):
s = sqrt(c_sqr * (1 - E / V_0))
f = s / tan(s) + sqrt(c_sqr - s**2)
return f
guess = 3
fsolve(func, guess)
最も近い解は約 2.8 と 4.7 であるはずですが、「3」を出力し、「解が収束しました。」と表示されます。
これを修正して正しい答えを得る方法を知っている人はいますか (fsolve を使用)?