我使用Matlab从散点图中找到最佳拟合线,但我需要删除一些数据点。例如,我试图找到
的最佳拟合线x = [10 70 15 35 55 20 45 30]; y = [40 160 400 90 500 60 110 800];
现在我需要删除值超过300的所有y点,当然还要删除相应的x点,然后制作散点图并找到最合适的线。那么如何实现呢?
答案 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;
答案 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