gpt4 book ai didi

matlab - 如何在 MATLAB 中绘制通过大多数给定点的完美直线?

转载 作者:行者123 更新时间:2023-12-04 15:27:04 25 4
gpt4 key购买 nike

有人能帮我弄清楚如何从给定的点集通过这些点中的大多数(可能是 20 个点中的 5-6 个点)绘制一条完美的直线吗?请注意,这不是线拟合问题,而是应该在大多数给定点之间绘制完美的线(水平、垂直或稍微倾斜)。

这是 MATLAB 代码:

e=[161    162   193   195   155    40   106   102   125   155   189   192   186   188   185   186   147   148   180   183];

f =[138 92 92 115 258 124 218 114 125 232 431 252 539 463 643 571 582 726 726 676];

figure;scatter(f, e, 5, 'red');

axis ij;

这是图片: enter image description here

最佳答案

由于您希望直线穿过大部分点,所以这听起来很像直线拟合问题,尽管您说它不是。您是否看过 Theil-Sen 估计量 (for example this one on fex),这是一种线性回归,忽略了大约 30% 的异常值。

如果你只是想要一条穿过极值的线,你可以这样做:

% Setup data
e = [161 162 193 195 155 40 106 102 125 155 189 192 186 188 185 186 147 148 180 183];
f = [138 92 92 115 258 124 218 114 125 232 431 252 539 463 643 571 582 726 726 676];
% Create scatterplot
figure(1);
scatter(f, e, 5, 'red');
axis ij;

% Fit extrema
[min_e, min_idx_e] = min(e);
[max_e, max_idx_e] = max(e);
[min_f, min_idx_f] = min(f);
[max_f, max_idx_f] = max(f);
% Determine largest range and draw line accordingly
if (max_e-min_e)>(max_f-min_f)
line(f([min_idx_e, max_idx_e]), e([min_idx_e, max_idx_e]), 'color', 'blue')
text(f(max_idx_e), e(max_idx_e), ' Extrema')
else
line(f([min_idx_f, max_idx_f]), e([min_idx_f, max_idx_f]), 'color', 'blue')
text(f(max_idx_f), e(max_idx_f), ' Extrema')
end

% Fit using Theil-Sen estimator
[m, e0] = Theil_Sen_Regress(f', e');
line([min_f, max_f], m*[min_f, max_f]+e0, 'color', 'black')
text(max_f, m*max_f+e0, ' Theil-Sen')

但是,正如您会注意到的那样,没有一种解决方案会自动自动拟合这些点,这仅仅是因为异常值太多,除非您事先过滤掉这些异常值。因此,您最好使用 Shai 和 McMa 提出的 RANSAC 算法。 Line Fit Example

关于matlab - 如何在 MATLAB 中绘制通过大多数给定点的完美直线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com