郑州铁路职业技术学院 450000
【文章摘要】
平面直线的拟合很简单,使用p o l y f i t ( ) 函数可直接完成,空间直线的拟合要复杂一些,本文用l i n g o 和M A T L A B 各给出一种空间直线的拟合方法。
【关键词】
最小二乘法;lingo ;MATLAB ;直线拟合
2013 高教社杯全国大学生数学建模大赛C 题,要求依据观测数据讨论古塔变形问题。
塔形建筑的特点下大上小,类似椎体。水平方向的截面往往是中心对称图形,所有中心连接起来形成的线称为它的中轴线。中轴线正常情况应该是一条直线段且与水平面的法向平行,如果不平行说明塔体发生倾斜。如果中轴线是一平面曲线,说明塔体还发生了弯曲。如果是一空间曲线(不落在任何平面上),说明还发生了扭转。
后两问看似复杂,其实简单。倒是第一问求倾斜度,需要进行空间直线的拟合使得问题变得有点儿困难。依据2011 年测得的数据,先算得十四个中心点的坐标(如表所示)。下面根据这十四个点介绍两种拟合空间直线的方法。
最直接的方法是用lingo,根据最小二乘列出目标函数求解,在此设直线的参数方程为:
代码如下:
sets:
AS/1..14/:x,y,z,t;
endsets
data:
x= 写出十四个点的x 坐标,用空格隔开 ;
y= 写出十四个点的y 坐标,用空格隔开 ;
z= 写出十四个点的z 坐标,用空格隔开 ;
enddata
m i n = @ s u m ( A S ( i ) : ( a * t ( i ) + x 0 - x(i))^2+(b*t(i)+y0-y(i))^2+(c*t(i)+z0- z(i))^2);
@ f o r ( A S ( i ) : a * ( a * t ( i ) + x 0 - x(i))+b*(b*t(i)+y0-y(i))+c*(c*t(i)+z0- z(i))=0);
@ f r e e ( a ) ; @ f r e e ( b ) ; @ f r e e ( c ) ; @ for(AS:@free(t));
x0<@max(AS:x);x0>@min(AS:x);
y0<@max(AS:y);y0>@min(AS:y);
z0<@max(AS:z);z0>@min(AS:z);
经过数小时的计算,得到接近全局最优解的结果,其中每个测量点到该直线的距离的平方和为0.02006247, 这个值越小,拟合的效果越好, a = 0 . 0 1 1 5 4 0 9 6 b = - 0 . 0 0 8 8 7 2 8 1 3 c = 1 x0=566.7514 y0=522.7003 z0=7.021528 。
第二种方法是利用MATLAB,参考答案说先拟合平面,然后再在该平面上拟合直线。实际操作时发现,根本拟合不出确定的平面。说明这些点基本在一条直线上,过一条直线做平面,有无数多个不确定;当然拟合不出确定的平面。考虑到塔尖和底座的中心不在同一条垂线上,即的确有倾斜发生。则拟合出的中轴线方程应该可表示为
其中(1)是拟合直线在XOY 面上的投影,利用十四个点的x,y 坐标用polyfit 函数进行线性拟合即可。同理可拟合出(2)式。在MATLAB 中求解的代码如下(为了书写方便,将14 个点的坐标存储在c:\data .xls 文件中,存放的位置为sheet1 的b2 :d15 区域):
clear all;
d a t a = x l s r e a d ( ' c : \ data','sheet1','b2:d15');
xoy=polyfit(data(:,1),data(:,2),1);
xoz=polyfit(data(:,1),data(:,3),1);
vxy=[xoy(1) -1 0] ;
vxz=[xoz(1) 0 -1] ;
L=cross(vxy,vxz) ;
xoy 是一个向量,有两个分量,分别表示y=ax+b 中的a 和b,xoz 的两个分量分别表示z=cx+d 中的c 和d,L 表示直线的方向向量。整理后L=[0.0118 0 . 0 0 9 1 1 ] a = - 0 . 7 7 0 8 b = 9 5 9 . 5 6 8 9 c=85.017 d= -48176.0387 针对这条拟合出的直线,用lingo 计算出每个测量点到该直线的距离的平方和为0.0240063
结果发现两种方法拟合的直线很接近,第一种方法的最小二乘和较小,拟合的效果好一些(不过两个最小二乘和之差是0.004,很小了)但计算花费的时间过长,在实际应用中可根据精度需求选择使用哪种方法。
【参考文献】
[1] 谢金星. 薛毅. 著 优化建模与lindo/lingo 软件. 北京:清华大学出版社 2005
[2] 王正林龚纯 等著 精通MATLAB 科学计算. 北京:电子工业出版社 2009
[3] 司守奎. 等编著. 数学建模算法与应用. 北京:国防工业出版社 2013