используйте odeint, но внутри функции есть входной параметр, изменяющийся со временем - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть файл данных, который содержит значение INPUT (как показано в коде ниже) каждого дня (всего 365 дней). И время делится на 365 интервалов:

tnOut = 365
tOut = np.linspace(0, 100, tnOut)  
nOut = np.shape(tOut)[0]

Функция выглядит следующим образом:

def dYdt(t, Y):

    return np.array([ INPUT - a*(Y-b)/(c-d)])
ODE = spint.solve_ivp(dYdt, t_span, Y0, t_eval=tOut, vectorized=True,
                      method='RK45', rtol=1e-5)

Но я не знаю, как передать INPUT этой функции. Поскольку значение INPUT не может быть выражено как функция времени, это результаты наблюдения.

****** data **********

дата ВВОД 2012-06-14 0,0000 2012-06-15 0,0075 2012-06-16 0,0024 2012-06-17 0,0000 2012-06-18 0.0107 ... 2019-12-27 0,0000

Я пытался использовать это:

def input(t):
    i = 0
    for dtt in tOut:
        if t == dtt:
            return df['input'][i]
        i = i+1

Но он показывает "неподдерживаемые типы операндов для -: 'NoneType' и" float "". И я не думаю, что правильно передавать данные INPUT таким способом. Любая помощь будет потрясающей. Большое спасибо !!!

...