Я думаю, это в основном зависит от того, какую сложность и адаптивность вы ищете. Если я понимаю вопрос (возможно, пример или упрощение вашей реальной цели), вы хотите ограничить две функции пика максимальными высотами, которые в сумме равны фиксированному значению (скажем, 1). Почему бы не определить базовые функции, которые масштабируются по вашему желанию, например
import numpy as np
def gauss(x, amp, cen, wid):
return amp * np.exp(-(x-cen)**2/wid) # deliberately Gaussian-like
def loren(x, amp, cen, wid):
return amp * wid / ( (x-cen)**2 + wid) # deliberately Lorentzian-like
, а затем суммировать их и ограничить два параметра amp
суммированием до 1:
from lmfit import Model
mod = Model(gauss, prefix='g_') + Model(loren, prefix='l_')
pars = mod.make_params(g_cen=1, g_wid=1, l_cen=1, l_wid=1)
pars.add('g_amp', value=0.5, min=0, max=1)
pars.add('l_amp', expr='1 - g_amp', min=0, max=1)