Я пытаюсь приспособить функцию модели к моим данным. данные представляют собой временной ряд (t). функция модели должна меняться в определенные моменты времени (в данном случае t = 7 и t = 14), чтобы в каждый момент времени к ней добавлялось другое выражение. поэтому я хотел бы иметь параметр, который является функцией времени, то есть c = 0, если t <7, иначе 1 </strong>.
rate () - это функция моей модели, a и k - параметры, которые я пытаюсь оптимизировать, и c1 , c2 - рассмотренные выше зависящие от времени коэффициенты.
Я использовал метод .make_params для определения своих параметров и передал соответствующие выражения для c1 , c2 в метод .add .
from numpy import exp
from lmfit import Model
# model function
def rate(x, a, k, c1, c2):
def rate_unit(z):
return a * (exp(-k * (z - 0.5)) - exp(-k * (z + 0.5)))
return rate_unit(x) + c1 * rate_unit(x - 7) + c2 * rate_unit(x - 14)
# define independent and dependent variables
t = data.index.values
y = data.values
# setup the model
rate_model = Model(rate)
# setup parameters
parameters = rate_model.make_params()
parameters.add('a', value=200)
parameters.add('k', value=0.5)
parameters._asteval.symtable['t'] = t
parameters.add('c1', expr='0 if t < 7 else 1')
parameters.add('c2', expr='0 if t < 14 else 1')
# fit model to data
fit_result = rate_model.fit(y, parameters, x=t)
Данные Панды Серия:
In [32]: data
Out[32]:
days
0 0.000000
1 50.986817
3 8.435668
7 0.519960
8 80.628749
10 10.067202
14 6.065180
15 88.029249
21 4.854688
Name: ORG, dtype: float64
это ошибка, которую я получил:
ValueError
<_ast.Module object at 0x7fab7d47f278>
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Traceback (most recent call last):
File "model_dynamics.py", line 58, in <module>
parameters.add('c1', expr='0 if t < 7 else 1')
ValueError: at expr='<_ast.Module object at 0x7fab7d47f278>'
Буду благодарен за любой совет,
ура