Почему эта простая подгонка не работает?Почему функция curve_fit не работает только с двумя точками?
import numpy as np
from scipy.optimize import curve_fit
exponential = lambda x, a, b: np.exp(a * x + b)
popt, pcov = curve_fit(f = exponential, xdata = [350, 380], ydata = [48, 17], p0 = [-1, 1])
print("a =", popt[0])
print("b =", popt[1])
Сообщение об ошибке:
python-3.4.4\lib\site-packages\scipy\optimize\minpack.py:715:
OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
И никакого решения для a
и b
найден. Выход:
a = -1.0
b = 1.0
(я знаю алгебраического решения a
и b
- Я просто искал ответ на этот вопрос, потому что я не понимаю, почему curve_fit
не работает .)
EDIT
Хорошо, благодаря @Shobeir я узнал:
- Мое начальное значение для
p0
было недостаточно для работыcurve_fit
для работы. Если я используюp0 = [-0.01, 1]
, очень хорошие значения дляa
иb
. Итак, первая частьcurve_fit
(часть о расчетеpopt
) работает просто отлично. OptimizeWarning
вызвано расчетомpcov
. Это, похоже, еще один вопрос, поэтому я опубликовал новый. Если кто-то находит этот пост в поисках решения для другого вопроса, вот ссылка: Why isn't `curve_fit` able to estimate the covariance of the parameter if the parameter fits exactly?
Благодарим вас за ответ. Однако я не понимаю ... Что я могу сделать, чтобы избавиться от предупреждения? Кроме того, я немного обновил текст вопроса. – Jayjayyy
Измерьте больше очков :) – Jannick
@Jannick Вы правы, больше очков, похоже, помогает, и 'OptimizeWarning' исчезает. Но почему? Каково влияние на матрицу Якобиана? (Должен ли я публиковать новый вопрос?) – Jayjayyy