这是密码
import scipy as sc
import scipy.optimize as sco
def g(rho):
return 0.5 * (rho**2 + rho) * sc.exp(-rho)
p = 0.01017036
guess = 1.5879245860401234
sol = sco.fsolve(lambda rho: g(rho) - p, guess, full_output=True)
print g(sol[0]) - p
print sol
输出是
^{pr2}$它说它会聚了,但显然没有,因为我应该使g(sol[0]) - p
比0.4
更接近于零
我认为用于产生错误的收敛性测试有问题。我知道我可以改变猜测并得到正确的解,但事实并非如此(我必须找到数千个根,我得到了很多这些假根),问题是错误捕捉算法不可靠。我做错什么了吗??在
提前谢谢。在
您正在最小化目标函数,而不是查找根,而应该使用
optimize.fmin
:这也可能与一个错误的猜测有关:
^{pr2}$可能收敛性是由雅可比函数决定的,而你的}的雅可比是相同的。而
guess
不知何故导致雅可比矩阵落在一个奇怪的地方。注意,rho=8.22399478
和{1.58792459
正是最初的猜测。由于某些原因,fsolve
似乎永远不会偏离最初的猜测。在相关问题 更多 >
编程相关推荐