Scipy fmin更新函数中的数据

2024-06-07 01:03:42 发布

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

我的代码有问题。我不知道如何更新函数中变量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

Tags: 函数代码returndefnpaicerrorbest