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,... 有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... 有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坐标。求各位大神帮忙啊 展开
 我来答
璩楚扈鸿振
2019-02-11 · TA获得超过3720个赞
知道大有可为答主
回答量:3101
采纳率:24%
帮助的人:175万
展开全部

问题分析
1、从数据看,与椭圆的形状吻合不是很好,尤其是短轴部分明显凹入。
2、拟合的基本思路是,使用长半轴a、短半轴b和倾角Q作为参数描述椭圆方程(进一步还可以考虑圆心不在原点,再增加两个参数),然后通过优化,目标是使得所有已知点到椭圆的总距离最短。
3、关于点到椭圆的最短距离,有很多讨论,都非常复杂,并不实用。这里采用在椭圆上取足够多的点然后直接计算的距离的方式。
4、拟合得到椭圆参数后,面积S=πab直接计算,主轴和X轴的夹角为拟合得到的数据,而关于椭圆的X最大值对应的X,Y坐标的计算,可以把点取密集一些,直接求最大值,也可以对X求导数,然后解X'=0得到对应的t,再计算X、Y。
 
参考代码
12345678910111213141516171819202122232425262728293031323334353637383940function zdX=[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];clfplot(X,Y,'x')hold onc = 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) = <a
href="http://www.baidu.com/s?wd=min&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLrj-WnvP-njuBnARsn1m10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHTdrjR3njTsPWfYn1n1nHmY"
target="_blank"
class="baidu-highlight">min</a>( sqrt((xy(1,i)-x).^2 + (xy(2,i)-x).^2 ) );end
 
结果
程序输出:
1234567891011121314c =    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,如图所示。

富港检测技术(东莞)有限公司_
2024-04-02 广告
正弦振动多用于找出产品设计或包装设计的脆弱点。看在哪一个具体频率点响应最大(共振点);正弦振动在任一瞬间只包含一种频率的振动,而随机振动在任一瞬间包含频谱范围内的各种频率的振动。由于随机振动包含频谱内所有的频率,所以样品上的共振点会同时激发... 点击进入详情页
本回答由富港检测技术(东莞)有限公司_提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式