在Matlab中使用局部加权回归方法(LOWESS)拟合2D数据

问题描述 投票:0回答:1

我第一次尝试使用局部加权回归算法(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 图,在我最好的情况下,这将恢复原始高斯分布。

谁能帮我解决这个问题吗?

matlab curve-fitting
1个回答
0
投票

你的语法,

fit([x,y],z,...)
适合表面。并且
lowess
模型仅支持拟合曲面(根据 文档)。因此,您将在
f
中获得合适的曲面。

你想要拟合高斯,所以你应该使用

gauss1
模型进行拟合:

f = fit(x, y, 'gauss1');
plot(f, x, y)
© www.soinside.com 2019 - 2024. All rights reserved.