【问题标题】:How to fit polynomial into some error bars data如何将多项式拟合到一些误差线数据中
【发布时间】:2015-01-13 00:36:34
【问题描述】:

我需要拟合数据,例如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

当然,拟合来自一些误差线,而且是正确的。

我想获得一个更接近低置信度的点的拟合曲线,并丢弃高置信度的点。

谢谢你,再见,
贾科莫

【问题讨论】:

    标签: matlab curve-fitting


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

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

    你会得到同样的结果。

    【讨论】:

    • 谢谢你,乔米。明天我会尝试你的解决方案。也谢谢你的解释。
    猜你喜欢
    • 2011-10-03
    • 2020-03-18
    • 1970-01-01
    • 2018-03-16
    • 2010-09-27
    • 2015-12-16
    • 2016-08-26
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多