中国矿业大学2012届本科生毕业设计第 27 页
图3.6 a 条件平差结果
图3.6 b 条件平差结果
在图3.6 a和图3.6 b的I7、J7、L7列中分别输入以下三式,求出边长、角度、方位角的平差值:
=E7+G7/100
=INT(辅助!E6+平差结果表!H7/3600)+( INT((辅助!E6+平差结果表!H7/3600-INT(辅助!E6+平差结果表!H7/3600))*60))/100+(((辅助!E6+平差结果表!H7/3600-INT(辅助!E6+平差结果表!H7/3600))*60-INT((辅助!E6+平差结果表!H7/3600-INT(辅助!E6+平差结果表!H7/3600))*60))*60)/10000
=INT(辅助!I6)+( INT((辅助!I6-INT(辅助!I6))*60))/100+(((辅助!I6-INT(辅助!I6))*60-INT((辅助!I6-INT(辅助!I6))*60))*60)/10000
将上三式分别复制并填充到区域I7:I10、区域J7:J10和L7:L11中,即可计算出各个边长、角度、方位角的平差值。
中国矿业大学2012届本科生毕业设计第 28 页
图3.7 条件平差辅助数据计算
在图3.7中的辅助表中涉及到的度分秒和度小数之间转化、各边方位角的推算问题,在第一、二节中已经提到过,在这就不再赘述。
图3.8 a条件平差的相关矩阵计算
中国矿业大学2012届本科生毕业设计第 29 页
图3.8 b条件平差的相关矩阵计算
图3.8 c 条件平差的相关矩阵计算
图3.8 a、b、c中主要是在改正系数A表中计算条件平差的系数阵A和观测权阵P,闭合差项W以及这些矩阵的组合和矩阵的一系列转置、求逆、乘法运算,其中运用了Excel中的函数RADIANS()、TRANSPOSE()、 MINVERSE()、MMULT()。
(1)边长改正数的系数在D、E列中需用到SIN()、COS()、RADIANS()函数。 (2)系数矩阵A要用到TRANSPOSE()函数,如A矩阵中的b行需选定单元格M4:P4输入“=TRANSPOSE(D4:D7)”,然后按[Ctrl]+[Shift]+[Enter],计算结果自动显示在相应的单元格中;同理,求出系数矩阵的其他系数。
(3)计算观测值权阵中的测边观测权
在上图中的O12中输入=$P$8^2/(($P$9+$Q$9*平差结果表!E7)/10)^2,可得到一个边的权,然后复制并填充到O12:O15,得到个边的观测权;测角观测权一般都为1。其中的$P$8表示无论怎么拖动复制,都会保持单元格S8的值,其他也类似。
(4)计算权逆矩阵,首先选定上图中Excel的单元格O31:W39,输入公式“=MINVERSE(O21:W29)”,然后按[Ctrl]+[Shift]+[Enter],计算结果自动显示在相应的单元格中。
(5)计算法方程系数阵N,首先选定上图Excel的单元格O41:Q43,输入公式“=MMULT(MMULT(M3:U5,O31:W39),K12:M20)”,然后按[Ctrl]+[Shift]+[Enter],计算结果自动显示在相应的单元格中。
(6)计算逆矩阵,首先选定单元格O41:Q43,输入公式 “=MINVERSE(O41:Q43)”,然后按[Ctrl]+[Shift]+[Enter],计算结果自动显示在相应的单元格中。
(7)计算闭合差项W的3项,分别在O48、O49、O50中输入: =-(辅助!G10-辅助!D5)*3600 =-(辅助! J9-平差结果表!B6)*100 =-(辅助!K9-平差结果表!C6)*100 (8)计算联系数K
首先选定O51:O53,输入公式“=MMULT(O45:Q47,O48:O50)”,然后按[Ctrl]+[Shift]+[Enter],计算结果自动显示在相应的单元格中。
中国矿业大学2012届本科生毕业设计第 30 页
(9)计算单位权中误差
首先选定上图中的Excel表中的单元格O55:W55,输入公式=TRANSPOSE(MMULT (MMULT(O31:W39,K12:M20),O51:O53)),然后按[Ctrl]+[Shift]+[Enter],计算结果自动显示在相应的单元格中,最后在单元格O58中输入=SQRT(MMULT(MMULT(O55:
?0 2.6055。 W55,O21:W29),TRANSPOSE(O55:W55))/3),得到单位权中误差?
中国矿业大学2012届本科生毕业设计第 31 页
4 导线网的间接平差程序设计与实现
4.1矩阵的相关函数
在数据处理程序中,经常需要用到矩阵的基本计算,包括矩阵的乘积、转置、求逆等。在测量数据处理中,还需要用到一些具体的、有规律和统一的矩阵计算。在此,为程序简单起见,我们用C语言的数组表示矩阵,定义矩阵的最大维数为MAX(定义矩阵存储空间大小),函数中对同类计算使用C++重载的概念进行处理,从而使程序清晰、应用方便。 4.1.1矩阵相乘
1.普通矩阵相乘
矩阵相乘包括两个矩阵的乘积和数乘矩阵两个方面的内容。 (1)基本矩阵相乘 定义函数为
void AXB(double A[][MAX],double B[][MAX],double C[][MAX],int m,int n,int k);
其中:MAX为预定义的矩阵最大维数。 应用举例:
double S[MAX][MAX],H[MAX][MAX],T[MAX][MAX]; //定义矩阵,注意维数必须与函数定义相统一
// 对S与H矩阵赋值 AXB(S,H,T,3,4,5); 上式计算:S?H?T3,44,53,5
(2)数乘以矩阵 定义函数为:
void AXB(double a,double A[][MAX], double aA[][MAX],int m,int n); 应用举例:
double S,H[MAX][MAX],T[MAX][MAX]; //定义矩阵,注意维数必须与函数定义统一
// 对S与矩阵H赋值 AXB(S,H,T,4,5); 上式计算:S?H?T
4,54,5(3)矩阵乘以列向量 定义函数为:
void AXB(double A[][MAX],double B[][1],double C[][1],int m,int n); 应用举例:
double S[MAX][MAX],H[MAX][1],T[MAX][1];