matlab拟合离散点曲线

有X=( 0.48 , 1.58 ,2.428,3.032,3.36,3.368,2.92,2.172 ,1.368 ,0.512 ,-0.436 ,0.876,-0.48,-1.58,-2.428,-3.032,-3.36,-3.368,-2.92,-2.172,-1.368,-0.512,0.436,0.48 ) Y=(0.752,1.8572,2.39,2.24,1.766,0.8828,0.0572,-0.3136,-0.472,-0.6064,-0.7864,-0.2804,-0.752,-1.8572 ,-2.39,-2.24,-1.766,-0.8828,-0.0572 ,0.3136,0.472,0.6064,0.7864,0.752 )两组数据,画出组成的曲线,怎样用MATLAB将这条曲线拟合成椭圆方程,然后求出这个椭圆的面积,得到这个椭圆的主轴和X轴的夹角。并且得到这个椭圆的X最大值对应的X,Y坐标。求各位大神帮忙啊

问题分析

1、从数据看,与椭圆的形状吻合不是很好,尤其是短轴部分明显凹入。

2、拟合的基本思路是,使用长半轴a、短半轴b和倾角Q作为参数描述椭圆方程(进一步还可以考虑圆心不在原点,再增加两个参数),然后通过优化,目标是使得所有已知点到椭圆的总距离最短。

3、关于点到椭圆的最短距离,有很多讨论,都非常复杂,并不实用。这里采用在椭圆上取足够多的点然后直接计算的距离的方式。

4、拟合得到椭圆参数后,面积S=πab直接计算,主轴和X轴的夹角为拟合得到的数据,而关于椭圆的X最大值对应的X,Y坐标的计算,可以把点取密集一些,直接求最大值,也可以对X求导数,然后解X'=0得到对应的t,再计算X、Y。

 

参考代码

function zd
X=[0.48, 1.58,2.428,3.032,3.36,3.368,2.92,2.172,1.368,0.512,-0.436,0.876,-0.48,-1.58,-2.428,-3.032,-3.36,-3.368,-2.92,-2.172,-1.368,-0.512,0.436,0.48];
Y=[0.752,1.8572,2.39,2.24,1.766,0.8828,0.0572,-0.3136,-0.472,-0.6064,-0.7864,-0.2804,-0.752,-1.8572,-2.39,-2.24,-1.766,-0.8828,-0.0572,0.3136,0.472,0.6064,0.7864,0.752];
clf
plot(X,Y,'x')
hold on
c = lsqcurvefit(@curve,[3.5 1.5 30*pi/180 0 0],[X;Y],X*0)
a = c(1);
b = c(2);
Q = c(3);
T=linspace(0,2*pi,100);
x1=a*cos(T);
y1=b*sin(T);
x=x1*cos(Q)-y1*sin(Q);
y=x1*sin(Q)+y1*cos(Q);
plot(x,y,'r--')
% 椭圆的面积
S = pi*a*b
% 椭圆的X最大值对应的X,Y坐标
t=fzero(@(t)-a*cos(Q)*sin(t)-b*sin(Q)*cos(t),0);
x=a*cos(t)*cos(Q)-b*sin(t)*sin(Q)
y=a*cos(t)*sin(Q)+b*sin(t)*cos(Q)
plot(x,y,'mo')
legend('原始数据','拟合曲线','X最大值',4)
% 椭圆的主轴和X轴的夹角
Q = Q * 180/pi

function f = curve(c,xy)
a = c(1);
b = c(2);
Q = c(3);
t=linspace(0,2*pi,500);
x1=a*cos(t);
y1=b*sin(t);
x=x1*cos(Q)-y1*sin(Q) + c(4);
y=x1*sin(Q)+y1*cos(Q) + c(5);
f = xy(1,:)*0;
for i=1:length(xy)
    f(i) = min( sqrt((xy(1,i)-x).^2 + (xy(2,i)-x).^2 ) );
end

 

结果

程序输出:

c =
    3.4794    1.4809    0.5155   -0.0066         0

S =
   16.1875

x =
    3.1141

y =
    1.3654

Q =
   29.5357

也就是说a=3.48,b=1.48,Q=29.5度,S=16.2,如图所示。

温馨提示:内容为网友见解,仅供参考
无其他回答

matlab如何将离散点拟合成曲面
可以使用Matlab中的fit函数来将离散点拟合成曲面。具体步骤如下 1. 将离散点数据存储在一个矩阵中,例如XYZ分别表示离散点的横坐标纵坐标和高度。2. 使用fit函数进行拟合,例如使用三次多项式拟合,可以使用以下代码 f = fit([X,Y],Z,poly33);其中,poly33表示三次多项式拟合。3. 可以使用plot函数...

Matlab用傅里叶级数拟合离散点或连续函数
拟合过程本质上是用一系列正交函数(如sin和cos),每个周期都有对应的系数,周期越小,表示分辨率越高,曲线拟合更精细。例如,一个周期为T的函数可表达为:[公式],其中[公式]为曲线平均高度,[公式]则是对每个周期函数在点t处放大或缩小f(t)的倍数。在Matlab中,可以利用trapz函数对离散数据进行积...

怎么在matlab中对离散点进行曲线拟合,求参数!
拟合出f(x)分布的系数 然后,根据xy分别是离散点的横纵坐标(数值至少10组以上)首先,进行参数估计 p(Xn;P)*p(X2。然后求一个P。不妨假设有高斯噪声干扰ML估计是这个意思,现在只需要写出上面的概率密度函数就可以了。按你的模型,数据X的分布是与参数有关的.,理想情况下数据y是由完全由参数决...

matlab拟合离散点曲线
y,'mo')legend('原始数据','拟合曲线','X最大值',4)% 椭圆的主轴和X轴的夹角Q = Q * 180\/pifunction f = curve(c,xy)a = c(1);b = c(2);Q = c(3);t=linspace(0,2*pi,500);x1=a*cos(t);y1=b*sin(t);x=x1*cos(Q)-y1*sin(Q) + c(4);y=x1*sin(Q)+y1*c...

matlab离散点拟合曲线与直线y=6*x的交点怎么求
这类问题,应该先将离散点用数据拟合的方法(如,nlinfit函数)拟合出其符合离散点的曲线方程y(x),然后用solve函数命令解出曲线与直线交点的坐标点(x,y)。

matlab如何将离散点拟合成曲面
1、在新建的脚本文件编辑框键入以下代码 clear clc 产生数据 x=-20:2:20;y=-20:2:20;[X,Y]=meshgrid(x,y);Z=3*X.^3-4*X+2*Y.^4+3*Y^3;mesh(X,Y,Z)2、待拟合的曲面形状为,3、首先,在APP选项框中打开Curve fitting工具。工具位置如图所示。4、单击curve fitting之后,打开页面...

用matlab进行离散数据的曲线拟合时 只能进行多项式拟合吗 如果已知拟 ...
定义拟合函数 function F = myfun(x,xdata)F = x(1)*exp(x(2)*xdata);在命令窗口输入:xdata = [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];ydata = [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];x0 = [100; -1] % 初始点 ...

请问Matlab中如何将离散点连成曲线,谢谢了!
>x=[0 1 2 3 4 5 6 7 8 8.85],y=[13 12.1 11 10.5 10.1 9.9 9.6 9.3 9.0 8.9] \/\/MATLAB中输入X及Y的数值 >xx=0:0.01:10; \/\/对X轴进行划分成若干等份,设置好参数 >yy=spline(x,y,xx);\/\/三次方样条数据插值 >plot(x,y,'o',xx,yy) \/\/输出结果 程序...

Matlab 将离散点拟合画出图形之后求出相应横坐标
拟合参数:a0 = 3.029 (1.31, 4.747)a1 = -0.3337 (-5.082, 4.414)b1 = -0.8111 (-2.155, 0.5323)a2 = -1.771 (-4.21, 0.6682)b2 = -0.1701 (-6.963, 6.622)a3 = -0.4454 (-4.306, 3.415)b3 = 0.7119 (-2.117, 3.541...

matlab将离散点帮我拟合成曲线了(比如使用plot函数)~怎么得到该曲线的公...
4.6146 4.2795 3.7940 3.0167 2.1010 0.2311];p = polyfit(x,y,2);xx = min(x):.1:max(x);yy = polyval(p,xx);f = poly2str(p,'x');hold on;plot(x,y,'bo');plot(xx,yy,'r-');legend('原始数据点','2次拟合曲线');title(['y =' f]);grid on;hold off;...

相似回答