2014-09-12 17 views
1

我已經將以下腳本放在一起以優化常量公式中的常量。然而,腳本似乎返回了腳本中第二列負值的初始猜測。 將data = data[:,:]更改爲data = data[:,4:]或將數字更改爲正數會使腳本運行。負值腳本中斷scipy.optimize

import pandas as pd 
import numpy as np 
import scipy.optimize 

data=[[2002.0,-0.08972958149990809,1826.0], 
[2003.0,-0.04897683565290298,1892.0], 
[2004.0,-0.07677738137813091,1967.0], 
[2005.0,-0.005302134299962579,1948.0], 
[2006.0,0.018232573476155322,1965.0], 
[2007.0,0.11935334414772003,2040.0], 
[2008.0,0.12924112452811573,2038.0], 
[2009.0,0.2953328281033769,2080.0], 
[2010.0,0.3517136208952717,2104.0], 
[2011.0,0.38644008336056207,2107.0]] 

data = data[:,:] 

def model(p,x): 
    year,gdp = x[:,0],x[:,1] 
    return function(p,gdp,year) 

def function(p,gdp,year): 
    a,b,c,d,i=p 
    y=(a+year*b) * gdp ** (c + year * d) + i 
    print 'y:',y 
    return y 

def residuals(p,y,x): 
    return y - model(p,x) 

p_guess=np.array([2.8,0,0.16,0,850]) 

p, cov, infodict, mesg, ier = scipy.optimize.leastsq(residuals,p_guess,args=(data[:,-1],data[:,0:2]),full_output=1) 

a,b,c,d,i=p 
print('''\ 
a = {a} 
b = {b} 
c = {c} 
d = {d} 
i = {i} 
'''.format(a=a,b=b,c=c,d=d,i=i)) 

回答

2

你應該得到這樣的錯誤:

ValueError: negative number cannot be raised to a fractional power

因爲您的否定值賦值給變量gdp可提高到分數冪。

+0

錯誤沒有提出,但scipy.optimize返回最初的猜測。然而,更好的行爲的確會是提高錯誤,因爲這是問題所在。 – 2014-09-12 11:38:23