2015-10-27 47 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