在MATLAB中将一条线拟合到2d点

时间:2011-08-05 20:22:04

标签: matlab curve-fitting

我尝试计算一条线,该线可以在MATLAB中用二维坐标给出几个点。但结果并不是我所期待的。可能有些事我理解错了。谁能帮我吗?非常感谢。代码如下:

ptsAroundVCP_L=[180,188;177,191;174,191;171,191;168,188;] % points with 2-d coordinate 
curLinePar_L=polyfit(ptsAroundVCP_L(:,2),ptsAroundVCP_L(:,1),1); % parameter of the fitted line

%% begin to plot
plotx=1:256;    
figure(11);hold on;
plot(ptsAroundVCP_L(:,2),ptsAroundVCP_L(:,1),'sb');    
ploty_L=polyval(curLinePar_L,plotx);
plot(plotx,ploty_L,'r');
hold off;

输出如下所示。但我所期望的是,在这种情况下,拟合线应该垂直。我认为线路配件有问题。 enter image description here

2 个答案:

答案 0 :(得分:4)

不可能将任何合理的多项式拟合到给定的数据:

    X     Y
   188   180
   191   177
   191   174
   191   171
   188   168

采取转置,你会得到一些合理的东西:

ptsAroundVCP_L=[180,188;177,191;174,191;171,191;168,188;]

y = ptsAroundVCP_L(:,2);
x = ptsAroundVCP_L(:,1);

p = polyfit(x, y, 2);

plotx= linspace(150, 200, 101);

figure(11);

plot(x, y, 'sb');    
hold on

ploty = polyval(p, plotx);
plot(plotx, ploty, '-');
hold off;

enter image description here

答案 1 :(得分:3)

我认为问题基本上是你不能用斜率截距形式表示垂直线。如果你在适合的情况下翻转x / y,你会得到正确的结果:

ptsAroundVCP_L=[180,188;177,191;174,191;171,191;168,188;] % points with 2-d coordinate 
curLinePar_L=polyfit(ptsAroundVCP_L(:,1),ptsAroundVCP_L(:,2),1); % parameter of the fitted line

%% begin to plot
plotx=168:180;
figure(11);hold on;
plot(ptsAroundVCP_L(:,1),ptsAroundVCP_L(:,2),'sb');
ploty_L=polyval(curLinePar_L,plotx);
plot(plotx,ploty_L,'r');
hold off;