2017-11-22 21 views
1

raw data파이썬 | 플로팅 및 형태 데이터 맞는 끼워 맞춤 (1/A) E^- A가 검색 내가 선택할 답변을 찾을 수 있다는 많은 후 일정한

를 인 (X/A) 내 질문을 여기에 두시오.

표시된 데이터에 y = (1/A) e^(- x/A)의 형태로 지수 함수를 맞추려면 어떻게해야합니까? 파이썬으로 익숙해 져야 할 필요가 있습니다. 도움이 감사할만한 것입니다!

미리 감사드립니다.

+0

[scipy] (https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html)를 이미 사용해 보셨습니까? 위의 링크를 찾았지만이를 사용하는 방법을 모르는 경우 질문에 링크 된 이미지를 생성하는 데 사용 된 데이터를 공유 할 수 있습니까? –

+0

필자는 왼쪽 상단 데이텀을 통해 수명이 0보다 약간 더 많은 160 개의 이벤트를 관찰했다는 것을 이해합니다. 그게 맞습니까? –

+0

빠른 답변 주셔서 감사합니다. SciPy로 놀아 보려고했는데 아직 좋은 결과가 없습니다. 내가 필요한 것은 그곳에있는 예제 들과는 조금 다른 것처럼 보입니다. 게다가 나는 어쨌든 피팅에 익숙하지 않다. 내가 할 수 있었던 것은 gauss fit & linear regression이다. 사용 된 데이터는 https://pastebin.com/i3H4ZfLQ에서 찾을 수있다. – Werkverkeer

답변

1

나는 그것을 이해 한 것처럼 보입니다.

def exponential_fit(x, a, c): 
""" 
Logarithmic fit used for the MuonLab life time measurements. 
:param x: 
:param a: 
:param c: 
:return: 
""" 
return (1/a)*np.exp(-x/a)+c 

데프 logarithmic_fit_plot (X, Y) : #의 WIP 폰트 = { '가족' '정상' '중량' '굵은' '크기': 20}

matplotlib.rc('font', **font) 
xdata = x 
ydata = y 
plt.rc('text', usetex=True) 
plt.plot(xdata, ydata, '.', label='sample') 
popt, pcov = sp.optimize.curve_fit(exponential_fit, xdata, ydata) 
plt.plot(xdata, exponential_fit(xdata, *popt), 'r-', 
     label=r"$\frac{1}{\tau_0}e^{\frac{-x}{\tau_0}}, \tau_0=%5.3f, c=%5.3f$" % tuple(popt)) 
plt.legend() 
plt.show() 

슬프게도 그것은 데이터에 잘 맞지 않지만 그것은 단지 내가 생각하는 수학 문제 일뿐입니다.

1

이 코드는 적절하게 적합합니다.

curve fit

first = True 
lifetimes = [] 
counts = [] 
with open('Werkverkeer.txt') as w: 
    next(w) 
    for line in w: 
     _, life, count = line.rstrip().split() 
     life, count = float(life), int(count) 
     if count==0: 
      continue 
     lifetimes.append(life-0.005) 
     counts.append(count) 

probs = [_/sum(counts) for _ in counts] 
print (probs) 

from scipy.optimize import leastsq 
from scipy.stats import expon 
from numpy import exp 

def residual(params, X, data): 
    model = [expon.cdf(x+0.005, scale=params[0])-expon.cdf(x-0.005, scale=params[0]) for x in X] 
    return [d-m for (d,m) in zip(data, model)] 

r = leastsq(residual, [140], args=(lifetimes, probs)) 
estimate = r[0][0] 
print (estimate) 

fitted = [expon.cdf(x+0.005, scale=estimate)-expon.cdf(x-0.005, scale=estimate) for x in lifetimes] 
print(fitted) 

from matplotlib import pyplot as plt 

plt.plot(lifetimes, probs, 'r.') 
plt.plot(lifetimes, fitted, 'b-') 

plt.show() 
참고 사항 : 카운트 점점 정말 방법이기 때문에

  • 보다는 피팅 counts에 나는, 확률의 추정치 표준화 counts에 장착 한 수명에 대한 확률 밀도 함수의 추정치.
  • 나는 counts를 사용하기 때문에 매개 변수의 주어진 값에 대해 bin 함수의 경계 사이에 밀도 함수 아래에 영역을 맞추어야합니다. 따라서 라인 model =.
  • 일반적으로 residual의 마지막 줄은 관측 확률 (카운트 기준)과 잠정적으로 계산 된 확률의 차이를 나타냅니다.

leastsq은 매개 변수에 대해 0.0497646352872의 값을 반환합니다.