功能:球方程拟合/圆方程拟合

格式:
[w,er]=SphereFit(x,y,z)
[w,er]=SphereFit(x,y)

x:矩阵变量存储的x坐标元素数据
y:矩阵变量存储的y坐标元素数据,注意维数与x变量对应
z:矩阵变量存储的z坐标元素数据,注意维数与x变量对应.当此参数不存在时,则对平面圆方程进行拟合

w:返回的系数矩阵
er:返回的均方误差

说明:
1、对于球体,其拟合方程为 (x-a)^2+(y-b)^2+(z-c)^2=R^2 ，拟合的最后系数a、b、c、R^2均反映在w里,即
w = [ a , b , c , R^2 ]
误差er反映的是等式两边差的均方和,即 Er = ∑[(x-a)^2+(y-b)^2+(z-c)^2-R^2]

2、对于平面上的圆,其拟合方程为 (x-a)^2+(y-b)^2=R^2 ，拟合的最后系数a、b、R^2均反映在w里,即
w = [ a , b , R^2 ]
误差er反映的是等式两边差的均方和,即 Er = ∑[(x-a)^2+(y-b)^2-R^2]

原理:
1、对于球体,其拟合方程为 (x-a)^2+(y-b)^2+(z-c)^2=R^2，对方程进行展开然后变形可得到
x^2+y^2+z^2 = (2*x)*a + (2*y)*b + (2*z)*c + R^2-a^2-b^2-c^2

2、因为x、y、z为已知的数据,那么我们令
//下面的中括号表示一种类似矩阵
B =[ x^2+y^2+z^2 ]
A =[ 2*x , 2*y , 2*c , 1 ]
X =[ a , b , c , R^2-a^2-b^2-c^2]

3、则第1点方程变成 A*X=B ,这是一个线性方程组,则本程序即求解线性方程组的最小二乘解即可

例子:

//这里以方程 (x-1)^2+(y-2)^2+(z-3)^2=1 为例子

x=[0,1,1,1,1,2];y=[2,2,2,1,3,2];z=[3,2,4,3,3,3];[w,er]=SphereFit(x,y,z)//回车得到如下的结果,和我们预想的结果完全一样
w =
[ 1.00000000000000    2.00000000000001    3.00000000000002    1.00000000000000 ]
er =
[ 3.2311742677E-27 ]