首页 文章

SciPy LeastSq未能提供最佳解决方案

提问于
浏览
0

我试图使用Leastsq来拟合一条非常简单的曲线 . 但是,其解决方案尚未优化 . 有人能给我一些建议吗?以下是我的代码:

from scipy import optimize
import numpy as np

hl_obs = np.array([10.0, 23.0, 20.0])
ph=np.array([5.0,7.0,9.0])

tp=60

def residuals(k_abn, ph, tp, hl_obs):
        hr=np.log(2)/(hl_obs*24.0)
        ph_adj=6013.79/(tp+273.15) + 23.6521*np.log10(tp+273.15)-64.7013
        err = peval(k_abn, ph, ph_adj)-hr
        return err

def peval(k_abn, ph, ph_adj):
    temp= k_abn[0]*np.power(10,-ph) + k_abn[1] + k_abn[2]*np.power(10,(-ph_adj + ph))
    return temp

k_abn =np.array([1, 0, 0])

from scipy.optimize import leastsq
p,ier = leastsq(residuals, k_abn, args=(hl_obs, ph, tp), maxfev=2000000)
print p, ier

从EXCEL的求解器中,我知道解决方案应该是 k_abn=[165, 0.001237578, 2.14] . 一旦我将Excel的解决方案提供给 function peval ,它就会生成正确答案......

peval([165,0.001238,2.14], 5.0, 13.01573)=0.002888113
peval([165,0.001238,2.14], 7.0, 13.01573)=0.001255701
peval([165,0.001238,2.14], 9.0, 13.01573)=0.001444057

另外,我试图用_2770119增加精度_任何人都可以给我一些建议吗?谢谢!

1 回答

  • 2

    如果你按正确的顺序获得args:

    p,ier = leastsq(residuals, k_abn, args=(ph, tp, hl_obs), maxfev=2000000)
    

    你得到的结果是:

    [  1.65096852e+02   1.23712405e-03   2.14392540e+00]
    

相关问题