如何将多项式拟合到一些误差条数据中

时间:2015-01-10 10:35:45

标签: matlab curve-fitting

我需要拟合数据,例如在Matlab中,x,y,CI(其中CI是y的置信指数)。

现在,我使用此代码:

pf = polyfit(x, y, 2);
x1 = min(x):.1:max(x);
y1 = polyval(pf, x1);

figure
hold on
errorbar(x, y, CI, 'ko');
plot(x1, y1, 'k');
hold off

当然,合适来自一些错误条,这是正确的。

我希望获得一个更接近具有低置信度指数的点的拟合曲线,并以高置信度指数丢弃这些点。

谢谢你,再见,
贾科莫

1 个答案:

答案 0 :(得分:1)

您正在寻找的是加权最小二乘。您可以使用函数lscov计算它们。在其帮助页面中有一个很好的例子,但我会尝试使其更清晰。

让我们构造一个带有损坏点的简单抛物线

x = (0:0.1:1)';
y = 0.5*x.^2;
y(5) = 3*y(5);

并给予一些权重

w = ones(size(y));
w(5) = 0.1;

接下来构建Vandermonde矩阵(see here for the code)并解决系统

%// V = [x.^2 x ones(size(x))];
V = bsxfun(@power, x, 2:-1:0);
coeff = lscov(V, y, w);

有和没有权重的估计系数是

                x^2       x        1
 with weights  [0.4797    0.0186   -0.0004]
 no weights    [0.3322    0.1533   -0.0034]

请注意,在您的情况下,w必须反转。

如果您不想构建Vandermonde矩阵,并且您拥有曲线拟合工具箱的许可证,则可以使用以下代码

ft = fittype('poly2');
opts = fitoptions('Method', 'LinearLeastSquares');
opts.Weights = w;
fitresult = fit(x, y, ft, opts);

并且您将获得相同的结果。