我第一次尝试使用局部加权回归算法(LOWESS)在Matlab中拟合二维数据点
[x, y]
(x
和y
都是一维条目)。我实现了下面的代码片段,其中使用了嘈杂的高斯曲线,并尝试使用 LOWESS 方法恢复[x, yfitted]
。
clearvars;
close all;
clc;
n = 10;
fit_frac = 0.2;
x = zeros(n, 1); x(1:end) = 1:n;
dx = 0.1;
x = x*dx;
xcenter = (n + 1)/2*dx;
x = x - xcenter;
% Gaussian initial signal
y = exp(-x.^2./sqrt(2));
% ad an offset of 1%;
y = y + 0.01.*max(y).*(rand(n, 1)*2 - 1);
%
datain = [x, y];
argfrac = fit_frac.*ones(n, 1);
% f = fit(data(cid).w_store.', data(cid).p_store.', 'lowess');
f = fit(datain, argfrac, 'lowess');
尽管如此,当我
figure; plot(f);
绘制拟合数据的 3D 图而不是 2D 图,在我最好的情况下,这将恢复原始高斯分布。
谁能帮我解决这个问题吗?
你的语法,
fit([x,y],z,...)
适合表面。并且 lowess
模型仅支持拟合曲面(根据 文档)。因此,您将在 f
中获得合适的曲面。
你想要拟合高斯,所以你应该使用
gauss1
模型进行拟合:
f = fit(x, y, 'gauss1');
plot(f, x, y)