【发布时间】:2011-12-19 13:31:36
【问题描述】:
我第一次使用 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)?
【问题讨论】:
-
也许你只是一个很好的猜测者。
-
您能提供
V_0和c_sqr的值吗?我试着把c_sqr = 100和V_0 = 10,它正确地收敛到根2.90496355。
标签: python scipy equation-solving