湖北省地质局第一地质大队 湖北大冶 435100
摘要:本文首先介绍了MatrixVB的一些基本功能和应用,然后简要阐述了水准网平差程序的设计方法和步骤,最后利用VB6.0和MatrixVB实现水准网平差程序的设计。
关键词:VB6.0;MatrixVB;测量平差程序设计;水准网平差
1引言
目前,在测量平差程序设计中经常要利用矩阵计算,程序设计者往往将矩阵的计算编制成基于数组的函数模块,在需要时直接调用之,这些模块的设计、调试工作量大不说,在调用前还需要重新定义各数组的大小,使用起来比较麻烦;这里介绍了一个基于MATLAB的的组件MatrixVB,它具有强大的矩阵计算、图形图像处理、最优化运算等功能,结合VB6.0进行测量程序的设计,程序步骤清晰,计算结果可靠,可以节约大量的程序设计时间,是一种很好的测量程序设计方法。
2MatrixVB介绍
MatrixVB是由Mathtools公司提供的一个COM组件,它提供了很多有效的类似MATLAB算法,特别是其矩阵计算功能,在测量平差程序设计中可以发挥巨大的作用。
2.1MatrixVB的安装
在安装盘上找到MatrixVB安装文件,双击后按照安装向导安装,安装完毕后注册动态链接库mMatrix.dll,其方法为是在电脑的“开始—运行”菜单中输入命令“regsvr32 mMatrix.dll”即可。
2.2VB开发程序的前期准备
打开VB6.0,建立VB程序,然后一定要在“Project—References”下选上“MMatrix”,见下图
这样配置后在开发过程中就可以使用矩阵的一些运算符了,如矩阵求逆B=inv(A)等;
2.3VB6.0中数组在MatrixVB中的应用
在vb6.0中定义的数组可以通过mabs()、CreateMatrix()等转化为MatrixVB中的矩阵,当然在MatrixVB环境下,可以默认将VB6.0中的数组转化为MatrixVB矩阵,即能直接把数组当作矩阵来使用。
在利用MatrixVB矩阵计算完毕后,要获取矩阵的元素可以采用MatrixVB矩阵读取运算(如a=A.r1(i+1)),也可利用simple方法将一行一列元素转换为VB6.0中的数据,但simple方法不能转换为一维或多维数组,如要转换需要采用程序循环控制逐一读出。
2.4MatrixVB中常用的几个矩阵运算
1)加法运算 plus(A,B)
2)减法运算 minus(A,B)
3)乘法运算 times(A,B) 对应元素相乘
mtimes(A,B) 线性代数中的矩阵相乘
4)除法运算 rdivide(A,B) 右除
lrdivide(A,B) 左除
5)求逆运算 inv(A)
6)转置运算 transpose(A)
3水准网程序设计
3.1数学模型
这里采用间接平差模型:
误差方程 V=Bx-l
法方程 BTPBx-BTPL=0
单位权中误差 σ0=sqrt(VTPV/(n-t))
3.2编程实现
由于篇幅所限,这里只写出主要代码:
原始观测数据的读取
1) Input #1,n,u,h '已知点个数,未知点个数,观测值个数
t = n + u
ReDim Pn(1 To t),Hk(1 To t)
ReDim h(1 To h),s(1 To h),b(1 To h),e(1 To h)
For i = 1 To t '读入点名
Input #1,Pn(i)
Next i
For i = 1 To n '读入已知高程
Input #1,Hk(i)
Next i
2)近似值的计算
For i = 1 To u
For j = 1 To h
If b(j)= n + i And e(j)< n + i Then
Hk(n + i)= H(e(j))- h(j)
Exit For
End If
If e(j)= n + i And b(j)< n + i Then
Hk(n + i)= Hk(b(j))+ h(j)
Exit For
End If
Next j
Next i
3)误差方程系数、常数项、观测值的权
For i = 1 To h
If e(i)> n Then A(i,e(i)- n)= 1
If b(i)> n Then A(i,b(i)- n)= -1
l(i,0)= -(Hk(e(i))- Hk(b(i))- h(i))
P(i,i)= 1 / s(i)
Next i
法方程组成及未知数的计算(主要利用MatrixVB的运算符)
4) At = transpose(A) '误差方程系数转置
AtP = mtimes(At,P)
AtPA = mtimes(AtP,A) '法方程系数Naa
AtPl = mtimes(AtP,l) '法方程常数项BTPL
lAtpa = inv(AtPA) '法方程系数Naa求逆
X = mtimes(lAtpa,AtPl) '未知数的改正数计算
For i = 1 To u '从矩阵中读出未知数的改正数
xs(i)= X.R1(i)
Next i
精度评定
5) B = mtimes(A,X)
lv = minus(B,l) '观测值的改正数计算
vt = transpose(lv)
VtP = mtimes(vt,P)
VtPV = mtimes(VtP,lv)
pvv = VtPV.Simple
水准网平差程序设计界面如下:
6)
4实例
参考文献[3]有一水准网算例,原始观测数据如下:
4,3,7
A,B,C,D,P1,P2,P3
238.744,258.732,241.431,262.160
A,P1,13.019,6.7
B,P1,-6.949,8.3
C,P2,7.251,5.6
D,P3,-8.238,5.3
P2,P1,3.092,5.7
P1,P3,2.175,7.6
P2,P3,5.255,9.6
输出结果:
...
列立的误差方程:
1 0 0 0.0000
1 0 0 0.0200
0 1 0 0.0000
0 0 1 0.0000
1 -1 0 0.0110
-1 0 1 0.0160
0 -1 1 0.0150
权矩阵:
0.149253731343284 0 0 0 0 0 0
0 0.120481927710843 0 0 0 0 0
0 0 0.178571428571429 0 0 0 0
0 0 0 0.188679245283019 0 0 0
0 0 0 0 0.175438596491228 0 0
0 0 0 0 0 0.131578947368421 0
0 0 0 0 0 0 0.104166666666667
平差计算结果:
点号 初始高程(m) 高程改正数(m) 平差后高程(m)
P1 251.7630 0.0049 251.7679
P2 248.6820 -0.0037 248.6783
P3 253.9220 0.0093 253.9313
单位权中误差:(mm)
5.2375
点号 高程中误差:(mm)
P1 7.9300
P2 8.8265
P3 8.9422
计算结果与参考文献[3]一致,说明平差过程及结果正确无误。
5 结束语
通过利用MatrixVB对水准网平差程序的设计可以得出以下结论:
平差程序设计编程过程清晰,简单明了,与矩阵描述的平差数学模型步骤完全一致,使大家更容易理解;
1) 相比常规的平差程序设计,不用顾及很多子程序或函数调用过程中的初值设置问题;
2) MatrixVB由国际知名商业公司提供,经历多个版本的升级换代,并且其正确性和稳定性在世界各地应用中得到印证,可以广泛应用于科学计算;
3) 随着MatrixVB的推广应用,将会在测绘工程的各领域中提高计算效率和准确率,使更多的测绘工作者受益。
4) 参考文献
[1]武汉测绘科技大学测量平差教研室.测量平差基础[M].北京:测绘出版社,2003
[2]The math works inc.MatrixVB User’s Guide[M]
[3]秦永乐.Visual Basic 测绘程序设计[M].郑州:黄河水利出版社,2006
[4]葛永慧,余哲,刘志德.测绘编程基础[M].北京:测绘出版社,2002
第一作者:郑文霞(1982.11-),女,工程师,主要从事测绘数据处理工作。
论文作者:郑文霞,李杰
论文发表刊物:《建筑学研究前沿》2018年第33期
论文发表时间:2019/3/7
标签:矩阵论文; 程序设计论文; 方程论文; 数组论文; 误差论文; 高程论文; 水准论文; 《建筑学研究前沿》2018年第33期论文;