[英]Matlab curve fitting a set of 2D points
我需要獲得點的擬合曲線以確定物體的形狀。
Matlab提供樣條擬合功能 。 我必須將它應用於一組點。 但是,我得到的結果如下所示。 。
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是數據點。 我不確定問題出在哪里。
你試圖擬合PV(:,1) = f( PV(:,2) )
,即直接擬合y=f(x)
。 但是從你的觀點可以看出,對於某些x
值( x=0
和x=-15
), y
有多個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)然后你就陷入了困境。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.