为此可根据三次自然样条插值法,增加两个自然边界条件:
S〞(x0)=y0〞=0
S″(xn)=yn″=0
若令Mi=S″(xi),hi=xi-xi-1则
S″(x)=(xi-x)Mi-1/hi+(x-xi-1)Mi/hi (i=1,2,3,…,n)
对上式进行两次积分得到:
S(x)=(xi-x)Mi-1/hi/6+(x-xi-1)Mi/hi/6+c1(xi-x)+c2(x-xi-1) xi-1<x<xi (i=1,2,3,…,n)
根据条件2,S(x)=yi,可以确定c1,c2,最终得到S(x)表达式:
S(x)=(xi-x)Mi-1/hi/6+(x-xi-1)Mi/hi/6+(xi-x)(yi-1/hi-hiMi-1/6)+(x-xi-1)(yi/hi-hiMi/6)
根据条件3,对上式求左右导数并令其相等,可得到n-1个方程:
hiMi/2-(Mi-Mi-1)hi/6+(yi-yi-1)/hi=-hi+1Mi/2-hi+1(Mi+1-Mi)/6+(yi+1-yi)/hi+1 (i=1,2,3…,n-1)
令ui=hi+1/(hi+hi+1),vi=[(yi+1-yi)/hi+1-(yi-yi-1)/hi]/hi+hi+1,上述方程可简化为:
(1-ui)Mi-1+2Mi+uiMi+1=vi (i=1,2,3,…,n-1)
再结合考虑两端边界条件:2M0+u1M1=v1和unMn-1+2Mn=vn,最后方程矩阵如下:
如果边界条件假定为如前所述的自然边界,则u0=0,v0=0,un=0,vn=0,也即M0=Mn=0。
求解方程组得到Mi(i=0,1,2,… ,n),代入S(x)即为相临两点间的三次样条函数,n段三次样条曲线以已知数据点为临界衔接点进行连接便可得出一条通过所有数据点的平滑曲线。
5 MATLAB实现样条插值
在本系统中,路线数据的采集点以经纬度描述,整条路线类似于二维曲线,以实验测试路段为例,其采集点如下:
表一 路线采集点数据
三次样条插值过程实质上就是求解三次样条函数的过程,在实际应用中,首先必须根据具体样本点情况构造出合适的三次样条函数,但这需要工程技术人员具备良好的数学功底和数据分析能力。此外,对于离散样本点较多的情况,编制计算机程序求解大方程组也不简单。
MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量专业领域的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域 的分析、仿真和设计工作。就数值插值而言,MATLAB提供有一维、二维、三维插值方法,对于一维插值可通过函数 interp1(x,y,xi,'method')实现,其中x,y是已知数据点的值,xi是要内插的数据点,method是内插方法,可以指定为一次 (linear)、三 次(cubic)方程式或spline函数,其预设方法是linear。如果数据的变化较大,以 spline函数内插所形成的曲线最平滑 ,所以效果最好。而三次方程式所得到的内插曲线平滑度,则介于线性与spline函数之间。
对表一数据进行插值,步骤如下:
1. 分析经纬两组数据,以相对单调性较好的一组为自变量确定插值精度。表一数据比较简单,可以经度为自变量,0.1’为步长确定需要内插 数据点矩阵(GPS接收机输出的经纬度数据由度数和分数组合在一起,如10352.0329表示103度52.0329分,在应用中需要统一转换成以分为 单位。本文的实验测试路线较短,不涉及度数部分的变化,为了直观,暂不做转换)。
2. 将已知数据点列成12*2矩阵形式。
3. 调用interp1(x,y,xi,'method')函数,选择内插方法为spline,所得结果与内插数据点构成2*27矩阵,该矩阵每列上的两个数据即为拟合路线上位置点经纬度。
对应程序如下:
x=[10352.0329 10352.3988 10353.0197 10353.2919 10353.246 10353.3482
10353.5829 10353.7319 10354.1310 10354.2028 10354.5745
10354.6678; 3018.2936 3018.6298 3018.7247 3019.1021 3019.2701 3019.5516
3019.844 3020.0859 3020.9478 3021.167 3022.5694 3022.7908]';
1.03544329000000 1.03545329000000 1.03546329000000 ;
0.30182936000000 0.30186004069566 0.30187182180522
0.30186964693605 0.30185845969551 0.30184320369097
0.30182882252981 0.30182025981940 0.30182245916710
0.30184036418029 0.30187889352712 0.30192733665639
0.30193266863021 0.30193987411039 0.30199701768689
0.30198992627645 0.30198730620686 0.30200882997022
0.30203060327638 0.30205012****16 0.30207062461427
0.30209530780615 0.30212717111085 0.30216587747376
0.30220651085041 0.30224372965360 0.30227219229616]
由于步长足够小,产生的数据相对原数据丰富的多,拟合出的路线曲线平滑,这可通过函数plot()进行效果显示。在具体路线的拟合过程中,可根据GPS数据采集点的密度改变插值步长,以达到实际控制要求。
文章评论(0条评论)
登录后参与讨论