2015-10-27 49 views
2

我想適合冪律模型(x**m * c)只有兩個數據點找出斜率m。我正在使用scipy.optimize中的curve_fit函數解決此問題。現在,當我運行下面的代碼蟒蛇scipy.optimize曲線擬合只有兩個點

import numpy as np 
from scipy.optimize import curve_fit 
func = lambda x, m, c: x**m * c 
xdata = np.array([235e6, 610e6]) 
ydata = np.array([0.077, 0.054]) 
err = np.array([0.0086, 0.0055]) 
coeff, var = curve_fit(func, xdata, ydata, sigma=err) 
print(coeff, var) 

它成功返回的mcoeff[0]值。但是var的值是[[ inf inf] [ inf inf]]。由於只有兩個數據點,是否有任何問題?它無法計算最佳擬合參數值的協方差?那麼如何計算m中的錯誤?

回答

1

您有兩個自由參數和兩個數據點,所以問題受到限制。您的擬合曲線在沒有錯誤的情況下完全通過兩個數據點,因此優化程序無法計算參數的協方差。

+0

爲什麼不是錯誤而不是'inf'就是'0'呢? – Jayjayyy

+0

即使它沒有受到約束,也可以有一個完全適合數據點的模型,這會返回錯誤「0」。由於不可能計算錯誤,因此欠約束的問題會返回「inf」錯誤。 – Conor