본문 바로가기

Programming/Python

Curve fitting

Python을 이용한 curve fitiing은


scipy의 curve_fit 함수를 이용해 쉽게 코딩 할 수 있습니다.


함수에 대한 설명을 하면
(자세한 설명은 SciPy Guide 참조)


scipy.optimize.curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, **kw)


함수는 Levenberg-Marquardt algorithm(Wikipedia) 을 사용하였다고 나와 있습니다.


Parameters

f

 (호출가능)

 fitting에 사용되는 모델 함수

xdata

 (M-length sequence or an (k,M)-shaped array)

 측정된 독립변수

ydata 

 (M-length sequence)

 종속 변수, 보통 f(xdata, ...)

p0

 (초기값 = None, scalar or N-length sequence,선택가능

 파라미터의 추측 초기값 지정

 지정하지 않으면 모두 1

sigma 

 (초기값 = None, M-length sequence) least-square problem 에서의 가중치

absolute_sigma

 (False or True, 선택가능) 

 False : sigma는 상대가중치를 의미한다. 

            가중치의 크기가 중요하지 않고, 상대적인 비율이 중요하다.

            반환되는 공분산 행렬인 pcov 는 추측된 오차에 근거한다.

 True   : sigma가 입력데이터의 표준편차 오차를 의미한다.

            반환되는 pcov 는 이 값에 근거한다.


Returns

popt 

 (array)

 오차 제곱의 합이 최소가되는 파라미터의 최적의 값

pcov 

 (2d array)

 popt의 추측 공분산

 표준편차 오차를 계산하려면 perr = np.sqrt(np.diag(pcov)) 를 이용 



위의 함수를 이용하여 분석이 필요한 data를 fitting 해 보았습니다.


분석에 이용된 코드는 다음과 같습니다.



Fig 1. Source code for curve fitting



코드는 5부분으로 볼 수 있습니다.


1) fitting에 필요한 data는 data.txt에서 불러옴

2) 모델 함수(parameters : a, ν) 정의
    : 

3) curve_fit 함수를 이용하여 fitting

4) 최적의 파라미터,에러 출력

5) plot


실행 후 얻은 결과는 아래와 같습니다.



Fig 2. printed result on python shell


Fig 3. plotted result



같은 data를 이용해 origin에서도 fitting을 해보았습니다.


Fig 4. fitting by origin



비슷한 값을 주는 것을 볼 수 있습니다.

(origin으로 파라미터를 두개 피팅하는 것이 쉽지 않아 a 값은 입력해주었습니다.)




'Programming > Python' 카테고리의 다른 글

유용한 파이썬(Python) 학습 사이트  (0) 2015.09.18
환경변수에 Python 추가하기  (2) 2015.04.02
Python-excel package 설치하기  (0) 2015.04.02
Gas density calculator  (0) 2014.08.07
ImportError: matplotlib requires dateutil  (0) 2014.07.17