Я пытаюсь подогнать данные x y, которые выглядят примерно так
x = np.linspace(-2, 2, 1000) а = 0,5 yl = np.ones_like(x[x = a]) * 0,4 + np.random.normal(0, 0,05, x[x >= a].shape[0]) y = np.concatenate((yl, yr)) plt.scatter(x, y, s=2, color='k')

Я использую вариант ступенчатой функции Хевисайда
def f(x, a, b): вернуть 0,5 * b * (np.sign(x - a)) и соответствие
popt, pcov = Curve_fit(f, x, y, p0=p) где p — некоторая начальная догадка. для любого pcurve_fit подходит только b, а не a например:
popt, pcov = Curve_fit(f, x, y, p0=[-1.0, 0]) мы получаем, что popt равен [-1., 0.20117665]
popt, pcov = Curve_fit(f, x, y, p0=[.5, 2]) мы получаем, что popt равен [.5, 0.79902]
popt, pcov = Curve_fit(f, x, y, p0=[1.5, -2]) мы получаем, что popt равен [1,5, 0,40128229]
почему кривая_fit не соответствует a?