2015-01-05 3 views
0
나는 일부 데이터에 맞게 곡선이 코드를 사용하고

:곡선 적합 식하지 제대로 커브 피팅

하지만 때

extract_parameters([1,2,3,4,5,6],[100,60,50,40,45,34]) 

내가 완벽하게 맞지를 얻을 : 내가 입력하면

def extract_parameters(Ts, ts): 
    def model(t, Ti, Ta, c): 
     return (Ti - Ta)*math.e**(-t/c) + Ta 
    popt, pcov = cf(model, Ts, ts, p0 = (10, 6, 7)) 
    Ti, Ta, c = popt 
    maxx = max(Ts) 
    xfine = np.linspace(0, maxx, 101) 
    print "xfine: ", xfine 
    yfitted = model(xfine, *popt) 
    print "yfittted", yfitted 
    pl.plot(Ts, ts, 'o', label = 'data point') 
    pl.plot(xfine, yfitted, label = 'fit') 
    pylab.legend() 
    pylab.show() 
    return Ti, Ta, c 

을 나는 다음과 같이 입력한다 :

extract_parameters([1,2,3,4,5,6,7],[100,80,70,65,60,58,56]) 

대신 이걸 얻을 수 있습니다 enter image description here

아무도 볼 수 있습니까? 커브 피팅이 크게 바뀝니 까?

답변

2

curve_fit과 같은 최적화 도구는 최적의 맞춤을 찾지 만 항상 성공하지는 않습니다. 공지 사항이이 p0 = (10, 6, 7) 의 초기 매개 변수 추측 시작과 매우 다른 위치에 그것의 방법을 발견 의미 extract_parameters([1,2,3,4,5,6],[100,60,50,40,45,34]) 반환

(196.85292746741234, 38.185643828689777, 1.0537367332516778) 

.

최적 값에 더 가까운 초기 추측을 선택하여 옵티 마이저를 지원할 수 있습니다. (131.71232607048836, 54.894539483338022, 1.8503931318517444) : 간단하게

p0 = (100, 6, 7) 

로 변경하여

extract_parameters([1,2,3,4,5,6,7],[100,80,70,65,60,58,56]) 

이 더 잘 맞는을 찾을 수 있습니다.

enter image description here

+0

완벽 해 보입니다. p0는 실제로 무엇을합니까? 짐작하는 가치는 무엇입니까? 감사. – GBA13

+0

'p0'는 매개 변수'Ti, Ta, c'의 초기 추측입니다. – unutbu

+0

아, 정말 고마워. – GBA13