四川省川建勘察设计院
摘要:本文主要以边角网间接平差原理为基础,结合实际工作中遇到的具体问题,提出固定站自由后方交会网间接平差的概念形式和平差模型。并基于VB开发平台,编写出电算程序,实现了外业观测数据的摘录、误差方程列立、各项矩阵间的计算等工作。
关键词:固定站自由后方交会;间接平差;VB;矩阵
概论
传统的控制测量主要布设形式包括了三角网、导线网、基线网、轴线网等。这些网形满足了不同工程测量的要求,在大地测量和施工控制测量上发挥了基础作用。但是对于一些特殊的工程测量确不能够满足或适用需要。譬如大中型的机库建设,一个机库包括了基础、至少好几层地坪、顶部结构等多个施工层面,施工工序也是有先有后。如果在场地有限的情况下,采用传统的布网形式布设成三角网、导线网等,控制点在第一道施工工序进行时布设于机库内最底层地坪上,则只可以满足本道工序测量的控制。本道工序施工完成后,第二层地坪施工作业开始,必定把之前的控制点全部覆盖,以后的作业工序同样如此。就算重新布置控制网,也存在前后两套控制网之间精度存在矛盾的问题,还存在着浪费资源,耽误工期的问题。
固定站自由后方交会的方法,采用了先在作业面最底层上布置两个控制点,这两个控制点与起算点之间进行联系,再在作业区域周边通视条件好、易保存的柱体上植入强制对中装置,这些点再与底面上的控制点联测,类似高铁上CPIII控制的测量方式。在施工测量过程中即可采用后方交会的方法,自由设站进行点位放样、数据采集等工作。这种做法克服了施工过程中控制点不易保存的难题,不仅保证了在所有的施工工序都采用同一套坐标系统,而且通过自由设站,大量地避开了施工场地上众多的遮挡物体,极大地提高了通视条件,更便于测量工作进行。同时还降低了反复进行控制测量所带来的人力、财力浪费、缩短了工程周期,提高了作业效率。
固定站自由后方交会控制点布置示意图如下:
在控制网测量过程中,首先求出A1、A2两点坐标,然后分别在A1、A2两点设站,以A1—A2和A2—A1为起算方向,依次对1、2、3、4观测并记录距离、角度信息。然后按照间接坐标平差原理进行平差,求解柱体上各点坐标。
2 固定站自由后方交会间接平差程序设计
2.1基本原理
在确定多个未知量的最或然值时,选择它们之间不存在任何条件关系的独立量作为未知量组成用未知量表达测量的函数关系、列出误差方程式,按最小二乘法原理求得未知量的最或然值的平差方法。计算机解决测量工作中的数据处理问题,平差计算最常用的方法为间接平差,因为其数学模型比较简单,便于评定平差值及其函数的精度,同时也便于编程。
2.2矩阵运算程序
由于固定站后方交会间接平差的计算过程是通过矩阵的运算而得到的,所以在编写误差方程之前,先进行基于VB的矩阵运算程序设计。
为了便于数据的摘录与计算,原始数据采用(.XLS)保存,将用于计算的数据分别摘录入MSHFlexGrid控件,然后进行矩阵的运算和结果保存。
本过程主要包括了三个模块,分别为矩阵的转置、矩阵相乘和矩阵的逆,下面分别为这三个模块的程序代码。
'矩阵相乘
Private Sub bc_Click(), Dim bb,ccAs Double,abc = 50,Me.MSHFlexGrid4.Rows = abc + 1,Me.MSHFlexGrid4.Cols = abc + 1,For i = 1 To a Step 1,For j = 1 To a2 Step 1,bb = 0,For r = 1 To b Step 1,cc = MSHFlexGrid1.TextMatrix(i, r) * Val(MSHFlexGrid2.TextMatrix(r, j)),bb = bb + cc,Next r,MSHFlexGrid4.TextMatrix(i, j) = bb,Next j,Next i,End Sub
'矩阵转置
Private Sub be_Click(),abc = 50,Me.MSHFlexGrid4.Rows = abc + 1,Me.MSHFlexGrid4.Cols = abc + 1,For i = 1 To b Step 1,For j = 1 To a Step 1,MSHFlexGrid4.TextMatrix(i, j) = MSHFlexGrid1.TextMatrix(j, i),Next j,Next i,End Sub
'矩阵行列式
Public Sub cb_Click(),Dim ch,m,n As Integer,Dim a() As Double,ch = InputBox("行数", "输入矩阵行列数", "4"),ReDim a(1 To ch, 1 To ch),For m = 1 To ch Step 1,For n = 1 To ch Step 1,a(m, n) = MSHFlexGrid1.TextMatrix(m, n),Next n,Next m,Text1.Text = calcMatrix(a(), ch)
End Sub
'矩阵求逆
Private Sub cd_Click()
Dim a,b,c,d ,m,n, Chax , Chay ,ch,cl,0,p,q,r,vAs Integer,Dim E(),F(),G()As Double,ch = InputBox("行数", "输入矩阵行列数", "4"),cl = ch – 1,Me.MSHFlexGrid4.Rows = ch + 1,Me.MSHFlexGrid4.Cols = ch + 1,ReDim E(1 To ch, 1 To ch),For m = 1 To ch Step 1,For n = 1 To ch Step 1,E(m, n) = MSHFlexGrid1.TextMatrix(m, n),Next n,Next m,Dim add As Double
,add = 1 / calcMatrix(E(), ch),o = InputBox("行数", "输入矩阵行列数", "4"),p = o,q = o – 1,r = o – 1,For a = 1 To o,For b = 1 To p,ReDim F(1 To 7, 1 To 7),For c = 1 To q,For d = 1 To r,If c < a Then,Chax = 0,Else,Chax = 1,End If,If d < b Then,Chay = 0,Else,Chay = 1,End If,F(c, d) = MSHFlexGrid1.TextMatrix(c + Chax, d + Chay),Next d,Next c,MSHFlexGrid4.TextMatrix(b, a) = (calcMatrix(F(), 7) * add * ((-1) ^ (a + b))),Next b,Next a
End Sub
'定义求代数余子式
Public Function calcMatrix(a() As Double, k As Integer) As Double,Dim c, d, i, j, x, y As Integer,Dim temp, temp1(),temp2()As Double,ReDim temp1(1 To k, 1 To k),For i = 1 To k,For j = 1 To k,temp1(i, j) = a(i, j),Next j,Next i,d = k,For c = 1 To d,ReDim a(1 To d, 1 To d),For i = 1 To d,For j = 1 To d,a(i, j) = temp1(i, j),Next j,Next i,k = d,If k >= 2 Then,ReDim temp2(1 To k - 1, 1 To k - 1),For x = 1 To k – 1,For y = 1 To k – 1,If y < c Then,temp2(x, y) = a(x + 1, y),Else,temp2(x, y) = a(x + 1, y + 1),End If,Next y,Next x,k = k – 1,ReDim a(1 To k, 1 To k),For x = 1 To k,For y = 1 To k,a(x, y) = temp2(x, y),Next y,Next x,temp = (-1) ^ (1 + c) * temp1(1, c) * calcMatrix(a(), k),calcMatrix = calcMatrix + temp,ElseIf k = 1 Then,calcMatrix = calcMatrix + a(1, 1),End If,Next c
End Function
2.3误差方程式的列立
假定j、k是两个待定点,它们的近似坐标为X0j、Y0j、X0k、Y0k。根据这些近似坐标可以计算两点间的近似方位角a0jk和近似距离s0jk。这两点近似坐标改正数为x'j、y'j、x'k、y'k,经过线性化之后,近似方位角改正数和近似坐标改正数之间的关系为:
下面为计算固定站自由后方交会误差方程编程代码:
第一个控制点上边长观测值误差方程系数矩阵
w = 1,y = 1,For i = a + 1 To 3 * a / 2 Step 1,x3 = MSHFlexGrid3.Text
Matrix(y,2)-Val(Text1.Text),y3= MSHFlexGrid3.TextMatrix(y, 3) - Val(Text2.Text),For j = 1 To a / 2 Step 1,If j = w Then,x1 = MSHFlexGrid3.TextMatrix(w, 2) - Val(Text1.Text),y1 = MSHFlexGrid3.TextMatrix(w, 3)-Val(Text2.Text),MSHFlexGrid4.TextMatrix(i, 2 * j - 1) = Round(x1 / Sqr(y1 * y1 + x1 * x1), 4),MSHFlexGrid4.TextMatrix(i, 2 * j) = Round(y1 / Sqr(y1 * y1 + x1 * x1), 4),Else,MSHFlexGrid4.TextMatrix(i,2* j - 1) = 0,MSHFlexGrid4.TextMatrix(i, 2 * j) = 0,End If,Next j,MSHFlexGrid6.TextMatrix(i, 1) = -MSHFlexGrid1.TextMatrix(y, 3) + Sqr(y3 * y3 + x3 * x3),MSHFlexGrid5.TextMatrix(i, i) = u * u / ((va + vb * Sqr(y1 * y1 + x1 * x1) / 1000)),w = w + 1,y = y + 1,Next i
第二个控制点上边长观测值误差方程系数矩阵
w = 1,y = 1,For i = 3 * a / 2 + 1 To 2 * a Step 1,x3 = MSHFlexGrid3.TextMatrix(y,2)-Val(Text3.Text),y3 = MSHFlexGrid3.TextMatrix(y, 3) - Val(Text4.Text),For j = 1 To a / 2 Step 1,If j = w Then,x2 = MSHFlexGrid3.TextMatrix(w, 2) - Val(Text3.Text),y2 = MSHFlexGrid3.TextMatrix(w, 3)-Val(Text4.Text),MSHFlexGrid4.TextMatrix(i, 2 * j - 1) = Round(x2 / Sqr(y2 * y2 + x2 * x2), 4),MSHFlexGrid4.TextMatrix(i, 2 * j) = Round(y2 / Sqr(y2 * y2 + x2 * x2), 4),Else,MSHFlexGrid4.TextMatrix(i, 2 * j - 1) = 0,MSHFlexGrid4.TextMatrix(i, 2 * j) = 0,End If,Next j,MSHFlexGrid6.TextMatrix(i, 1) = -MSHFlexGrid2.TextMatrix(y, 3) + Sqr(y3 * y3 + x3 * x3),MSHFlexGrid5.TextMatrix(i, i) = u * u / ((va + vb * Sqr(y2 * y2 + x2 * x2) / 1000)),w = w + 1,y = y + 1,Next i,End Sub,Private Sub Form_Load(),MSHFlexGrid1.Visible = False,MSHFlexGrid2.Visible = False,Me.MSHFlexGrid4.Rows = 2 * a + 1,Me.MSHFlexGrid4.Cols = 5,Me.MSHFlexGrid5.Rows = 2 * a + 1,Me.MSHFlexGrid5.Cols = 5,End Sub,Private Sub 退出_Click(),Unload Me,End Sub,Public Function hudu(z As Double, x As Double) As Double,If z > 0 And x > 0 Then,hudu = Atn(z / x) / 3.1415926535898 * 180,End If,If z < 0 And x < 0 Then,hudu = Atn(z / x) / 3.1415926535898 * 180 + 180,End If,If z > 0 And x < 0 Then,hudu = Atn(z / x) / 3.1415926535898 * 180 + 180
End If,If z < 0 And x > 0 Then,hudu = Atn(z / x) / 3.1415926535898 * 180 + 360,End If,End Function
实例讲解
第1步:打开原始数据、控制点信息、仪器指标信息输入(略)。
第2步:生成待测点近似坐标、系数矩阵、单位矩阵、常数项矩阵。
近似坐标
系数矩阵
单位矩阵
常数矩阵
第3步:矩阵之间的运算,根据公式(BTPB)-1BTPL在第一个模块逐一计算,得近似坐标改正结果如下。
4.结论
从测量平差最小二乘法原理出发,结合了边角网间接平差理论和现实具体情况,提出了固定站自由后方交会的新形式。针对一些厂库、机库等的精密安装工程和作业工序多层的特点,将控制点布设于周边有利位置,大大提高了测量的有效性、统一性,创造了较好的通视条件。
本文仅对误差方程的列立和矩阵之间的计算进行讨论,至于精度的评定和误差椭圆的绘制没做论述。其中单位问题需要特别地指出,单位问题出现在观测值单位权和误差方程系数的求解两处,角度方向值我采用秒为单位,长度采用毫米为单位。
另外一个问题是测量平差本身是基于最小二乘原理,在第一步近似坐标计算中,我采用的方法是分别以两个控制点计算4个待测点坐标,然后取两结果平均值,因此再经过程序的计算所得出的结果就很小,本质上近似等于进行了一次迭代运算。
参考文献
[1]武汉大学测绘学院测量平差学科组. 误差理论与测量平差基础.武汉:武汉大学出版社,2003
[2]孔祥元,梅是义编.控制测量学(下).武汉:武汉测绘科技大学出版,1996
[3]李俊民,赵东.零基础学Visual Basic.北京:机械工业出版社,2010
论文作者:李玉苗
论文发表刊物:《基层建设》2016年4期
论文发表时间:2016/6/15
标签:矩阵论文; 测量论文; 坐标论文; 近似论文; 误差论文; 作业论文; 工序论文; 《基层建设》2016年4期论文;