게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
파이썬 scipy의 curve_fit을 사용하여 데이터 피팅 질문입니다.
게시물ID : programmer_22157짧은주소 복사하기
작성자 : IKNOW
추천 : 0
조회수 : 2072회
댓글수 : 13개
등록시간 : 2018/03/04 02:16:20
옵션
  • 본인삭제금지
원본 소스 파일은
import openpyxl
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit

#엑셀 파일을 불러옴.
excel_result = openpyxl.load_workbook("C:\\Dev\\GraduationThesis\\result_1.xlsx")
sheet_result = excel_result['Sheet2']

def sheet_value(r, c):
#셀 값을 불러옴
return sheet_result.cell(row=r, column=c).value

def gauss_func(x, a, b, c):
#gaussian function
return a*np.exp(-(x-b)**2/(2*c**2))

def lorenzian_func(x, x0, r):
#lorenzian function
return (r**2/(((x-x0)**2)+r**2))/(np.pi*r)

from scipy.misc import factorial

def poisson_func(x, lamb):
#poisson fuction
return (lamb**x/factorial(x)) * np.exp(-lamb) 

index = 1
list_Hz = list()
list_Mag = list()
#엑셀의 각 데이터를 리스트 형식으로 바꿈
while True:
if sheet_value(index, 1) == None:
break;
list_Hz.append(sheet_value(index, 1))
list_Mag.append(sheet_value(index, 2))
index += 1

#리스트를 array형태로 바꿈
x = np.array(list_Hz)
y = np.array(list_Mag)

#초기값
init = [10]

#fitting
popt, pcov = curve_fit(gauss_func, x, y)

plt.plot(x, y, linewidth=2, color='blue')
plt.plot(x, gauss_func(x, *popt), color = 'green', linewidth=2)
plt.legend(['Data', 'fitting'], loc=2)

plt.show()

excel_result.close()

엑셀에서 데이터 값을 불러온후 그 값들을 어떤 함수의 형태로 피팅하여야 하는데

먼저 가우시안 분포로 해봤을때 위치는 비슷하지만 제대로 피팅이 되지않아서

로렌치안하고 푸아송 분포로 해보려고 하는데요

그나마 로렌치안은 스케일은 비슷한거 같은데 푸아송분포로는 스케일이 아예 다르게 나오더라구요.

혹시 로렌치안하고 푸아송 분포는 curve_fit으로 피팅하지 못하는건가 싶어서요!

댓글로 가우시안 로렌치안 푸아송 분포로 피팅했을때의 이미지를 올리겠습니다.

한번만 봐주세요 ㅠㅠ

조공으로 공부할만한 다양한 무료 자료가 있는 링크를 올리겠습니다.

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호