基于MatrixVB的水准网平差程序设计论文_郑文霞,李杰

湖北省地质局第一地质大队 湖北大冶 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

标签:;  ;  ;  ;  ;  ;  ;  ;  

基于MatrixVB的水准网平差程序设计论文_郑文霞,李杰
下载Doc文档

猜你喜欢