Я борюсь с проблемой, которая включает вычисление уравнения кривой, подходящей для края диаграммы рассеяния, показанной ниже.Это четко очерченный край, но мне нужно точное соответствие.
Я основывал свои первые попытки на этом сценарии ...
Подогнать кривую к границе диаграммы рассеяния
... но я 'я недостаточно знаком с Python, чтобы знать, как этот код составлен, читая его, и не могу полностью адаптировать его к моей ситуации.
Вот что я попробовал из этого примера.Цель здесь состоит в том, чтобы смоделировать кривую как экспоненциальный рост с пределом, а затем итеративно сместить кривую вниз к точкам.Однако ни это, ни scipy.optimize curve_fit, кажется, не дают мне точной подгонки.
from math import e
model = lambda x, a, b: (a * (1 - (e ** (-b * x)))
def get_flipped(y_data, y_model):
flipped = y_model - y_data
flipped[flipped > 0] = 0
return flipped
def flipped_resid(pars, x, y):
y_model = model(x, *pars)
flipped = get_flipped(y, y_model)
resid = np.square(y + flipped - y_model)
return np.nan_to_num(resid)
from scipy.optimize import leastsq
guesses =[100, 5]
fit_pars, flag = leastsq(func = flipped_resid, x0 = guesses,
args = (x_data, y_data))
Кривая должна соответствовать
Я относительно новичок в Python (R native), поэтому здесь могут быть некоторые очевидные ошибки, но как я могу улучшить подгонку так, чтобы линия находилась прямо на краю?