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

How to fit polynomial into some error bars data

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

现在,我使用这个代码:

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

当然,拟合出现了一些误差条,而且是正确的。

我想得到一条更接近置信度低的点的拟合曲线,舍弃置信度高的点。

谢谢,再见,
贾科莫

您要找的是加权最小二乘法。您可以使用函数 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 矩阵 () 并求解系统

%// 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 矩阵,并且您拥有 Curve Fitting Toolbox 的许可证,则可以使用以下代码

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

你会得到同样的结果。