资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章 水准网平差程序设计,本章难点:,1,、近似高程计算,2,、最短路线的计算,3,、误差方程及法方程的构建,4,、直接计算出法方程的系数矩阵,B,T,PB,和常数矩阵,B,T,PL,第三章 水准网平差程序设计本章难点:,1,该课程中所采用的平差模型为间接平差,即所选的独立参数的个数等于必要观测数,这样可以将每个观测值表示成这,t,个参数的函数,组成观测方程。,间接平差的函数模型:,平差时一般对所选参数取近似值,代入上式,并令,由此可得误差方程,式中,为误差方程常数项,一、水准网间接平差算法概述,该课程中所采用的平差模型为间接平差,即所选的独立参数,2,采用的平差准则为最小二乘法,:,不难看出总共有,n+t,个参数,而所列的误差方程只有,n,个,故只采用误差方程是不能解求,n+t,个参数的,还需寻找其他的条件。按着最小二乘法法则,对,t,个参数求偏导,得出式子,由误差方程和求偏导后得到的式子,可唯一确定,n+t,个待求量。并有这两个 式子可以推出法方程,如为:,从而可求得,将该式代入到误差,即可求得改正数 。,采用的平差准则为最小二乘法: 不难看出总共有n+t个参数,3,从而平差值结果为:,本课程中以未知点高程值作为未知参数,以高差作为观测值,以观测路线长度的倒数作为观测值的权,采用间接平差模型进行平差计算。,其平差的一般步骤如下:,1.,根据平差问题选定未知参数;,2.,根据观测值与未知参数之间的函数关系建立误差方程式,若误差方程是非线性方程,还要引入参数近似值,将误差方程线性化;,3.,由误差方程组成法方程;,从而平差值结果为: 本课程中以未知点高程值作为未知,4,4.,解算法方程,求取未知参数;,5.,精度评定。,平差程序设计不仅仅是“写程序”,测量程序设计还包括程序功能设计、平差模型选择、算法选择、数据接口设计等内容。,一般应按数据处理和计算功能的划分,将网平差程序分为若干独立函数(或过程),每个函数(或过程)完成特定的计算或操作,当需进行某种平差时,再调用这些函数即可。,4.解算法方程,求取未知参数;,5,二、水准网平差程序设计数据组织及处理流程,二、水准网平差程序设计数据组织及处理流程,6,2.1,水准网平差中数据的组织,(,数据文件格式的设计,),水准网平差程序设计中数据的组织是一个关键问题。文件格式的设计就是规定数据文件中包含的内容、各类数据的先后顺序以及各种数据的书写格式。从程序设计者的角度来说,数据文件格式设计相当于告诉用户应当怎样准备数据文件,当然,程序中也必须按照约定的格式从文件中读取数据。数据文件由四个部分组成,其格式如下。,1,)基本信息部分:该部分仅占一行,其内容为,已知点数,N1,,未知点数,N2,,高差观测值个数,NS,。,2.1 水准网平差中数据的组织(数据文件格式的设计),7,2,)已知点高程信息:该部分占,N1,行,每行格式为,已知点编号,该点的高程,(单位:米)。,注意:在给控制点编号时,先给待定点编号,然后给已知点编号。编号从,1,开始顺序编号。,3,)高差观测值信息:该部分占,NS,行,每行格式为,测段编号,测段起点编号,测段终点编号,测段观测高差(单位:米),测段长度(单位:千米)。,4,)点名信息:该部分占,N,(,N=N1+N2,)行,每行格式为,水准点编号,该点名称,其中点名长度不超过,8,个字符,即,4,个汉字。但,最好用字符串命名,。,2)已知点高程信息:该部分占N1行,每行格式为,8,以下为一具有两个已知点、三个待定点和七个测段的水准网的示例数据,打开,TXT,文件文件后,内容如下。,2 , 3 , 7,4 , 5.016,5 , 6.016,1 , 4 , 1 , 1.359 , 1.1,2 , 4 , 2 , 2.009 , 1.7,3 , 5 , 1 , 0.363 , 2.3,4 , 5 , 2 , 1.012 , 2.7,5 , 1 , 2 , 0.657 , 2.4,6 , 1 , 3 , 0.238 , 1.4,7 , 3 , 5 ,-0.595 , 2.6,1 ,P1,2 ,P2,3 ,P3,4 ,A,5 ,B,以下为一具有两个已知点、三个待定点和七个测段的水准网,9,2.2,数据存储方案设计,这里的数据存储是指数据在内存中的存储。测量平差程序中用到的数据较多,一般先将磁盘中的数据读到内存中,按照不同的类别有序地放在变量或数组中,然后再进行平差计算,最后将计算结果写到磁盘文件中。,2.2 数据存储方案设计 这里的数据存储是指数据在内,10,要整洁、简练、实用、方便有关数据的输入或输出,必要的话要考虑和用户的交互,尽量不要画蛇添足。,三、水准网平差界面设计,要整洁、简练、实用、方便有关数据的输入或输出,必要,11,水准网平差输入界面一,水准网平差输入界面一,12,水准网平差输入界面二,水准网平差输入界面二,13,水准网平差输入界面三,水准网平差输入界面三,14,四、高差闭合差的计算与检查,为了检查水准高差的质量,水准网平差前一般进行附合水准路线闭合差计算与多边形闭合差计算,并进行闭合差的检核。,1.,附合水准路线高差闭合差的计算,a,)最短路线搜索算法,“邻接点”:若一个点借助,另一个点与目标点发生了,联系,称另一个点是这个点,的,“邻接点”,。,如果一个点与目标点有直接联系,我们也把目标点称为这个点的邻接点。,四、高差闭合差的计算与检查 为了检查水准高差的质量,,15,显然邻接点不是唯一的,但是我们规定每个点只有一个邻接点;当网中每个点的邻点都唯一确定时,顺着邻接点又可找到邻点的邻接点,这样一层一层地找下去,最终找到目标点,每个点到目标点的路线是唯一确定的。,根据邻接点的概念可知,任何一点沿邻接点到目标点的路线长度是其邻接点到目标点的路线长度再加上该点与其邻接点之间的路线长度。当一个点有多个点可以作为邻接点时,只选择路线最短的一点作为邻接点,这样就可保证沿邻接点到目标点的路线是最短路线。,显然邻接点不是唯一的,但是我们规定每个点只有一个邻接,16,设,p1,选择,p2,作为邻接点,,P2,到目标点的路线长度为,S,2, p1,到,p2,的路线长度为,S,12,,则,p1,到目标点的路线长度,S,1,为,S,1,=S,2,+S,12,若还有一点,P3,也是,P1,的邻接点,则经由,P3,到目标点的路线长度为,S,1,=S,3,+S,13,为了寻求最短路线,显然当,S,1,S,1,+S,12,(,条件,1),p2,可作为,p1,的邻接点的条件为:,S,1,S,2,+S,12,(,条件,2),若条件,1,成立时,Neighbor(p2)=p1,S(p2)=S,1,+S,12,;,若条件,2,成立时,Neighbor(p1)=p2,S(p2)=S,1,+S,12,。,根据p1、p2得到p1到目标点的路线长度S1和p2到目标点的,19,(,4,)当水准网的规模较大时,在循环访问每一个观测值后某些点到目标点的路线还不是最短路线,甚至有些点还没有找到邻接点,需要转到(,3,)继续为寻找路线最短的邻接点,直到所有的观测边不再满足,条件,1,和条件,2,,,这时表明每个点都已经找到了到目标点最短的邻接点,搜素工作结束。,(4)当水准网的规模较大时,在循环访问每一个观测值后某些点到,20,最短路线搜索函数,FindShortPath,(,p,as integer, exclude,as integer, neighbor(),as,integer,diff(),as,double, S(),as double,),从一个已知点出发用观测高差依次推算其它各点的高程,最后闭合到另外一个已知点上,闭合点上推算高程和已知高程值之差称之为附合水准路线闭合差,简称路线闭合差,。,设,k,1,、,k,2,为两个已知点,已知高程值分别为,H,1,、,H,2,,两点之间的推算路线由高差,h,1,h,2,h,n,,各测段路线长度分别为,S,1,S,2,S,n,,路线闭合差为,式中,正负号取决于高差起始点到终点的方向与推算路线是否一致。,b),路线闭合差计算算法,最短路线搜索函数FindShortPath(p as in,21,闭合差的限差为,:,假如网中共有,m,个已知点,将,m,个已知点两两组合,计算,m(m-1)/2,条附合路线的闭合差,每条路线按最短路线进行计算。,闭合差的限差为:,22,在水准网中,由观测高差相连接可以形成闭合多边形,理论上构成闭合多边形的各观测高差之和应该为,0,,由于观测误差的存在,高差之和一般不等于,0,,,闭合多边形的观测之和称为环闭合差。,一般情况下,设构成闭合环的观测高差,h,1,h,2,h,n,,环闭合差为,式中,正负号取决于高差起点到终点的方向与推算路线的方向一致。,c),环闭合差计算算法,在水准网中,由观测高差相连接可以形成闭合多边形,理,23,环闭合差的限差为,实际计算时,一般只计算最小独立环的闭合差。最小闭合环应该满足如下条件:,(,1,)多边形环应该是相互独立(线性无关)的,即任何一个多变边不能由其它多边形线性组合而得到。,满足独立条件可以避免重复计算,也可以避免遗漏。,设水准网中有,n,个观测高差、,t,个高程点,那么独立闭合环的个数为,r=n-t+1,保证闭合环独立的方法是,每个新环找到的闭合环都有前面找到的闭合环中不曾使用的观测值。,环闭合差的限差为,24,(,2,)在多边形环独立的情况下,闭合环的边长最短。,关于最小环问题可以用最短路径的方法解决。若仅通过一个观测值即可将两个点,p1,到,p2,连接起来,构成一条路线,可把这种路线称为,p1,到,p2,的直接路线。如果直接路线能同别的观测值构成闭合环,那么从,p1,到,p2,应有两条或两条以上的路线。,如果选定一条直接路线,再从非直接路线中找到,p1,到,p2,的最短路线,把这条最短路线与直接路线连接起来一定是包含直接路线的最小环。为保证找到的闭合环是独立的,只能将未参加过前面环闭合差计算的观测作为直接路线。,(2)在多边形环独立的情况下,闭合环的边长最短。,25,五、待定点近似高程计算,待定点高程计算是为了得到未知点的高程近似值,在求取未知点近似高程的时候,要注意测段的方向及相关正负号。既可以进行人工计算后输入到程序中,也可以直接将原始数据直接读入到程序中,根据相关算法让程序自动计算。计算原理如下式:,五、待定点近似高程计算,26,水网观测数据(测段)的组织:,测段号 起点 终点 测段高差,(m),测段长,(km),测站数,1 A B 5.835 1.5,2 E C 1.006 0.8,3 D C 7.384 2.1,4 B C 3.782 3.2,5 A D 2.270 1.7,6 A C 9.64 1.3,7 A F 0.003 4.1,水网观测数据(测段)的组织:,27,水准网近似高程计算算法,1,、定义存储水准网高程的数组,H(),,将,已知点(原有高程和计算出的近似高程都可视为已知点),存到,H(),数组中;,2,、遍历所有测段(即从第一个测段到最后一个测段);,a,)判断测段中起点为已知点,判断终点为未知点,若同时成立,则利用公式计算该测段中未知点的高程,并存储到,H(),中;,水准网近似高程计算算法1、定义存储水准网高程的数组H(),将,28,b,)再次遍历测段,找到满足这些条件的测段 (其起点未知点,终点是已知点),若同时满足,则进行起点近似高程的计算,把计算出的近似高程存到,H(),数组中;,3,、判断,计算出近似高程的个数是否小于未知点高程点的个数,,若是再次进行循环,若否,计算完毕(即水准网中未知高程点的近似高程已全部计算出来),水准网中所有未知点的高程存放到,H(),数组中了。,b)再次遍历测段,找到满足这些条件的测段 (其起,29,六、,误差方程的组成,对于水准网平差,关键就是误差方程的构建,即相关矩阵的生成,这里所指的矩阵是误差方程系数矩阵,B,和常数矩阵,L。,如何来组成这两个矩阵呢?还是一个方程一个方程的建立,最后将相应值存储到矩阵,B,和,L,的对应元素中。,六、误差方程的组成,30,系数矩阵,B,构建算法描述:,1,、定义一个存储系数,B,的数组,B(),,其行数为观测测段数,列数为所选必要参数个数;定义一个存储常数阵,L,的数组,L(),,其行数为测段个数,列数为,1,;,2,、取出第,j,个测段(测段数据存储在测段信息数组中的),首先判断该测段起点是否为已知点(也即其在已知点数组,H(),中的下标位于起算高程点个数内,如:起算高程点个数为,5,,起点在已知数组中的下标为,i,,当,i,小于等于,5,时,说明该起点为已知点,若,i,大于,5,,则说明该起点为未知点,同样终点是什么类型的点也通过该方法判断),记下其在,a(),中的下标,i1,(原始已知点数为,i0,);判断该测段终点是什么类型的点记下其在,a(),中的下标,i2,;,系数矩阵B构建算法描述:1、定义一个存储系数B的数组B(),,31,a),、若该测段的起点为未知点,且终点也为未知点,则矩阵,B,的第,j,行、第(,i1-i0,)列的元素为,-1,,第,j,行、第(,i2 i0,)列的元素为,1,;那么第,j,行其它元素都为,0,;,b),、若该测段的起点为已知点,且终点为未知点,则矩阵,B,的第,j,行、第(,i2-i0,)列的元素为,1,,该行其它元素都为,0,;,c),、若该测段的起点为未知点,且终点为已知点,则矩阵,B,的第,j,行、第(,i1-i0,)列的元素为,-1,,该行其它元素都为,0,;,a)、若该测段的起点为未知点,且终点也为未知点,则矩阵B,32,3,、根据每测段起点和终点点的类型,就可以计算出这个误差方程的常数项,把计算出的数值放到,L(),中去就可以了;,4,、遍历完所有的测段,即可构建出矩阵,B,和常数项矩阵,L,,即其所有的元素都存储在,b(),和,L(),中了。,3、根据每测段起点和终点点的类型,就可以计算出这个误差方程的,33,七、法方程的组建,有了,B,和,L,,基于最小二乘原理,对所选参数求偏导后的式子,推出法方程,即:,七、法方程的组建有了B和L,基于最小二乘原理,对所选参数,34,直接计算法方程系数阵和常数阵(累加法),组成法方程是间接平差的关键步骤,由间接平差模型可知 ,在误差方程系数矩阵,B,,误差方程常数项以及观测值的权,P,确定时,法方程系数矩阵和自由项向量分别为,B,T,PB,和,B,T,PL,,组成法方程就是矩阵的乘积。但在水准网平差程序设计时,为了节省存储单元,可不必为误差方程矩阵,B,开辟存储数组,权阵也只保存对角线上的元素,组成法方程的计算就不是矩阵乘积运算了,而是根据观测值的起始点号、终点号、高差值和观测值的权直接计算出法方程的系数阵,B,T,PB,和自由项向量,B,T,PL,。,直接计算法方程系数阵和常数阵(累加法) 组成法方程,35,应将,p,k,、,-p,k,累加到法方程系数矩阵的什么位置?若第,K,个观测高差的起点点号和终点点号分别为,i,、,j,,则需将,p,k,累加到法方程系数矩阵的第,i,行第,i,列和第,j,行第,j,列,将,-p,k,累加到法方程系数矩阵的第,j,行和第,i,列。同理,应将,p,k,l,k,和,-p,k,l,k,分别累加到法方程常数项的第,j,行和第,i,行中。,应将pk、-pk累加到法方程系数矩阵的什么位置?若,36,组成法方程的过程就是以观测值总数为循环界,逐个观测值计算累加项的过程,在第,k,个循环中,所做的工作如下:,(,1,)获得高差的起点点号,i,和终点号,j,;,(,2,)获得起点和终点的高程值,H,i,和,H,j,;,(,3,)计算误差方程的自由项,l,k,=H,j,-H,i,-h,k,;,(,4,)将,p,k,、,p,k,l,k,累加到法方程系数阵和法方程自由项的相应单元中。,组成法方程的过程就是以观测值总数为循环界,逐个观,37,可以将法方程系数矩阵和法方程常数项矩阵的计算定义成一个函数,Ca_ATPA(),。,void CLevelingAdjust:ca_ATPA(),int t=m_Pnumber;,for(int i=0; it*(t+1)/2; i+) ATPAi=0.0;,for(i=0; it; i+) ATPLi=0.0;,for(int k=0; km_Lnumber; k+), int i=StartPk;,int j=EndPk;,double Pk=Pk;,double Lk=Lk-(Heightj-Heighti);,ATPLi-=Pk*Lk;,ATPLj+=Pk*Lk;,ATPAij(i,i)+=Pk;,ATPAij(j,j)+=Pk;,ATPAij(i,j)-=Pk;,可以将法方程系数矩阵和法方程常数项矩阵的计算定义成一个,38,八、水准网平差定权,水准网平差中还有涉及到权阵,P,的确定,有了权阵,P,,和我们上面所构建出来的,B,和,l,,就可以很容易的进行参数改正值和观测值改正值的解算了。,我们一般怎样来定权?,设有观测值,L,i,(i=1,2,n),它们的方差 为,若选定一常数 , 定义 ,并称,P,为观测值,L,i,的权。对于一组观测值,其权之比等于相应方差的倒数之比。这表明,方差越小,其权越大;或者说精度越高,其权越大。因此权可以作为比较观测值之间的精度高低的一种指标。,八、水准网平差定权,39,结论:,(,1,) 选择了一个 ,即对应一组权;,(,2,) 一组观测值的权,其大小是随 的不同而异,但不论选何值,权之间的比例关系始终不变;,(,3,)为了使全能够起到比较精度的作用,在同一问题中只能选取一个 值,不能同时选取几个 ,否则就破坏了权之间的比例关系;,(,4,)只要给出了一定的观测条件,不一定要知道每公里观测高差精度的具体数值,就可以确定出权的数值。,结论:,40,水准网平差中定权,一般二种方式,即以,距离定权,和,测站数,定权。,一般观测量之间是相互独立的,故在构建权矩阵,P,时,只有对角线上的元素 非零,非对角元素都为零。,注意采用以上方法定权时,必须满足,“每测站观测高差精度相等”,或者,“每公里观测高差精度相等”,这一前提条件。,九、精度的评定,间接平差采用了与条件平差不同的数学模型,但它们是在相同的平差原理下进行的,所以这两种方法的计算出的结果是相同的。,水准网平差中定权,一般二种方式,即以距离定权和测站数,41,中误差的估值为:,而对于 的计算,将误差方程代入即可。平差参数的协方差阵 ,而对于平差函数,其权函数式为: ,协因数 方差为:,中误差的估值为:,42,水准网如图,1,所示,共,7,个高程点、,10,个测段观测高差,观测值的每千米观测中误差为,0.001m,,已知高程和观测高差分别见表,1,及表,2,。,水准网平差程序设计实验中用例,水准网路线,水准网如图1所示,共7个高程点、10个测段观测高差,观测值的,43,已知数据和观测数据,点名,高程,/m,A,0.000,F,11.414,表,1,已知高程点,已知数据和观测数据点名高程/mA0.000F11.414表1,44,表,2,观测高差与路线长度,编号,起点点号,终点点号,观测高差,/m,距离,/m,1,A,B,73.795,20.4,2,A,D,14.005,18.8,3,A,G,14.167,15.4,4,C,B,71.949,8.9,5,D,B,59.780,14.2,6,C,D,12.159,12.8,7,C,E,15.364,9.8,8,F,E,5.797,19.6,9,G,E,3.044,15.1,10,D,G,0.169,10.0,表2 观测高差与路线长度编号起点点号终点点号观测高差/m距,45,该水准网平差数据文件(,data.txt,)如下:,10,7,2,0.001,A,0.000,F,11.414,A,B,73.795,20.4,A,D,14.005,18.8,A,G,14.167,15.4,C,B,71.949,8.9,D,B,59.780,14.2,C,D,12.159,12.8,C,E,15.364,9.8,F,E,5.797,19.6,G,E,3.044,15.1,D,G,0.169,10.0,该水准网平差数据文件(data.txt)如下:10,7,2,46,1,、水准网程序设计中变量及数组说明,网中已知点数:,m_knPnumber,网中总点数:,m_Pnumber,先验权中误差:,M,单位权中误:,m_mu,存储网中观测测段高差个数:,m_GaochaN,存储测段高差数组,:,gaocha(),测段起点编号数组:,StartP(),测段终点编号数组:,EndP(),测段长度数组:,Li(),1、水准网程序设计中变量及数组说明 网中已知点数:m_knP,47,存储已知高程与近似高程值数组:,H(),误差方程系数矩阵数组:,B(),误差方程常数项数组:,L(),权阵数组:,P(),存储值的数组:,p_vv,高程改正值数组:,dx(),法方程系数矩阵数组:,Q(),观测高差改正值数组:,v(),存储已知高程与近似高程值数组:H(),48,2,、,数据文件读入,为了从数据文件中读取数据,首先利用,VB6.0,中的,Open,函数打开该数据文件,接着,按着数据文件中数据内容的,顺序和格式,,先读取网的概况信息数据,再读取已知高程数据,最后读取观测数据。,1,)读取网的概况数据,将总点数、已知点数、观测值总数分别存储到变量,m_knPnumber,、,m_Pnumber,及,m_GaochaN,中。,2,)动态定义数组。观测高差起点点号数组,2、数据文件读入 为了从数据文件中读取数据,首先利用VB,49,StartP(),、高差终点数组,EndP(),、观测高程数组,gaocha(),、残差数组,v(),、观测值权,P(),与观测高差数有关;高程数组,H(),注意:动态数组是先声明,再动态定义其大小。,StartP()、高差终点数组EndP()、观测高程数组ga,50,3,、近似高程的推算(,ca_H,(),),近似高程的计算算法可参照该章节前面的内容。在编写程序过程中,最好完成特有任务和功能的语句,定义成函数(或过程),以方便其调用。,3、近似高程的推算(ca_H()近似高程的计算算法可参照该,51,Sub ca_H(),水准网中待定点近似高程计算,Dim k1 As Integer, H_N As Integer,H_N,为计算出近似高程点个数,Dim c1 As Integer, c2 As Integer,H_N = 0,Do While H_N m_knPnumber And c2 m_knPnumber Then,B(k1, c2 - m_knPnumber) = 1,B(k1, c1 - m_knPnumber) = -1,End If,If c1 m_knPnumber And c2 = m_knPnumber Then,B(k1, c1 - m_knPnumber) = -1,End If,If c1 m_knPnumber Then,B(k1, c2 - m_knPnumber) = 1,End If,L(k1, 1) = gaocha(k1) - (H(c2) - H(c1),Next,End Sub,For k1 = 1 To m_GaochaN,54,5,、权阵,P,的生成,Sub goujianP(),构建,P,Dim k1 As Integer, k2 As Integer,For k1 = 1 To m_GaochaN,For k2 = 1 To m_GaochaN,P(k1, k2) = 0,Next,Next,For k1 = 1 To m_GaochaN,For k2 = 1 To m_GaochaN,If Li(k1) = 0 Then,MsgBox (,第,+ Str(k1) + ,测段长为,0,!,),End If,If k1 = k2 Then,P(k1, k2) = 1 / Sqr(Li(k1),End If,Next,Next,End Sub,5、权阵P的生成Sub goujianP() 构建P,55,6,、法方程的生成(间接法),有了,B,、,L,、,P,三矩阵后,法方程的系数矩阵及常数项矩阵的生成,即可利用矩阵的基本运算函数(或过程)来实现。,注意:函数(或过程)的调用方法。,6、法方程的生成(间接法)有了B、L、P三矩阵后,法方程的系,56,6,、法方程的生成(直接法),法方程除了可按方法一(即,B,、,L,及,P,运算)实现,也可通过累加生成法方程系数矩阵和常数项矩阵,具体算法可参考本章前面的内容。,6、法方程的生成(直接法)法方程除了可按方法一(即B、L及P,57,实验二,1,、近似高程计算;,2,、组成误差方程系数阵;,3,、组成误差方程常数项;,4,、权阵的计算。,实验二1、近似高程计算;,58,
展开阅读全文