条件平差程序
- 格式:docx
- 大小:15.24 KB
- 文档页数:9
本科生毕业设计说明书(毕业论文)题目:水准网条件平差程序设计学生姓名:房新明学号:1072143138专业:测绘工程班级:测绘10-1班指导教师:郭义水准网条件平差程序设计摘要近年来,随着我国经济的快速发展,国家大力于投资各种铁路建设和公路建设,测绘工程的运用也越来越突出。
以水准网布设的高程控制网在各类工程中随处可见。
但观测到的数据存在着各种各样的误差,这就需要我们通过简易平差或严密平差来对数据进行处理,从而使数据能够达到工程的预期精度。
本文主要研究如何解决绘图软件行业标准的网络数据处理问题。
从水准网的结构,平差基本原理、调整模型,基本方程及其解,并对法方程组成,求解,平差值的计算及其精度评定作了介绍。
和Visual studio6.0编程软件的利用,利用C语言是程序设计的相干事情。
在今后的测量工作中,可结合实际平差方案进行平差计算。
关键词:平差模型;精度评定;程序设计Leveling Network Adjustment Program DesignAbstractIn recent years, with China's rapid economic development, the state vigorously investment in all kinds of railway construction and road construction, the use of mapping project is also more and more prominent. In order to control the network level network in various engineering in everywhere. But the observed data exist various error, this needs us through simple adjustment or rigorous adjustment for data processing, so that data to achieve the desired precision engineering.This paper mainly studies how to solve the problem of mapping software industry standard network data processing. From the structure adjustment of leveling network, the basic principle, adjustment model, basic equation and its solution, and the composition of the solution of equations, adjustment calculation and precision evaluation, gross error elimination are introduced as well. And the use of Visual Studio6.0 programming software, using C programming language is related to program design. The measurement work in the future, can be combined with the actual adjustment adjustment calculation.Key words: adjustment model;the accuracy assessment;program design目录摘要 (I)Abstract .......................................................................................................................... I I 第一章绪论 (1)1.1研究背景及意义 (1)1.2国内外研究现状 (2)1.3本文研究的具体内容 (2)第二章条件平差数学模型 (3)2.1条件平差模型 (3)2.1.2测角网条件方程 (6)2.1.3测边网条件方程 (8)2.1.4以坐标为观测值的条件方程 (11)2.2精度评定 (13)2.3条件平差的计算步骤 (17)第三章水准网的设计 (18)3.1水准测量 (18)3.1.1水准网的基本概念 (18)3.2水准网的布设 (19)3.2.1国家水准网的布设 (19)3.2.2水准网的布设要求 (20)第四章C语言介绍 (21)4.1C语言的基本概念 (21)4.2C语言的介绍 (22)4.2.1C语言的特点 (22)第五章程序设计 (24)5.1水准网条件平差和测角网条件平差实例 (24)5.1.1水准网条件平差 (24)5.1.2测角网条件平差 (27)5.2程序代码 (32)参考文献 (57)附录A:外文文献 (58)附录B:中文译文 (70)致谢 (76)第一章绪论1.1研究背景及意义施工测量工作是非常基本的,重要环节。
§9.1 条件平差原理在条件观测平差中,以n 个观测值的平差值1ˆ⨯n L 作为未知数,列出v 个未知数的条件式,在min =PV V T 情况下,用条件极值的方法求出一组v 值,进而求出平差值。
9.1.1基础方程和它的解设某平差问题,有n 个带有相互独立的正态随机误差的观测值 ,其相应的权阵为 , 它是对角阵,改正数为 ,平差值为 。
当有r 个多余观测时,则平差值 应满足r 个平差值条件方程为:⎪⎪⎭⎪⎪⎬⎫=++++=++++=++++0ˆˆˆ0ˆˆˆ0ˆˆˆ221122112211οοοr L r L r L r b L b L b L b a L a L a L a n n n n n n (9-1) 式中i a 、i b 、…i r (i =1、2、…n )——为条件方程的系数;0a 、0b 、…0r ——为条件方程的常项数以ii i v L L +=ˆ(i =1、2、…n )代入(9-1)得条件方程(9-2)式中a w 、b w 、……r w 为条件方程的闭合差,或称为条件方程的不符值,即(9-3) 令⎪⎪⎪⎪⎪⎭⎫⎝⎛=⨯n n n n r r r r b b b a a a A212121⎪⎪⎭⎪⎪⎬⎫++⋅⋅⋅++=++⋅⋅⋅++=++++=022110221102211r L r L r L r w b L b L b L b w a L a L a L a w n n n n n b n n a ⎪⎪⎭⎪⎪⎬⎫=++⋅⋅⋅++=++⋅⋅⋅++=++⋅⋅⋅++000221122112211r n n b n n a n n w v r v r v r w v b v b v b w v a v a v a ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⨯n n L L L L 211⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⨯n n L L L L ˆˆˆˆ2111⨯n L nn P ⨯1⨯n V 1ˆ⨯n L 1ˆ⨯n L则(9-1)及(9-2)上两式的矩阵表达式为0ˆ0=+A LA (9-4) 0=+W AV (9-5)上改正数条件方程式中V 的解不是唯一的解,根据最小二乘原理,在V 的无穷多组解中,取PV V T = 最小的一组解是唯一的,V 的这一组解,可用拉格朗日乘数法解出。
目录目录 (1)观测误差 (2)摘要: (2)关键词: (2)引言 (3)1水准测量 (4)1.1水准测量的原理 .............................................................................. •1.2水准网...................................................................................... •2条件平差 .. (6)2.1 衡量精度的指标 (6)2.2条件平差的原理 .............................................................................. •3水准网的平差 .. (14)3.1必要观测与多余观测 (14)3.2条件方程 (14)3.3条件平差法方程式 (14)3.4条件平差的精度评定 (15)3.5水准网的条件平差 (18)致谢 (20)参考文献 (21)观测误差由观测者、外界环境引起的偶然误差学生:xxx 指导教师:xxx摘要:对一系列带有偶然误差的观测值,采用合理的的方法消除它们间的不符值,得出未知量的最可靠值;以及评定测量成果的精度。
关键词:偶然误差;观测值;精度引言测量工作中,要确定地面点的空间位置,就必须进行高程测量,确定地面点的高程。
几何水准测量是高程测量中最基本、最精密的一种方法。
通过测量仪器,工具等任何手段获得的以数字形式表示的空间信息,即观测量。
然而,测量是一个有变化的过程,受仪器、观测值、外界环境因素的影响,观测的结果与客观上存在的一个能反映其真正大小的数值,即真值(理论值),有一定的差异。
可以说在测量中产生误差是不可避免的。
所以,观测值不能准确得到,在测量上称这种差异为观测误差。
根据其对观测结果影响的性质,可将误差分为系统误差和偶然误差两种。
附合导线严密平差算法总结图1如图的单一附合导线,有4个已知点A、B、C、D,2个未知点TP1、TP2。
设观测边数为n, 则未知点数为n-1, 观测角数为n+1。
以上图为例,n = 3。
观测边为:S1 = B->TP1,S2 = TP1->TP2, S3 = TP2->C思路:由于A、B坐标已知,则可以算出起始方位角,再根据B点坐标和每个观测角(夹角,左角)推算出TP1、TP2、C点的近似坐标值。
如果是用全站仪进行测量,则用盘左盘右重复观测求平均的方式,直接测出TP1、TP2、C点的近似坐标值以及CD的方位角。
再根据c点的已知坐标与近似坐标求坐标闭合差,由CD的已知方位角和近似方位角求角度闭合差,两个闭合差联立求得边长和角度的改正数,最后求得未知点的坐标平差值。
条件平差过程:1.建立条件方程,求得条件系数2.求法方程系数3.求权阵4.计算出联系数K5.解算出观测值改正数V6.由观测值和改正数计算平差值详细步骤如下:1、建立条件方程在单一附合导线中,只需要三个条件方程即:方位角附合条件、纵坐标附合条件和横坐标附合条件方程。
(省略了条件方程的推导过程,详细过程请查看参考资料:《测量平差.pps》)(1)方位角附合条件[Vβi]n+11+ Wβ= 0式中,Wβ= - (T0– T CD+ [βi]n+11 - (n+1)*180°)(角度闭合差)βi ——角度观测值(夹角,左角)Vβi ——各观测角的改正数。
如果是用全站仪观测,则Wβ= - (T CD– T CD)式中,T CD ——CD的方位角观测值,T CD ——CD的已知方位角(2)纵坐标X附合条件方程[Cos TI * VSi]1n - (1/ ρ”)* [(Yn+1- Yi) * Vβi]1n - W x = 0;式中,TI——各方位角观测值(近似值)VSi——边长改正数Yn+1—— C点即终止点的横坐标Y的观测值(近似值)Yi——待定点的横坐标Y的观测值Wx = - (Xn+1- XC)XC—— C点即终止点的纵坐标X的已知值ρ” = 2062.65(3)横坐标Y附合条件方程[Sin TI * VSi]1n + (1/ ρ”)* [(Xn+1- Xi) * Vβi]1n– W Y = 0;式中,TI——各方位角观测值(近似值)VSi——边长改正数Xn+1—— C点即终止点的纵坐标X的观测值(近似值)Xi——待定点的纵坐标X的观测值WX = - (Yn+1- YC)YC—— C点即终止点的横坐标Y的已知值ρ” = 2062.652、求条件方程的系数矩阵联立3个方程得改正数条件方程组:[Vβi]n+11+ Wβ= 0[Cos TI * VSi]1n - 1/ ρ”* [(Yn+1- Yi) * Vβi]1n - W x = 0;[Sin TI * VSi]1n + 1/ ρ”* [(Xn+1- Xi) * Vβi]1n– W Y = 0;其系数矩阵arrA为:(即改正数V的系数,此处以图1为例, n = 3)3、联系数法方程(简称法方程)AP-1A T K – W = 0A——系数矩阵arrAK ——乘系数P ——权阵W ——闭合差矩阵由上得法方程的系数阵N:N = AP-1A T(权的推导见参考资料:《全站仪观测导线测量平差方法的研究.pdf》)角度权:P βi = 1;(因为角度的标称精度是固定的,各观测角权值相等) 边长权:P Si = (μ0 *μ0 ) / (M D * M D )(误差比例系数固定,边长的误差与距离有关,因此不一致)式中,μ0 ——先验测角中误差,以秒为单位 M D —— 距离观测中误差若 导线边长为S i (米),e1 为仪器的边长标称固定误差(mm ),e2为仪器的边长比例误差系数(无单位),则M D = ± (e1 + e2 * S i * 0.001)mm 需转化为厘米:M D = M D ** 0.1 (cm )由于此处是要P 的逆矩阵P -1,因此要求P 的各元素的倒数(P 是对角矩阵,对角矩阵的逆矩阵就是原矩阵元素的倒数) Psi = 1/ Psi ;由上可得,P -1 矩阵如下:4、求改正数由于N 已经在前面的步骤中求出,求N 的逆矩阵。
条件平差程序#include <stdio.h>#include <math.h>#include <conio.h>#define N_max 15int n,m,r,p; //n:观测值的个数,m:待定点个数,r:多余观测值个数,p:已知高程的水准点个数float Hd[6]={0};void Choose(){int i;printf("此程序能够解决闭合水准路线、附和水准路线、支水准路线的条件平差。
\n");printf("请问已知高程的水准点个数为:(不要太多喔,~ 。
~):");scanf("%d",&p);for(i=1;i<=p;i++){printf("已知点%c点的高程为:",64+i);scanf("%f",&Hd[i]);}}void Input(float Hgao[][3]) //输入各测点的高程差以及它们之间的距离{int i;for(i=1;i<=n;i++){printf("请输入h%d的数值:",i);scanf(" %f",&Hgao[i][1]);printf("请输入S%d的数值:",i);scanf("%f",&Hgao[i][2]);}}void Equation(int A[][N_max],char Equa[][50],int asd[][6],float Hgao[][3],float W[],int flag)//输入条件方程或者求某待定点的表达式{int i,j,k,ppt;if(flag==1){ppt=r;printf("请输入%d个条件方程:\n",r);printf("如:h1+h2+h3+Ha-Hb=0.请务必使等号右边等于0,输入的时候中间不要有空格!\n");getchar();for(i=1;i<=r;i++){printf("方程%d\t",i);gets(Equa[i]);}}else{ppt=m;printf("为求得待定点的高程,请分别给出每个待定点的一个与Ha或者Hb\n以及各个高程差h之间的关系式。
\n");printf("比如,Hc=Ha-h1+h2.你只需要输入Ha-h1+h2。
中间不要有空格!\n"); for(i=1;i<=m;i++){printf("待定点%d\t\t",i);gets(Equa[i]);}}for(i=1;i<=ppt;i++){for(j=1;j<=n;j++){for(k=0;Equa[i][k]!='\0';k++){if(k==0){if(Equa[i][1]==j+48){A[i][j]=1;break;}}else{if(Equa[i][k]=='+' && Equa[i][k+2]==j+48){A[i][j]=1;break;}else if(Equa[i][k]=='-' && Equa[i][k+2]==j+48){A[i][j]=-1;break;}}}}}for(i=1;i<=ppt;i++){for(j=1;j<=p;j++){for(k=0;Equa[i][k]!='\0';k++){if(k==0){if(Equa[i][1]==64+j || Equa[i][1]==96+j){asd[i][j]=1;break;}}else{if(Equa[i][k]=='+' && (Equa[i][k+2]==64+j || Equa[i][k+2]==96+j)) {asd[i][j]=1;break;}else if(Equa[i][k]=='-' && (Equa[i][k+2]==64+j || Equa[i][k+2]==96+j)) {asd[i][j]=-1;break;}}}}}if(flag==1){for(i=1;i<=r;i++){for(j=1;j<=n;j++){W[i]+=Hgao[j][1]*A[i][j];}for(k=1;k<=p;k++){W[i]+=asd[i][k]*Hd[k];}}}}void InitialQ(float Q[][N_max],float Hgao[][3]) //初始化协因数阵{int i,j;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==j){Q[i][j]=Hgao[i][2];}}}}void Calculate(float Q[][N_max],float Hgao[][3],float Naa[][10],int A[][N_max]) //计算Naa {int i,j,k;float bs[10][N_max]={0};for(i=1;i<=r;i++){for(j=1;j<=n;j++){for(k=1;k<=n;k++){bs[i][j]=bs[i][j]+A[i][k]*Q[k][j];}}}for(i=1;i<=r;i++){for(j=1;j<=r;j++){for(k=1;k<=n;k++){Naa[i][j]+=bs[i][k]*A[j][k];}}}}void Realv(int A[][N_max],float Q[][N_max],float k123[],float v[]) //计算改正数方程{int i,j,k;float bs[10][N_max]={0};for(i=1;i<=n;i++){for(j=1;j<=r;j++){for(k=1;k<=n;k++){bs[i][j]+=Q[i][k]*A[j][k];}}}for(i=1;i<=n;i++){for(j=1;j<=r;j++){v[i]+=bs[i][j]*k123[j];}}}void getresult(float a[][10],float k123[]) //计算k{int i,j,k,wo;float app,temp;for(i=1;i<r;i++){wo=i;for(j=i+1;j<=r;j++){if(fabs(a[j][i]) > fabs(a[wo][i]))wo=j;}if(wo!=i){for(k=i;k<=r+1;k++){temp=a[i][k];a[i][k]=a[wo][k];a[wo][k]=temp;}}for(j=i+1;j<=r;j++){app=a[j][i]/a[i][i];for(k=i;k<=r+1;k++){a[j][k]-=app*a[i][k];}}}k123[r]=a[r][r+1]/a[r][r];for(i=r-1;i>=1;i--){for(j=i+1;j<=r;j++){a[i][r+1]-=a[i][j]*k123[j];}k123[i]=a[i][r+1]/a[i][i];}}void Solution(float Naa[][10],float W[],float k[],int A[][N_max],float Q[][N_max],float v[]) {int i;if(r==1){k[1]=(-1)*W[1]/Naa[1][1];Realv(A,Q,k,v);}else{for(i=1;i<=r;i++){Naa[i][r+1]=(-1)*W[i];}getresult( Naa, k);Realv(A,Q,k,v);}}void Answer(float Hgao[][3],float v[],float W[],float Point[],int flag) //输出答案{int i,j,k,Asd[N_max][6]={0};int a123[10][N_max]={0};char che[N_max][50];printf("改正数方程的解为:\n");for(i=1;i<=n;i++){printf(" v[%d] ",i);}putchar('\n');for(i=1;i<=n;i++){printf("%f ",v[i]);}putchar('\n');printf("平差后各高差值:\n");for(i=1;i<=n;i++){printf(" h[%d] ",i);}putchar('\n');for(i=1;i<=n;i++){printf("%f ",Hgao[i][1]+v[i]);}putchar('\n');Equation( a123, che, Asd, Hgao, W, flag);printf("\n平差后各待定点的高程如下:\n待定点\t ");for(i=1;i<=m;i++)printf("%d\t ",i);printf("\n ");for(i=1;i<=m;i++){for(j=1;j<=n;j++){if(a123[i][j]!=0){Point[i]+=(Hgao[j][1]+v[j])*a123[i][j];}for(k=1;k<=p;k++){Point[i]+=Asd[i][k]*Hd[k];}printf("%f\t ",Point[i]);}}void main(){int t,flag=1;float k[10],v[N_max]={0},Point[N_max]={0};int A[10][N_max]={0},asd[N_max][6]={0};float Hgao[N_max][3],W[10]={0};float Q[N_max][N_max]={0},Naa[10][10]={0}; char Equa[N_max][50];printf("\t\t");putchar(16);putchar(16);printf(" 欢迎使用"); putchar(17);putchar(17);putchar('\n');Choose();printf("请输入观测值个数n:"); scanf("%d",&n);printf("请输入必要观测值个数t:"); scanf("%d",&t);r=n-t;printf("请输入待定点的个数m:"); scanf("%d",&m);Input(Hgao);InitialQ(Q,Hgao);Equation( A, Equa, asd, Hgao, W, flag);flag=0;Calculate(Q,Hgao,Naa,A);Solution( Naa, W, k, A, Q, v);Answer( Hgao, v, W, Point, flag);printf("\n\n程序已结束。