测量程序设计第1章常用计算及辅助函数§1-1概述一、课程主要内容第一章常用辅助函数第二章法方程式的解算第三章常用大地测量计算第四章高程网平差(水准网平差)第五章平面控制网平差(导线网平差)第六章GPS基线网平差(二维约束平差)第一章常用计算及辅助函数二、软件开发的一般步骤(1)需求分析(2)系统设计(3)编写代码(4)系统测试(5)系统维护三、作业问题第一章常用计算及辅助函数§1-2角度格式的相互化算一、度、分、秒转换弧度为方便和规则起见,通常在输入角度时采用度分秒连写的形式,如“53°3′12.78″”输入时为“53.031278”。分、秒的整数部分都要补齐两位。函数名称:Doubledms_rad(Doublea)第一章常用计算及辅助函数•privatedoubledms_radc(doublea)•{•//提取符号•doublesign=(a0)?-1.0:1.0;•a=System.Math.Abs(a);•//提取整度•intdd=(int)(System.Math.Floor(a));•a=a-dd;•//if(a0.0){dd=dd-1;a=a+10000;}•//提取角度值整分、秒•intmm=(int)System.Math.Floor(a*100.0);•a=(a*100.0-mm)*100.0;•//if(a0.0){dd=dd-1;a=a+10000;}•a=sign*(dd*3600.0+mm*60.0+a)/const1.p2;•returna;•}第一章常用计算及辅助函数二、弧度转换为度分秒•publicdoublerad_dmsc(doublea)•{•//提取符号•doublesign=(a0)?-1.0:1.0;•a=System.Math.Abs(a);•a=a*57.2957795130823;//换成度的形式•intd=(int)(System.Math.Floor(a));•a=a-d;•intm=(int)System.Math.Floor(a*60.0);•a=(a-m/60.0)*3600.0;•if(a+0.000160){a=0;m=m+1;}•if(m=60){m=0;d=d+1;}•a=d+m/100.0+a/10000.0;•returna;•}第一章常用计算及辅助函数§1.3坐标方位角的计算一、C#中函数ATAN和ATAN2的区别二.坐标计算方位角注意问题:1.与数学上坐标系的关系2.考虑特殊情况,例如:北坐标差等于0的情况3.单位问题不能大于360°或2π角度是弧度表示的,我们通常用度分秒表示。第一章常用计算及辅助函数•publicdoublexyazimuth(doublex1,doubley1,doublex2,doubley2)•{•doublecc=1,cx,cy;•cx=x2-x1;•cy=y2-y1;•if(cx==0)•if(cy0)•cc=const1.P/2.0;•else•cc=const1.P*1.5;•else•cc=System.Math.Atan2(cy,cx);•if(cy0&&cx!=0)•cc=cc+2.0*const1.P;第一章常用计算及辅助函数可以用math.PI来代替。这里可以用Atan来代替。•doublea=cc;•a=a*57.2957795130823;•intd=(int)(System.Math.Floor(a));•a=a-d;•intm=(int)System.Math.Floor(a*60.0);•a=(a-m/60.0)*3600.0;•if(a+0.000160){a=0;m=m+1;}•if(m=60){m=0;d=d+1;}•a=d+m/100.0+a/10000.0;•cc=a;•returncc;•}第一章常用计算及辅助函数三、坐标方位角的推算注意问题:考虑起始方位角的方向问题;考虑方位角的取值范围,不能大于360°。第一章常用计算及辅助函数§1.4关于矩阵存储及相乘的问题在测量数据处理问题中,经常出现系数矩阵(误差方程或条件方程、法方程)中存在大量零元素,即系数矩阵形式,为节省计算机内存采用一位存储。矩阵如果满足称为对称矩阵。第一章常用计算及辅助函数0,00,10,11,01,11,11,01,11,1nnnnnnaaaaaaAaaa,,ijjiaa1、对称矩阵存储为了节省空间仅存下三角矩阵元素这里下三角共有个元素,可以用一维数组来存储,矩阵元素在一维数组中按行的先后顺序排列,每行从0列到对角线元素为止。第一章常用计算及辅助函数0,01,01,11,01,11,1nnnnaaaAaaa(1)/2nn第一章常用计算及辅助函数a0,0a1,0a1,1a1,2…an-1,0an-1,1…an-1,n-1double[]a=newdouble[n*(n+1)/2];//创建一维存储矩阵。一维数组a存放对称阵的下三角的n*(n-1)/2个元素2、aij在一维数组中的位置aij为下三角阵第一章常用计算及辅助函数[(1)/2]ijaaiijijaij为上三角阵,由于aij=aji[(1)/2]ijaajjiij这样,对称矩阵A中的元素与其一维存储数组a中的元素对应关系为第一章常用计算及辅助函数[(1)]()(,)[(1)]()aiijijAijajjiij//对称矩阵下标计算函数intij(inti,intj){return(i=j)?i*(i+1)/2+j:j*(j+1)/2+i;}第一章常用计算及辅助函数二、矩阵相乘(传播)•BQBT的计算,Q为对称阵•计算公式设B为矩阵,Q为矩阵,用N来表示其乘积:N的计算公式为nnTNBQB1100nnijikksjsksnbqbrn第一章常用计算及辅助函数•主要代码for(inti=0;ir;i++){for(intj=0;j=i;j++){doublenij=0.0;for(intk=0;kn;k++){for(ints=0;sn;s++){nij+=B[i*n+k]*Q[ij(k,s)]*B[j*n+s];}N[ij(i,j)]+=nij;}}}算例第一章常用计算及辅助函数2.01.03.00.50.04.2Q1.02.03.04.05.06.0B50.8109.6242.2N第二章法方程式的解算(对称正定阵求逆)常见法方程解算的方法有高斯消去法:用于一般法方程的解算。变量循环重新编号法用于一般法方程的解算平方根法:用于一般法方程的解算。改进平方根法:用于附有未知数的条件平差或附有条件的间接平差。共轭斜量法:系数矩阵稀疏且具有准对角阵性(有一定带宽)。H变换:系数误差较大,需要迭代趋近。第一章常用计算及辅助函数一、变量循环重新编号法(解对称正定阵求逆)A为对称正定矩阵,用“变量循环重新编号法”经过n次变换得到A-1,计算如下:第一章常用计算及辅助函数'1,10,00,0,0'1,10,0,0,0,0,0,0'1,1,0,0,0,01//(1)/(1)/(1)/(1)nnjnjjijijijijijaaaajnkaaajnkaaaajnkaaaaajnk第一章常用计算及辅助函数主要代码for(intk=0;kn;k++){for(inti=0;in;i++){doubleai0=a[i*(i+1)/2];if(i=n-k-1)a0[i]=-ai0/a00;elsea0[i]=ai0/a00;第一章常用计算及辅助函数•for(intj=1;j=i;j++){a[(i-1)*i/2+j-1]=a[i*(i+1)/2+j]+ai0*a0[j];}for(i=1;in;i++){a[(n-1)*n/1+i-1]=a0[i];}a[n*(n+1)/2-1]=1.0/a00;}},0,0,0,0'1,1,0,0,0,0/(1)/(1)ijijijijijaaaajnkaaaaajnk0,0,0'1,10,0,0/(1)/(1)jnjjaajnkaaajnk'1,10,01/nnaa算例第一章常用计算及辅助函数5.01.03.01.06.01.03.01.07.0A10.2971010.0724640.1376810.0724640.1884060.0724640.1376810.0579710.210145A