1、根据题目要求,正确应用平差模型列出观测值条件方程、误差方程和法方程;解算法方程,得出平差后的平差值及各待定点的高程平差值;评定各平差值的精度和各高程平差值的精度。具体算例为:如图所示水准网,有2个已知点,3个未知点,7个测段。各已知数据及观测值见下表(1) 已知点高程H1=5.016m , H2=6.016m (2)高差观测值(m) 端点号高差观测值m测段距离km序号1-31.3591.111-42.0091.722-30.3632.332-41.0122.743-40.6572.453-50.2381.465-2-0.5952.67(3)求各待定点的高程;3-4点的高差中误差;3号点、4号点
2、的高程中误差。第三部分 设计思路一、解题步骤(1)此次设计我所采用的模型为间接平差模型,根据已知条件我们可知观测总数n=7,必要观测数t=3(则多余观测数r=n-t=4),因此我需先选定三个参数,即3、4、5点的最或然高程X3、X4、X5(X=X0+x,X30=6.375、X40=7.025、X50=6.611;其中X0为参数的近似值,x为其改正值)为参数。(2)列出条件方程,即将每一个观测量的平差值分别表达成所选参数的函数,H1+h1=X3、H1+h2=X4、H2+h3=X3、H2+h4=X4、X3+h5=X4、X3+h6=X5、X5+h7=H2;整理后得出误差方程,v1=x3、v2=x4、
3、v3=x3-4、v4=x4-3、v5=-x3+x4-7、v6=-x3+x5-2、v7=-x5,即v=Bx-l的形式。(3)定权,令每千米的观测高差为单位权观测,即Pi=1/Si,从而可写出权阵P;根据误差方程式又可得其系数矩阵B和自由项l,并由它们组成法方程NBBx-W=0(其中NBB=BTPB,W=BTPl),法方程的个数等于所选参数的个数。(4)解算法方程,求出参数改正值x并计算参数的平差值X=X0+x。(5)由误差方程计算V,并求出观测量的平差值。为了检查平差计算的正确性,将所求的值代入条件方程,看其是否满足方程。(6)精度评定,计算单位权中误差,按照题设要求列出权函数式,再根据平差参数
4、的协方差阵求出协因数,最后求出某段高差中误差,某些点的高程中误差。二、程序设计思想考虑到在解题过程中一些计算的复杂性,我们需借助一些技术将计算简单化,快捷化,因此在课程设计过程中,我们把一些C语言程序设计引入其中;通过一些简单、明了的程序及子函数调用,我们就可以很方便快捷的求出用笔算比较繁琐、费时的矩阵乘积、矩阵的逆(如BTPB、BTPl)等运算。第四部分 程序流程图根据题目列出条件方程并写成误差方程的形式V=Bx-l确定权阵,根据误差方程得到矩阵B、l进而写出BT运用C程序语言求出BTP,进一步得到NBB=BTPB、W=BTPl并求出NBB-1用C程序求出参数的改正数x=NBB-1W根据C程
5、序语言求Bx,进而由V=Bx-l写出各观测值的改正数根据L=L+V求出各观测值的平差值检验所求各值是否正确,若无误则往下进行,反之检查各步骤查出错误并改正由程序计算VTP进而求出VTPV,求单位权中误差,再根据权函数式、协因数传播定律评定各观测值及所求高程的精度第五部分 程序及说明一、矩阵相乘计算函数#include “stdio.h”void Matrix(a,b,m,n,k,c)int m,n,k;double a,b,c;int i,j,l,u;for(i=0;i=m-1;i+)for(j=0;j=k-1;j+) u=i*k+j;cu=0.0; for(l=0;l=n-1;l+) cu=
6、cu+ai*n+l*bl*k+j; return;1.计算BTPmain()int i,j;static double a37=BT;static double c37,b77=P;Matrixmul(a,b,3,7,7,c);printf(“n”);=2;=6; printf(“%8.4ft”,cij; printf(“n”);return0;2.计算BTPB,即NBBstatic double a37=BTP;static double c33,b73=B;Matrixmul(a,b,3,7,3,c);3.计算BTPl,即Wstatic double c31,b71=l;Matrixmul
7、(a,b,3,7,1,c);=0;二、矩阵的逆计算函数(求NBB-1)#include stdio.h #define M 3 void main() float MATM2*M;float MAT1MM;float t;int i,j,k,l;/*/ /*对矩阵进行初始化*/ M;i+) for(j=0;2*M;j+) MAT1j=0;/*对MAT1矩阵赋初值 */ for (j=0; scanf(%f,&MAT1j);/*打印目标矩阵?*/ printf(原矩阵为:n);for (i=0; j+) %13.7f,MAT1j); printf( /*/ /*对MAT1矩阵进行扩展,MAT1矩
8、阵添加单位阵,由M*M变成2M*2M矩阵 */ if (jM) MATj=MAT1j; else if (j=M+i) MATj=1; else MATj=0;/*对M矩阵进行变换,使得前半部分矩阵成为单位阵,则 */ /*后半部分矩阵即为所求矩阵逆阵 */ /*对第i行进行归一化 */ for(k=i+1;kk+) MATj=MATj+MATkj; t=MAT; for(j=i;MATj=MATj/t;/*对矩阵进行行变换,使得第i 列只有一个元素不为零,且为1*/ for(k=0;if(k!=i) t=MATk; for (l=i;l+) MATkl=MATkl-MATl*t; /*将后半部分矩阵即所求矩阵逆阵存入MAT2矩阵。 MAT1j=MATj+M; /*/ /*输出所求的逆阵*/ 逆阵为: for(i=0;%8.4f4.求NBB-1W,即改正数xstatic double a33=NBB-1;static double c31,b31=W;Matrixmul(a,b,3,3,1,c);p
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1