Scipy fmin更新函数中的数据

时间:2018-07-23 01:08:03

标签: python scipy mathematical-optimization

我的代码有问题。我不知道如何在函数内部更新变量error的值。值仅在函数外部更新。 有人可以帮我解决这个问题吗?

代码的目的是使模型适合我的数据(x,y) = (mes1,pasajeros1)。该模型是一个多项式函数,再加上一个由指数函数调制的正弦。

Error是一个向量,它是数据(y向量)与拟合(多项式函数加前一次迭代的指数调制的正弦值)之间的差,每次迭代每个分量error的向量必须较小。

这是代码:

def base_pol(x,N):
     M=np.ones(x.size)
     for i in range(1,N+1):
     M=np.vstack([M ,x**i])
     return M.T

def pol(x,theta):
    N=theta.size
    pol=base_pol(x,N-1)@theta
    return pol

def bestpolsin(theta, theta2, m):
    fpol = pol(mes1,theta)
    fsinexp = 0
    best_aic = 10000000
    best_bic = 10000000
    best_parametros = []

    def Fsinexp(x):
        Fsinexp = x[0]*(np.sin(x[1]*mes1+x[2]))*np.exp(x[3]*mes1)
        return Fsinexp

    def Jpolsin(x):
        j = 0.5*(error@error) - error@Fsinexp(x) + 0.5*(Fsinexp(x)@Fsinexp(x))
    return j 

    for i in range(m):
        error = pasajeros1 - fpol - fsinexp
        parametros = fmin(Jpolsin, theta2, args=(error,))
        fsinexp = Fsinexp(parametros)
        aic = AIC(4*(i+1), Jpolsin(parametros))
        bic = BIC(4*(i+1), Jpolsin(parametros))
        best_parametros.append(parametros) 
        if best_aic>aic:
           best_aic=aic
           r_1=i+1
        if best_bic>bic:
           best_bic=bic
           r_2=i+1
     p=r_1==r_2

     return aic, bic, r_1, best_parametros, p

0 个答案:

没有答案