我需要在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
当然,这种拟合是从一些误差棒中得出的,这是正确的。
我想获得一个更接近具有低置信度指数的点的拟合曲线,并丢弃具有高置信度指数的点。
谢谢你,再见,
贾科莫
您正在寻找的是加权最小二乘。您可以使用函数来计算它们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矩阵,并且拥有“曲线拟合工具箱”的许可证,则可以使用以下代码
ft = fittype('poly2');
opts = fitoptions('Method', 'LinearLeastSquares');
opts.Weights = w;
fitresult = fit(x, y, ft, opts);
您将获得相同的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句