在Matlab中找到拟合线及其附近的最近点

时间:2017-03-15 15:55:19

标签: matlab date-range

假设我有两个随机双数组,这意味着一个x坐标可能有多个y值。

X = randi([-10 10],1,1000); 
Y = randi([-10 10],1,1000);

然后我给出一个线方程:y=ax+b

我想根据每个x点找到距离最近点的最近点。当我发现这一点时,我会发现它在特定范围内的邻居点。请原谅我可怜的英语,也许下面的图片可以提供更多帮助。

因为我有很多数据点,所以我希望有一种有效的方法来解决这个问题。

image explanation

1 个答案:

答案 0 :(得分:0)

如果您的X是离散的,您可以尝试以下方式:

xrng = [-10 10];
yrng = [-10 10];
a = rand;
b = rand;
f = @(x) a*x + b;
X = randi(xrng,1,1000);
Y = randi(yrng,1,1000);
ezplot(f,xrng);
hold on;
plot(X,Y,'.');
xx = xrng(1):xrng(2);
nbrSz = 2;
nx = diff(xrng);
nearestIdx = zeros(nx,1);
nbrIdxs = cell(nx,1);
for ii = 1:nx
    x = xx(ii);
    y = f(x);
    idx = find(X == x);
    [~,idxidx] = min(abs(y - Y(idx)));
    nearestIdx(ii) = idx(idxidx);
    nbrIdxIdxs = abs(Y(nearestIdx(ii)) - Y(idx)) <= nbrSz;
    nbrIdxs{ii} = idx(nbrIdxIdxs);
    plot(X(nearestIdx(ii)),Y(nearestIdx(ii)),'og');
    plot(X(nearestIdx(ii)) + [0 0],Y(nearestIdx(ii)) + [-nbrSz nbrSz],'g')
    plot(X(nbrIdxs{ii}),Y(nbrIdxs{ii}),'sy')
end