我第一次使用 scipy 的 optimize.fsolve 函数来找到方程的根。问题是我用作猜测/估计值的任何数字都是我得到的答案(大约在小数点后 8 位以内)。当使用 full_output=True 时,我得到 exitflag 为“1”,这应该意味着“解决方案收敛”,据我所知,这应该意味着输出确实是等式的根。
我知道有有限数量的不同根(它们是分开的),当我绘制方程时,我可以看到它们。此外,当我将起点输入到应返回未定义值(除以零,负值的平方根)的范围内时,fsolve 失败(给出错误退出标志)。但除此之外,它总是将起点作为根返回。
我用一个非常简单的方程测试了 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)
它只输出“3”并表示“解决方案收敛。”,即使最接近的解决方案应该在 2.8 和 4.7 左右。
有谁知道如何解决这个问题并得到正确的答案(使用 fsolve)?