如何用Matlab根据测量点拟合成封闭图形?

小弟是Matlab新手。我测量了一个凸轮表面的若干个点(同一平面内)。请问哪位大侠知道如何用Matlab拟合成形状为凸轮的封闭图形?多谢了!

x=[
0.1 1.3 1.5 1.8 2.5 3.2 3.5 3 2 1 0 -1 -2 -2.5 -3 -2.8 -2 -1.2 -1.2 -1.3 -0.1]

y=[
3.8 3.5 2 1.5 1.5 1 0 -1 -2 -2.3 -2.7 -2.2 -1.9 -1 0 1 1.2 1.5 2 3 3.7]
如果我想对于这个图形进行分段多项式计算因该则么写?多谢!

x=[-3 -2.8 -2 -1.2 -1.2 -1.3 -0.1 0.1 1.3 1.5 1.8 2.5 3.2 3.5 3 2 1 0 -1 -2 -2.5 -3] ;
y=[0 1 1.2 1.5 2 3 3.7 3.8 3.5 2 1.5 1.5 1 0 -1 -2 -2.3 -2.7 -2.2 -1.9 -1 0];
[a,l]=cart2pol(x,y);
n=length(a);
a(n)=-a(n);
x1=-3.14:0.01:3.14;
y1=interp1(a,l,x1,'spline');
y2=interp1(a,l,x1,'cubic');
[x2,y3]=pol2cart(x1,y1);
[x3,y4]=pol2cart(x1,y2);
figure(1)
plot(x,y,'k+')
hold on
plot(x2,y3,'b-')
figure(2)
plot(x,y,'k+')
hold on
plot(x3,y4,'r-')

你给的是直角坐标,先将其转换为极坐标后用插值法得到中间值后在转换回去,就可以绘出图来了。由于不知道该曲线的极坐标形式的函数形式,我用了三次样条和三次多项式两种插值法得到的图效果都不怎么好。用多项式拟合的话效果更差,下面的程序是用多项式拟合的。你可以自己调整下拟合次数看看(为了计算方便,我将你的原始数据的后7个换到了前面,这样能保证极坐标的角度是单调递减的)

x=[-3 -2.8 -2 -1.2 -1.2 -1.3 -0.1 0.1 1.3 1.5 1.8 2.5 3.2 3.5 3 2 1 0 -1 -2 -2.5 -3] ;
y=[0 1 1.2 1.5 2 3 3.7 3.8 3.5 2 1.5 1.5 1 0 -1 -2 -2.3 -2.7 -2.2 -1.9 -1 0];
[a,l]=cart2pol(x,y);
n=length(a);
a(n)=-a(n);
x1=-3.14:0.01:3.14;
p1=polyfit(a,l,12);%12次多项式
p2=polyfit(a,l,14);%14次多项式
y1=polyval(p1,x1);
y2=polyval(p2,x1);
[x2,y3]=pol2cart(x1,y1);
[x3,y4]=pol2cart(x1,y2);
figure(1)
plot(x,y,'k+')
hold on
plot(x2,y3,'b-')
figure(2)
plot(x,y,'k+')
hold on
plot(x3,y4,'r-')
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-30
先进行坐标变换,再插值,然后再反变换。效果还算可以。
例如:已知点有八个点,横坐标依次为:x = [1 , 0.707 , 0 , -0.707 , -1 , -0.707 , 0 , 0.707];对应纵坐标依次为y = [0 , 0.707 , 1 , 0.707 , 0 , -0.707 , -1 , -0.707 ];对其进行直角坐标与极坐标转换得到转换后的坐标,r = [1 , 1 , 1 , 1 , 1 , 1 , 1 , 1]; theta = [ 0 , 0.25*pi , 0.5*pi , 0.75*pi , pi , 1.25*pi ,1.5*pi , 1.75*pi ]; 然后进行插值,由于这些点都在一条直线上,所以插值后的点也在这条直线上,例如插值的theta = 0:0.1:2*pi;那么得到的r即为和theta长度相等,内容全为1的值,然后再由极坐标变换到直角坐标下,就是一个圆了本回答被网友采纳
第2个回答  2008-07-14
凸轮的数学形态表达式要给出,不然没办法拟合,只能画图
第3个回答  2008-07-12
大概是个什么曲线呢?
如果函数表达式的大致形式,可以用lsqcurvefit和nlinfit试试
第4个回答  2008-07-13
曲线的样子有点近似葫芦形,轮廓上小下大。不知道怎么编出来。
相似回答