功能:圆柱面数据拟合

格式:
[a,m,er]=CylindFit(x,y,z)
x:提供的x方向坐标数据矩阵
y:提供的y方向坐标数据矩阵
z:提供的z方向坐标数据矩阵

a:返回的圆柱面方程参数,具体可看说明
m:返回的母线向量方向
er:返回的均方误差和

说明:

1、本程序拟合的圆柱面方程为

(x-a(1)*z-a(2))^2 + (y-a(3)*z-a(4))^2 = a(5)^2

其中母线向量为m=[m(1) , m(2) , m(3) ] 且 a(1)=m(1)/m(3) , a(3)=m(2)/m(3)；圆柱底面半径为 a(5)。这个方程可理解为先让x平移-a(2),y平移-a(4),z平移0然后按母线向量m得出柱面方程.

2、从第1点可知,本程序的母线向量中的 m(3)不能为0,如果不确定是否为0,可分别将x、y、z变量做最后一个输入,即CylindFit(x,y,z)或者CylindFit(x,z,y)或者CylindFit(y,z,x)然后选择返回值er最小的结果作为最终结果即可。

参考:何国庆.柱面方程的一点注记[J].高等数学研究,2012,15(2):25-26

例子:

s=0:0.1:6;
s=s';
x=10*cos(s);
y=10*sin(s);
z=x*y;
//以上面的代码产生测试的数据,如果实际使用则应该是直接导入的外部数据

[a,m,er]=CylindFit(x,y,z)//回车执行命令后得到如下结果,很明显和我们原始真实方程 x^2+y^2=10^2 拟合得非常好
a =
[ 0.00000000000000   -1.2212453270E-15    0.00000000000000   -9.2981178312E-16    10.0000000000000 ]
m =
[ 0.00000000000000    0.00000000000000    1.00000000000000 ]
er =
[ 4.0358827391E-12 ]