【问题标题】:Matlab curve fitting a set of 2D pointsMatlab曲线拟合一组二维点
【发布时间】:2017-03-13 07:32:50
【问题描述】:

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

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

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

         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 是数据点。我不确定问题出在哪里。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您正在尝试拟合PV(:,1) = f( PV(:,2) ),即直接拟合y=f(x)。但正如您从您的观点中看到的那样,对于x 的某些值(在x=0x=-15 附近),有多个y 值。因此,您不能在数学上在此处将 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,:) 再到PV(3,:) 等等。如果不是这种情况(例如,PV(1,:) 的 x 值为 ~-10,PV(2,:) 的 x 值为 ~0,PV(3,:) 跳回到 x ~-10),那么您就处于深度 st 中。

    【讨论】:

    • 如果点是无序的,如何获得相同的结果?
    • @Sade deep st 正如我已经说过的。您需要订购它们,否则配件将毫无意义。想想connect the dots,有人随机打乱了点的数字……你不会得到想要的输出……
    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2015-03-22
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多