Подгонка кривой с помощью optimisation.curve_fit прыгает повсюду - PullRequest
1 голос
/ 18 июня 2020

У меня есть два массива вычисленных значений с именами xvals и yvals. Я знаю функциональную форму, в которой должны находиться точки данных, поэтому я знаю, какой результат должен получить. Я должен получить кривую x ^ 4, однако, когда я позволяю python вычислить и построить наилучшее соответствие, линия будет прыгать между всеми точками данных! Вот что я пробовал до сих пор:

def func(x, a, b, c, d, e):
    return a - b*x - c*x**2 - d*x**3 - e*x**4

fita, fitb = optimization.curve_fit(func, xvals, yvals)

#--stuff to initialize a matplotlib plot goes here blah blah blah--

plt.scatter(xvals, yvals, marker='o', c=cparam, cmap=plt.cm.get_cmap('viridis'), s=100, zorder=2)
plt.plot(xvals, func(xvals, *fita), 'r-')

Подгонка кривой возвращает правильные коэффициенты для a, b, c, d и e. Как видите, при построении новая линия подгонки перескакивает между всеми точками данных. Я думаю, что это как-то связано с неправильными значениями x, однако, если я закажу их, это потенциально испортит построение графика рассеяния. Я попытался создать новый независимый набор равномерно распределенных значений x и вычислить некоторые соответствующие значения y и построить его, но линия исчезла с моего графика. Мне что-то не хватает, чтобы заставить его вести себя лучше?

The weird fit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...