解微分方程,列索引超出范围

2024-04-24 04:47:51 发布

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

def rainflow(pr, dt, ci, k, tabo):
    phi = tabo/dt
    qsim = pd.Series(data=None, index=pr.index)
    qsim.iloc[0] = ci
    for i in range(1, len(qsim) + 1):
        qsim.iloc[i] = k * (pr.iloc[i] - (phi * (qsim.iloc[i-1] / pr.iloc[i-1])))
    return qsim.iloc

def irmse(dif, obs):
    rmse = np.sqrt(np.mean(dif ** 2) / len(obs))
    delta = obs - obs.shift(1)
    delta_prom = np.mean(delta)
    sigma_obs = (np.sqrt((np.sum((delta - delta_prom) ** 2) / (len(delta)) - 1)))
    irmse = rmse / sigma_obs
    return irmse

def obj_fun(par, arg):
    sim = rainflow(arg[1], arg[2], par[0], par[1])
    dif = arg[0] - sim
    return irmse(dif, arg[0])

df_data = pd.ExcelFile('Taller_opt.xlsx').parse(sheetname='caudal', index_col='Fecha')
sr_pr_cal = df_data['PT'].iloc[0:int(len(df_data['PT']) * 0.7)]
sr_pr_val = df_data['PT'].iloc[int(len(df_data['PT']) * 0.7):]
sr_qobs_cal = df_data['Qobs'].iloc[0:int(len(df_data['Qobs']) * 0.7)]
sr_qobs_val = df_data['Qobs'].iloc[int(len(df_data['Qobs']) * 0.7):]

dt = 1.
ci = sr_qobs_cal.iloc[0]

met_opt = 'minimize'

par_ini = [0.5, 10]

min_results = so.minimize(fun=obj_fun, x0=par_ini, args=[sr_pr_cal, sr_qobs_cal], method='Nelder-Mead')

我试图优化我的方程,但它给出:

File "C:/Users/yeni/PycharmProjects/untitled/new.py", line 23, in obj_fun
sim = rainflow(arg[1], arg[2], par[0], par[1])

索引器错误:列表索引超出范围

“索引器:列表索引超出范围”为什么会发生这种情况? ir如何修复?你知道吗


Tags: dfdatalennpargprcaldelta