MATLAB - 内插一条每条X多个Y的2D曲线

时间:2014-08-13 17:05:42

标签: matlab curve-fitting spline interpolation

我想插入一个数据集,但给定的X可以有多个Y' s,如下所示:

A(:,1:2,1)=
95.2343   70.6159
   96.4501   71.5573
   97.4430   72.7315
   98.9743   72.8699
  100.0470   71.7690
  100.3872   70.2699
  100.7797   68.7837
  102.1478   68.0814
  103.6851   68.0521
  105.0307   68.7966
  105.8972   70.0666
  106.7177   71.3665
  107.7095   72.5416
  108.9175   73.4924
  110.3574   74.0309
  111.8943   73.9859
  113.3936   73.6446
  114.6645   72.7794
  115.5911   71.5522
  116.2426   70.1591
  116.3922   68.6286
  116.3503   67.0914
  116.7771   65.6147
  117.9045   64.5692
  119.4065   64.2425
  120.9432   64.2923
  122.2526   65.0975
  122.9486   66.4682
  122.8841   68.0043
  122.5492   69.5051
  122.2403   71.0109
  122.0819   72.5402

这些是沿着蛇体的点,从上到下的视频数字化。他们的姿势经常会导致每个X有2个或更多Y点,并且因为他们需要保持一致的XY框架时(通常非常显着)转动,我不能只旋转我的X和Y.

我可以使用cscvn制作样条线函数,使用fnplt绘制时看起来很棒!但是当我尝试使用ppval来获取值时,这一切都变成了废话,我得到的两条曲线看起来就像蛇或fnplt中显示的内容。

图片在这里: http://imgur.com/aYJ0Ftj

我想要的只是为这些点拟合曲线,并将该曲线转换为一系列可能200个XY点。

我假设有一些非常简单的回答,有些命令我从未在我的搜索中出现,但我找不到它的生命。这远远超出了我通常的技能(我更习惯于爬过沼泽地捕捉任何鳞片状或粘糊糊的东西),所以我确定我忽略了一些对熟练的MATLAB用户来说非常明显的东西。 / p>

谢谢!

2 个答案:

答案 0 :(得分:4)

也许这就是你已经尝试过的,但评论有点小,所以这里有一个可以帮助你的想法

x = [1 2 3 4 5 6 7 6 5];
y = [1 4 4 3 2 2 2 3 4];
t = 1:length(x);
figure; plot(x,y)


xx = interp1(t,x,1:.01:length(x),'pchip');
yy = interp1(t,y,1:.01:length(x),'pchip');

hold on; plot(xx,yy,'g')

我通过插入x和y作为t的函数来避免对interp的唯一值限制。

答案 1 :(得分:0)

好的,多亏了Yvon和Trogdor,我设法粗略地将一些代码拼凑在一起:

ht=[1:32];
tx=linspace(1,32,500);
m=ht;
m(2:3,:)=squeeze(A(:,:,i))';
m1=m(1,:);
m2=m(2,:);
m3=m(3,:);
SFX=spline(m1,m2);
pSFX=ppval(SFX,tx);
SFY=spline(m1,m3);
pSFY=ppval(SFY,tx);
AS(:,1,i)=pSFX;
AS(:,2,i)=pSFY;
plot(AS(:,1,i),AS(:,2,i),'Marker','o');

它充满了无意义的变量,步骤和冗余,但我是一名解剖学家,所以这让我感到舒服(严肃地说,谷歌'喉返神经')。

如何为所有人添加声誉?