scipy.optimize curve_fit を使っていくつかのコードを書きました。それは私のコンピューターで完全に動作します:
Windows 7 Home Premium Service Pack 1、64 ビット Dell Studio 1558 Intel Core i3 cpu M330@2.13GHz 2.13GHz、3.86 GB の RAM Python 2.7.3 (デフォルト、2012 年 4 月 10 日 23:24:47)[MSC v.1500 64 ビット (AMD64)] IPython 0.13.1
次に、スクリプトを別のマシン (COMP2) に移動しました: Microsoft Windows XP Professional バージョン 2002 Service Pack 3、AMD Athlon(tm) II X4 620 プロセッサ 2.61 GHz、3.25 GB の RAM、物理アドレス拡張 Python 2.7.5 |32 ビット | (デフォルト、2013 年 6 月 14 日 18:15:12) [MSC v.1500 32 ビット (Intel)] Ipython 1.0.dev
そして、フィッティングは本当に悪いです。私のコードはかなり長いですが、すべての状況を再現する自己完結型の例を用意しました。
xdata と ydata が array( , dtype=float) の場合に役立つことがあると読みましたが、これは私の場合ではありません(試しました)
Windows 7 32ビット(私のfirendsのマシン)でPython 2.7.3 32ビットを使用してこのコードを試してみましたが、うまくいきました。 COMP2.
自己完結型の例を次に示します。
from string import*
from numpy import *
from matplotlib.pylab import *
from scipy.optimize import curve_fit
from sys import exit
nm_range=[574.14200000000005, 574.154, 574.16499999999996, 574.17700000000002, 574.18799999999999, 574.19899999999996, 574.21100000000001, 574.22199999999998, 574.23400000000004, 574.245]
data_for_fit=[859.0, 997.0, 1699.0, 2604.0, 2013.0, 1964.0, 2435.0, 1550.0, 949.0, 841.0]
guess=[574.1861428571428, 574.2155714285715, 1302.0, 1302.0, 0.0035019999999983615, 859.0]
def f_double_gauss(x,x0,x1,A0,A1,sigma,c):
return A0*exp(-(x-x0)**2/(2.*sigma**2)) + A1*exp(-(x-x1)**2/(2.*sigma**2)) + c
popt,pcov=curve_fit(f_double_gauss,nm_range,data_for_fit,guess,maxfev=10000)
print guess
print popt
fig=figure("If fit of gauss or double gauss is good")
ax=fig.add_subplot(1,1,1)
pdata,=plot(nm_range,data_for_fit,"bo-")
guessed=[]
for i in nm_range:
guessed.append(f_double_gauss(i,guess[0],guess[1],guess[2],guess[3],guess[4],guess[5]))
pfit,=plot(nm_range,f_double_gauss(nm_range,popt[0],popt[1],popt[2],popt[3],popt[4],popt[5]),"k-")
pguess,=plot(nm_range,guessed,"y")
ax.set_title("Anizo fit"+" : data, init guess & fit")
ax.set_xlabel("wavelenght [nm]")
ax.set_ylabel("PL intensity")
legend([pdata,pguess,pfit],["data","guess","fit"])
show()
適合が悪い場合の出力:
[574.1861428571428,574.2155714285715,1302,1302.0,0.0035019999999983615,859.0]
[5.69174152e+02 8.66516577e+04 -9.27629569e+04 1.59887720e+09 7.56288801e-03 1.59110000e+03]
適切な出力:
[574.1861428571428,574.2155714285715,1302,1302.0,0.0035019999999983615,859.0]
[ 5.74177150e+02 5.74209188e+02 1.74187044e+03 1.58646166e+03 1.0068462e-02 8.57450661e+02]
適切な画像: https://docs.google.com/file/d/0B6GA05-W4ZzzdTIxa3U3Rl92MU0/edit?usp=sharing
不適切な画像 https://docs.google.com/file/d/0B6GA05-W4ZzzRlk4eWlER01WejQ/edit?usp=sharing