加权曲线拟合与lsqcurvefit

时间:2014-02-26 14:03:49

标签: matlab

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

w=1/y(x),

其中w是一个矩阵,包含每个数据点的权重,y是数据集。

无论如何我都找不到使用lsqcurvefit进行加权曲线拟合。有没有我应该遵循的技巧,还是有其他功能而不是lsqcurvefit为我做这件事?

1 个答案:

答案 0 :(得分:4)

为了进行加权,我发现使用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接受加权矢量/矩阵作为可选输入之一。