【发布时间】:2019-07-09 22:54:52
【问题描述】:
我正在尝试使用 scipy.optimize.fsolve() 求解使函数等于零的 x,但不断收到上述错误。我的代码是:
import scipy.optimize as optimize
from scipy.stats import genextreme as gev
gevcombined = [(-0.139, 3.035, 0.871),(-0.0863, 3.103, 0.818),(-0.198, 3.13, 0.982)]
ratio = [0.225, 0.139, 0.294]
P = [0.5,0.8,0.9,0.96,0.98,0.99]
def mixedpop(x):
for j in range(len(ratio)):
F = (ratio[j]*gev.cdf(x,gevcombined[j][0],gevcombined[j][1],gevcombined[j][2]))+((1-ratio[j]*gev.cdf(x,gevcombined[j][0],gevcombined[j][1],gevcombined[j][2]))-P
return F
initial = 10
Rm = optimize.fsolve(mixedpop,initial)
我不断收到错误:
ValueError:the array returned by a function changed size between calls
这个错误是什么意思?预期输出将是每个 P 值的值。因此,对于每个比率,来自 Rm 的 x 值将等于 [3.5, 4, 5.4, 6.3, 7.2, 8.1]
【问题讨论】:
-
fsolve首先调用具有initial值的函数,例如mixedpop(10)。然后它会尝试其他值,mixedpop(x)。我不会尝试运行您的代码,但听起来F的形状可能会随x的值而变化。
标签: python optimization scipy