最小二乘法拟合椭圆

转载:http://blog.sina.com.cn/s/blog_471e6c930102x96q.html

为了很好的进行椭圆方程拟合,本文先对椭圆基本知识进行复习,后进行非标准椭圆方程拟合公式推导,最后有matlab代码的实现。

1.       用最小二乘法做椭圆拟合

1.1.  椭圆标准方程

        对椭圆印象最深的就是高中时教过的,一条绳子,两个钉子,一支笔,就可以绘制出一个椭圆。固定两个钉子,让钉子之间的距离小于绳子的长度,然后用绳子的两端分别固定在两个钉子上,放一支笔在绳子的任意位置,拉紧线进行划线,画出来的完成图形就行椭圆。

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

然后用数学知识来解释,这两个钉子做为两个焦点,绳子的长度为2a(这里用2a,而不是a,仅是为了后续写标准的时候好看而已),钉子之间的距离为2c。为了更好的写方程,建立一个标准方程的坐标系。以两个钉子的连线中点为坐标原点,钉子连线所在的方向为x方向,绘制xoy坐标系。

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

其中绳子的长度为

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

两个钉子(焦点)的距离为

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

两个焦点的坐标分别为(-c,0)和(c,0)。

然后利用绳子长度的定义进行标准方程证明,具体如下:

设椭圆上任意一点M坐标为(x,y),则根据椭圆定义,写方程如下:

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

继续证明如下:

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

1.2.  椭圆非标准方程

对于椭圆的非标准方程,可以写成以下形式:

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码
利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码
利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码
利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码
利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码

以上,是推导过程。由于是在word中编辑的文档,为了省事,这里直接截图放置在博客中,分享给大家。

以下是matlab封装的最小二乘法拟合椭圆方程的函数
function ellipse_paras = ellipsefit(X,Y,n)
% 椭圆方程:x^2+Axy+By^2+Cx+Dy+E=0
% 采用最小二乘法进行拟合椭圆
% Input: X --- a vector of x measurements
%        Y --- a vector of y measurements
%        n --- the number of measurements
% author:Sigrid,2018-03-19
% M*[A B C D E]' = N
%初始化椭圆方程结果
ellipse_paras.A=0;
ellipse_paras.B=0;
ellipse_paras.C=0;
ellipse_paras.D=0;
ellipse_paras.E=0;
x=X;
y=Y;
xy=x.*y;
x2=x.*x;
y2=y.*y;
x3=x2.*x;
y3=y2.*y;
x2y=x2.*y;
xy2=x.*y2;
x4=x2.*x2;
y4=y2.*y2;
x3y=x3.*y;
xy3=x.*y3;
x2y2=x2.*y2;
% Construct M
M=[ sum(x2y2)    sum(xy3)    sum(x2y)    sum(xy2)    sum(xy);
    sum(xy3)     sum(y4)     sum(xy2)    sum(y3)     sum(y2);
    sum(x2y)     sum(xy2)    sum(x3)     sum(xy)     sum(x) ;
    sum(xy2)     sum(y3)     sum(xy)     sum(y2)     sum(y) ;
    sum(xy)      sum(y2)     sum(x)      sum(y)      n       ];
% Construct N
N = -[sum(x3y) sum(x2y2) sum(x3) sum(x2y) sum(x2)]';
P=M\N;
A=P(1);
B=P(2);
C=P(3);
D=P(4);
E=P(5);

 

 

 

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值