Matlab曲线拟合一组2D点

时间:2016-10-31 08:01:34

标签: matlab

目前我有一组2D点,如下所示。 Random 2D points

我需要获得点的拟合曲线以确定物体的形状。

Matlab提供spline fitting function。我必须将它应用于一组点。但是,我获得的结果如下所示。spline fit

         xx = linspace(-10,10,20);
         pp2 = splinefit(PV(:,1),PV(:,2),8,5);
         y2 = ppval(pp2,xx);

         plot(x,y,'.',xx,y2), grid on
         axis([-10 10 -10 10]);

PV是数据点。我不确定问题出在哪里。

1 个答案:

答案 0 :(得分:0)

您正试图让PV(:,1) = f( PV(:,2) )符合直接 y=f(x)。但正如您可以从您的观点中看到的,y的某些值(xx=0附近)有多个x=-15值。因此,您不能在数学上使y=f(x)适合任何函数f(.)

您可以使用辅助参数t拟合参数曲线:

t = linspace(0, 1, size(PV,1));
ppx = splinefit(PV(:,1),t,8,5);  % x = f_x(t)
ppy = splinefit(PV(:,2),t,8,5);  % y = f_y(t)

现在您可以绘制曲线(f_x(t), f_y(t))

tt = linspace(0, 1, 50);
x2 = ppval(ppx, tt);
y2 = ppval(ppy, tt);
plot( PV(:,1), PV(:,2), '.', x2, y2); grid on;
axis([-10 10 -10 10]);

注意
此拟合方案基于PV中的点有序的假设:也就是说,曲线应该从PV(1,:)PV(2,:)然后到{ {1}}等等。如果不是这种情况(例如,PV(3,:)的x值为〜-10,PV(1,:)的x值为~0且PV(2,:)跳回x~-10)那么你就是在深s& #t。