Я пытаюсь сделать curvfit, используя библиотеку lmfit. Моя цель состоит в том, чтобы кривая начиналась с x = 0, а f (0) = «константа». Я также хочу, чтобы его минимумы были при х = 1. Однако при наложении моих ограничений в модель f (1)> f (0).
F (x) = A exp (B x) + C x 2 + D x + E
F '(x) = A B exp (B * x) + 2 * C x + D
F' '(x) = A B 2 exp (B x) + 2C
F (0) = постоянная = A + E =>E = константа - A
F '(1) = 0 = A B exp (B) + 2 * C + D => D = - (2 * C + B A exp (B))
F '' (1)> 0 => A * B 2exp (B) + 2 * C> 0 => C> -AB 2 * exp (B)) / 2
Это дает нам следующее ограниченное уравнение:
F (x) = C x (x-2) + A * (exp (B x) - B exp (B * x) -1) + константа
в дополнение к следующему неравенству, которое необходимо соблюдать:
F '' (1)> 0 => A * B ** 2 * exp (B) + 2 * C> 0 => C> -B2AeB / 2
Изображение расчетов в слове для удобства чтения
def model_5(x, a, b, c):
return c*x*(x-2) + a*(np.exp(b*x) - x*b*np.exp(b) - 1) + 0.003591687375349475
model_5b = Model(model_5)
pars_5b = Parameters()
pars_5b.add('a', value = 0.007)
pars_5b.add('b', value = 0.05)
pars_5b.add('delta', value = 0.02, min=0, vary=True)
pars_5b.add('c', expr="delta - 0.5*a*(b**2)*exp(b) ")
model_5b.fit(y, x=X, params=pars_5b, method="trf")
# Output from above fit
Variables
name value initial value min max vary expression
a 9.9227e-05 0.007 -inf inf True
b 0.08377349 0.05 -inf inf True
delta 5.7477e-11 0.02 0.00000000 inf True
c -3.7855e-07 0.019990801377906712 -inf inf False delta - 0.5*a*(b**2)*exp(b)
# Create predictions with the fitted models values
pred_5b = model_5(X, 9.9227e-05, 0.08377349, -3.7855e-07)
# Check if f(1) equals the minima
pred_5b[1] == np.min(pred_5b) # returns False, should return true
При размещении моих ограничений в модели f (1)> f (0), f (1) не является минимумом. Тем не менее, это должно быть при включении ограничений. Поэтому я чувствую, что должен вводить ограничения неправильно. Может ли кто-нибудь помочь мне направить меня в правильном направлении?
Разница в этом, в отличие от других вопросов, которые я обнаружил в Stackoverflow, состоит в том, что ограничение включает неравенство с оптимизируемыми параметрами. То есть C> -B2AeB / 2