2016-06-21 18 views
1

私は、放射輝度の測定値にプランク曲線をフィットさせようとしています。私はいくつかの既知の波長(11データポイント)で輝きを知っている、フィットするパラメータは温度です。scipy.optimize.curve_fit関数内の個々の独立した点に範囲を割り当てる

波長の放射を返し、温度プランク関数:

def fit_planck_curve(wavs_list, rads_list) : 
    temp = curve_fit(bbody, wavs_list, rads_list, p0=1800) 
    return(temp) 

def bbody(lam, T) : 
    lam = 1e-6 * lam # from micrometres to metres 
    return 2*h*c**2/(lam**5 * (np.exp(h*c/(lam*k*T)) - 1)) # radiance in SI units: W.m-2.sr-1.m-1 

が11波長での放射輝度測定値の入力と、scipy.optimize.curve_fitで使用され

適合関数は、放射輝度データを取得し、それらが作られた波長を宣言した後に呼び出されます。ここでの例:

wavelengths_list = [0.555, 0.659, 0.865, 1.375, 1.61, 2.25, 3.74, 10.85, 12, 3.74, 10.85] 
radiances_list = [268900000.00000006, 233200000.00000003, 174400000.0, 200000.0, 49200000.0, 8800000.0, 725170.86180638766, 5713946.0379738025, 5468427.1473144693, 902723.66658727441, 5698079.1655633291] 
Temp_estimate = fit_planck_curve(wavelengths_list, radiances_list)[0][0] 

これまでのところ、これが機能します。

しかし、より多くの情報、つまり波長の境界を入力したいと思います。放射輝度の読み取りが行われた時に11の波長(独立変数)のそれぞれについて、境界 ある:

wl_width_array = np.array([0.02, 0.02, 0.02, 0.015, 0.06, 0.05, 0.38, 0.9, 1, 0.38, 0.9]) 
wl_lowerbound_list = list(np.array(wavelengths_list) - wl_width_array) 
wl_upperbound_list = list(np.array(wavelengths_list) + wl_width_array) 

は、これら2つのリストは、11の波長の各々の上限および下限です。

これらの境界をscipy.optimize.curve_fitで考慮するにはどうすればよいですか? boundsオプションがありますが、例から、私はこれらが個々の点ではなく、全体としての独立変数の境界であることを理解しています。

境界を2タプルに設定しようとしました。最初の要素は2つの独立変数の下限です.2番目の要素は上限です。その独立変数)が境界に設定されていないように各要素は、他の独立変数、温度に対するリスト(11の波長の下限または上限)とnp.infで構成され:

wl_bounds = ([wl_lowerbound_list, -np.inf] , [wl_upperbound_list, np.inf]) 

しかし、私はエラーが発生しました。

どうすればいいですか?これはscipy.optimize.curve_fitで可能ですか?または代わりに?

ありがとうございました。

答えて

2

「境界」は、何らかの形で、独立変数(波長)の読みの不確実性を数量化しているようです。

boundsパラメータは間違いなく役に立ちます。推定しているパラメータの許容範囲を設定することです(たとえば、温度が負ではないことがわかっているなど)。

従属変数のerrorbarsを扱っている場合はsum_i (y_i - f(x_i))**2/dy_i**2のコスト関数で直接least_squaresを使用できます。

独立変数上でエラーバーを処理しているので、それだけでは機能しません。 これらを考慮する簡単な方法は、個々の測定値(例えば、あなたの境界によって与えられる幅のガウス分布)をいくつかの分布と仮定し、一連の合成データセットを生成し、それらを適合させ、 。

+0

こんにちは。お返事をありがとうございます。私が恐れていたように、私は思ったよりも複雑です。 –

関連する問題