2014-02-26 187 views
2

我想将任意函数拟合到我的数据集中。因此,我在MATLAB中使用了lsqcurvefit。现在我想重视拟合过程,这意味着当曲线拟合函数(lsqcurvefit)计算拟合残差时,某些数据点比其他数据点更重要。更具体地说,我想使用统计加权方法。用lsq曲线拟合加权曲线拟合

w=1/y(x), 

其中w是一个矩阵包含的每个数据点的权重和y是数据集。我不能找到lsqcurvefit的加权曲线拟合。是否有任何我应该遵循的技巧,或者是否有任何其他功能,而不是lsqcurvefit它为我做?

+0

如果你正在处理线性最小二乘,你可以使用vandermonde和权重矩阵从头开始。 – mathematician1975

+0

@ mathematician1975,谢谢,但事实并非如此。我有一个适合数据集的非线性函数。 – user3355900

+0

你的成本函数是什么样的?你不能在那里加重吗? – Dan

回答

3

为了进行加权,我觉得使用lsqnonlin更容易,这是lsqcurvefit调用来进行实际拟合的功能。

你首先必须定义一个函数,试图最小化,即。一个成本函数。你需要在加权函数传递作为extra parameter给你的函数作为载体:

x = yourIndependentVariable; 
y = yourData; 
weightVector = sqrt(abs(1./y)); 
costFunction = @(A) weightVector.*(yourModelFunction(A) - y); 

aFit = lsqnonlin(costFunction,aGuess); 

之所以在权重函数定义的平方根是lsqnonlin需要的残差,而不是残差平方或它们的总和,所以你需要预先减少权重。

或者,如果您有统计工具箱,则可以使用nlinfit,它将接受加权矢量/矩阵作为可选输入之一。

+0

清晰易懂!非常感谢。 – user3355900

+0

不错,很容易,谢谢! – Dan