Matlab从散点图中找到最佳拟合线但排除了一些数据点

时间:2016-09-15 02:12:41

标签: arrays matlab plot

我使用Matlab从散点图中找到最佳拟合线,但我需要删除一些数据点。例如,我试图找到

的最佳拟合线

x = [10 70 15 35 55 20 45 30]; y = [40 160 400 90 500 60 110 800];

现在我需要删除值超过300的所有y点,当然还要删除相应的x点,然后制作散点图并找到最合适的线。那么如何实现呢?

2 个答案:

答案 0 :(得分:2)

  

现在我需要删除值超过300的所有y点,当然还要删除相应的x点,

有标准的Matlab技巧 - 逻辑索引(例如参见matrix-indexing):

x = [10 70 15 35 55 20 45 30]; y = [40 160 400 90 500 60 110 800];
filter = (y<300);
y1 = y(filter);
x1 = x(filter);
plot(x,y,'+b',x1,y1,'or');

您可以使用 polyfit Matlab Doc)函数进行线性拟合:

ff=polyfit(x1,y1,1);
plot(x,y,'*b',x1,y1,'or',x1,ff(1)*x1 + ff(2),'-g');
grid on;

enter image description here

答案 1 :(得分:0)

最好的方法是逻辑过滤数据集,然后绘制它。 注意:数据应采用列格式。如果不是,请像x'一样旋转。

filter = (y<300);
x = x.*filter;
x = [zeros(length(x),1),x]; % this is to get the b(0) coefficient
y = y.*filter;

b = x\y;
x = x(:,2); % cleaning up column of zeros

plot(x,y,'bo')
hold on
plot([min(x),max(x)],(b(1)+b(2))*[min(x),max(x)])
hold off
axis tight