2017-01-15 4 views
0

Почему эта простая подгонка не работает?Почему функция 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?

ответ

1

Он работает, но при расчете pcov:

Если матрица Якоби в решении не имеет полный ранг, тогда метод «lm» возвращает матрицу, заполненную np.inf.

Это ваш случай и, следовательно, вы видите предупреждающее сообщение.

+0

Благодарим вас за ответ. Однако я не понимаю ... Что я могу сделать, чтобы избавиться от предупреждения? Кроме того, я немного обновил текст вопроса. – Jayjayyy

+3

Измерьте больше очков :) – Jannick

+0

@Jannick Вы правы, больше очков, похоже, помогает, и 'OptimizeWarning' исчезает. Но почему? Каково влияние на матрицу Якобиана? (Должен ли я публиковать новый вопрос?) – Jayjayyy

 Смежные вопросы

  • Нет связанных вопросов^_^