2017-01-15 1 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) 

그리고 ab에 대한 해결책을 찾을 수있다. 출력은 다음과 같습니다

a = -1.0 
b = 1.0 

(나는 ab의 대수 솔루션 알고 있어요 - 내가 이해하지 않기 때문에 curve_fit이 작동하지 않는 이유, 난 그냥이 질문에 대한 답을 찾고 있어요 .)



편집

좋아, @Shobeir 덕분에 내가 발견 :

  • p0에 대한 초기 값은 curve_fit이 작동하기에 충분하지 않았습니다. p0 = [-0.01, 1]을 사용하면 ab에 대해 매우 좋은 값이 발견됩니다. 따라서 curve_fit의 첫 부분 (popt의 계산에 관한 부분)은 잘 작동합니다.
  • OptimizeWarningpcov의 계산으로 인해 발생합니다. 이것은 또 다른 질문 인 것 같습니다. 그래서 나는 새 질문을 올렸습니다. 사람이 다른 질문에 대한 솔루션을 찾고이 게시물을 발견하면, 여기 링크의 : 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