最佳二乘圆的推导和Matlab实现
1 理论推导
最近在学习的过程中需要使用最佳二乘圆和最佳二乘椭圆以及其他一些最佳二乘的二次曲线,恰巧又刚好学过一点矩阵论。刚好拿来练习一下。
首先搞清楚问题,最佳二乘拟合圆,即输入为散点集{ (xi,yi)∣xi∈R,yi∈R}\{(x_i,y_i)|x_i\in \R,y_i\in \R\}{ (xi,yi)∣xi∈R,yi∈R},定义新的向量{ X∣X=[x1 x2...xn]T∈Rn}\{X|X=[x_1\ x_2...x_n]^T\in \R^n\}{ X∣X=[x1 x2...xn]T∈Rn}和{ Y∣Y=[y1 y2...yn]T∈Rn}\{Y|Y=[y_1\ y_2...y_n]^T\in \R^n\}{ Y∣Y=[y1 y2...yn]T∈Rn}。我们都知道不共线的三点能够唯一确定一个圆(共线的三点确定的圆圈半径无穷大,圆心在无穷远点)。那么当上面的n=3n=3n=3时,我们能够唯一的确定圆圈(把直线归纳为特殊的圆);当上面的n>3n>3n>3时,就存在可能我们新加入的点并不在原来的圆上。最小二乘的思想是,多个点求出的圆与输入散点集合的距离尽可能的近。这里的近一般是使用向量间的欧式距离进行描述。我们知道在二维平面,唯一确定一个圆需要三个参数即圆心横坐标,圆心纵坐标以及半径三个参数,即我们需要求出这三个参数即可。
然后开始我们正式的推导,我们在中学时代就已经知道,圆方程的一般形式是:
(x−x0)2+(y−y0)2=R2 (x-x_0)^2+(y-y_0)^2=R^2 (x−x0)2+(y−y0)2=R2
将其展开为:
x2+y2−2xx0−2yy0+x02+y02=R2 x^2+y^2-2xx_0-2yy_0+x_0^2+y_0^2=R^2 x2+y2−2xx0−2yy0+x02+y02=R2
[数学从来没有简单或复杂,只有已知与未知。]接下来这一步是关键,目的在于把关于x0,y0,Rx_0,y_0,Rx0,y0,R的非线性方程转换为线性方程,然后利用矩阵的工具进行求解。变换后的方程为:
x2+y2+ax+by+c=0 x^2+y^2+ax+by+c=0 x2+y2+ax+by+c=0
其中:
{
a=−2x0b=−2y0c=x02+y02−R2 \begin{cases} \begin{aligned} a &= -2x_0\\ b &=-2y_0\\ c &=x_0^2+y_0^2-R^2 \end{aligned} \end{cases} ⎩⎪⎨⎪⎧abc=−2x0=−2y0=x02+y02−R2
我们使用一个非线性变换,把关于x0,y0,Rx_0,y_0,Rx0,y0,R的非线性方程变成了关于a,b,ca,b,c

这篇博客介绍了如何通过矩阵论的方法推导最佳二乘圆的解析解,并提供了Matlab实现代码。文章首先阐述了问题背景和理论推导,通过非线性变换将问题转化为线性方程组,然后利用广义逆求解。最后,给出了Matlab代码示例,展示了如何应用推导结果进行实际的圆拟合操作。
5019

被折叠的 条评论
为什么被折叠?



