SciPy Curve_fit соответствует только прямой линии для моих нелинейных данных

#python #scipy #non-linear

Вопрос:

У меня та же проблема, и мой ввод в функцию имеет правильную последовательность. Но по какой-то причине это соответствует только линейной линии моим нелинейным данным. Я ожидал увидеть какую-то кривизну в подогнанной модели! Я не мог понять, как решить эту проблему. Любая помощь будет признательна. вот мой код:

 from matplotlib import pyplot
from scipy.optimize import curve_fit
import scipy.optimize as optimize
import numpy as np


x1= [0 , 27.7527, 76.0898, 116.2636, 157.7859]
y1= [91.1904, 83.2582, 68.8431, 38.7545, 17.5318]

# define the true objective function
def objective(x, a0, a1, a2, k2, k4):
     
    return a0   a1 * np.arctan((x/ k2))   a2 * np.arctan((x/ k4))

# curve fit
popt, _ = curve_fit(objective, x1, y1 , method='lm' )
# summarize the parameter values
a0, a1, a2, k2, k4 = popt
print(popt)

# define a sequence of inputs between the smallest and largest known inputs
x_line = np.arange(min(x1), max(x1), 1)
# calculate the output for the range
y_line = objective(x_line, a0, a1, a2, k2, k4)
# create a line plot for the mapping function
pyplot.plot(x_line, y_line, '--', color='red')
pyplot.scatter(x1, y1)
pyplot.show()
 

Правильная посадка должна выглядеть так:
Ожидаемый результат

Комментарии:

1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.