scipy.optimize.fsolve会聚错误?

2024-04-27 17:45:24 发布

您现在位置:Python中文网/ 问答频道 /正文

这是密码

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]) - p0.4更接近于零

我认为用于产生错误的收敛性测试有问题。我知道我可以改变猜测并得到正确的解,但事实并非如此(我必须找到数千个根,我得到了很多这些假根),问题是错误捕捉算法不可靠。我做错什么了吗??在

提前谢谢。在


Tags: import密码returndefas错误scipyoptimize
1条回答
网友
1楼 · 发布于 2024-04-27 17:45:24

您正在最小化目标函数,而不是查找根,而应该使用optimize.fmin

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.fmin(lambda rho: (g(rho)-p)**2, guess)

print sol
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 23
         Function evaluations: 46
[ 8.2240227] 

这也可能与一个错误的猜测有关:

^{pr2}$

可能收敛性是由雅可比函数决定的,而你的guess不知何故导致雅可比矩阵落在一个奇怪的地方。注意,rho=8.22399478和{}的雅可比是相同的。而1.58792459正是最初的猜测。由于某些原因,fsolve似乎永远不会偏离最初的猜测。在

相关问题 更多 >