邱利群,胡友健,趙 雷,徐文輝,劉海鵬
(1.中國地質大學(武漢) 信息工程學院,湖北 武漢 430074)
基于Matrix VB與Excel VBA的監(jiān)測網(wǎng)水準基點穩(wěn)定性檢驗
邱利群1,胡友健1,趙 雷1,徐文輝1,劉海鵬1
(1.中國地質大學(武漢) 信息工程學院,湖北 武漢 430074)
介紹了平均間隙法檢驗基準點穩(wěn)定性的原理,并結合實例,利用Matrix VB與Excel VBA編寫了一個水準基點穩(wěn)定性檢驗程序。結果表明,基于Matrix VB與Excel VBA的平均間隙法在水準基點穩(wěn)定性檢驗中具有較好的實用性。
Matrix VB;Excel VBA;平均間隙法;水準基點穩(wěn)定性
Matrix VB是由第三方(Mathtools公司)提供的COM組件,包含了大量與Matlab相似的函數(shù)與調用語法,可以加強VB內建數(shù)學運算與圖形展示功能,在VB程序代碼中可以像使用VB自己的函數(shù)一樣使用Matrix VB的函數(shù),而且可以不依賴于Matlab環(huán)境在Visual Basic中完成矩陣運算與圖形繪制顯示等功能,這種方法使用簡單,編程效率高。
Excel VBA是Excel宏的編輯語言,是基于Visual Basic for Windows發(fā)展而來的,VBA提供了面向對象的程序設計方法,易于學習掌握,使用宏記錄器還可記錄用戶的各種操作,并轉換為VBA程序[1]。Excel VBA與Matrix連接的方法:在VBA菜單欄選擇“工具”,在下拉菜單中單擊“引用”,選中彈出的對話框中MMatrix選項,系統(tǒng)將加載Matrix VB的動態(tài)鏈接庫MMatrix.DLL[2]。
在沉降觀測過程中,為保證基準點的可靠性,必須分期測定基準點的沉降情況,然后對各個點的穩(wěn)定性進行檢驗,剔除不穩(wěn)定點,獲得真正可靠點作為基準點。工程中常利用平均間隙法進行檢驗,在水準基點穩(wěn)定性檢驗過程中需要反復進行矩陣運算,特別是在求廣義逆矩陣時,如果利用C++等語言進行求解,就比較復雜,需要專門設計矩陣運算函數(shù),而利用MatrixVB與Excel VBA聯(lián)合進行計算則可以大大提高工作效率。
1.1 整體檢驗
設1、2表示2個不同的觀測周期。根據(jù)每一周期的觀測成果,按秩虧自由網(wǎng)平差方法進行平差,由平差改正數(shù)計算每一周期的單位權方差估值,公式如下:
式中,f1、f2也為自由度(多余觀測數(shù))。
一般情況下2個不同周期觀測的精度是相等的,但由于觀測誤差的存在,平差計算得到的2期方差估值不可能完全一致。必要時,在應用平均間隙法之前,需進行2期測量精度相同的檢驗,計算2期觀測綜合的單位權中誤差:
式中,f = f1+ f2。
如果2期觀測期間點位沒有變動,那么根據(jù)2個周期觀測成果平差后求得的高程差向量(間隙)為:
由間隙d的協(xié)因數(shù)陣為:
由間隙d可計算單位權方差為:
式中,Pd為Qd的廣義逆; fs為獨立的高程差d的個數(shù)。
作原假設H0:假設2期觀測期間,網(wǎng)中所有點都是穩(wěn)定的,則間隙d與觀測值改正數(shù)v均為正態(tài)變量,是同一正態(tài)母體方差的無偏估值,則:
選定α,查表F(α,fs,f),若F<F(α,fs,f),則接受原假設,即網(wǎng)中所有水準點都是穩(wěn)定的;反之,則拒絕原假設,整體檢驗未通過,表明網(wǎng)中存在動點,需進一步找出不穩(wěn)定的點。
1.2 局部檢驗
設基準點分成穩(wěn)定組F和動點組M,相應地:
采用如下變換:
則有:
2.1 程序設計思想
1)首先利用Excel的宏功能錄制一個制作水準基點穩(wěn)定性檢驗數(shù)據(jù)表的宏,通過對所錄制的宏進行修改,使其能根據(jù)用戶輸入的測段數(shù)生成相應的水準基點穩(wěn)定性檢驗數(shù)據(jù)表。
2)在生成的表格中輸入檢驗數(shù)據(jù),利用Excel VBA語句將數(shù)據(jù)讀入到程序中,借助Matrix VB中的矩陣運算函數(shù)如矩陣相乘函數(shù)mtimes()、矩陣求逆函數(shù)inv()對觀測數(shù)據(jù)進行秩虧自由網(wǎng)平差。
3)對平差結果首先進行整體檢驗,若檢驗結果為網(wǎng)中所有水準基點保持穩(wěn)定,則退出程序,否則進行局部檢驗,直到找出不穩(wěn)定水準基點為止。程序設計流程如圖1所示。
圖1 程序設計流程圖
2.2 程序實現(xiàn)
本程序的難點是根據(jù)測段數(shù)自動生成含有相對應測段數(shù)的表格和根據(jù)表格中的數(shù)據(jù)自動生成系數(shù)矩陣B。下面為整體檢驗的主要代碼(部分):
1)初始化矩陣。
a=val(textbox1.text) ’測段數(shù)
L1= ones(a, 1): S1= ones(a, 1):P1= ones(1, a)
2)判斷基準網(wǎng)中水準基點個數(shù),初始化高程矩陣。
r = Application.CountA(Range("H:H"))
H = ones((r - 1), 1)
3)生成系數(shù)矩陣B的程序。
B = ones(a - 2, r - 1)
For i = 1 To a - 2
For j = 1 To r - 1
If Range("A" & (i + 2)).Value = j Then
B(i, j) = -1
ElseIf Range("B" & (i + 2)).Value = j Then
B(i, Range("B" & (i + 2)).Value) = 1
Else
B(i, j) = 0
End If
Next j
Next i
4)將檢驗數(shù)據(jù)讀入程序中。
For i = 1 To a
h1(i,1)= Range("C" & (i + 2)).Value
S1(i, 1) = Range("D" & (i + 2)).Value
P1(1, i) =1/ S1(i, 1)
………
Next i
For i = 1 To (r - 1)
H(i, 1) = Range("H" & (i + 2)).Value
Next i
L1=minus(h1-mtimes(B,H))
5)秩虧自由網(wǎng)平差代碼。
B1= Transpose(B):P1= diag(P1)
S= ones(1, r): S3= Transpose(S)
Nbb1= mtimes(mtimes(B1, P1), B)
Nbb2= mtimes(mtimes(B1, P2), B)
Q1= plus(Nbb1, mtimes(S3, S)) : Q2= inv(Q1)
W1= mtimes(mtimes(B1, P1), L1) x1= mtimes(Q2, W1)
Q3= plus(Nbb2, S) : Q4= inv(Q3)
W2= mtimes(mtimes(B1, P2),L2) : x2= mtimes(Q4, W2)
V1= minus(mtimes(B, x1), l1) : V2= minus(mtimes(B, x2), l2)
6)整體檢驗代碼。
V1P1V1= mtimes(mtimes(Transpose(V1), P1), V1)
V2P2V2= mtimes(mtimes(Transpose(V2), P2), V2)
d = minus(x2, x1) : d1= Transpose(d)
Qd = mtimes(mtimes(Q2, Nbb1), Q2) : Pd = pinv(Qd)
Qs = rdivide((mtimes(mtimes(d1, Pd), d)), a/2)
Q = rdivide(plus(V1PV1, V2PV2),a)
TextBox1.Text = (r - 1) & "個基準點全部穩(wěn)定"
Else
TextBox1.Text = "基準網(wǎng)中含有不穩(wěn)定基準點"
End If
為對某高層建筑群進行沉降監(jiān)測,布設了含有4個水準基點的監(jiān)測基準網(wǎng),該監(jiān)測網(wǎng)共含有6個測段,如圖2所示。為檢驗監(jiān)測網(wǎng)水準基點穩(wěn)定性,在不同時間對基準網(wǎng)進行了2周期觀測。
運行程序,輸入測段數(shù)和F檢驗值,單擊“生成表格”命令按鈕,在Excel中生成2張水準基點穩(wěn)定性檢驗數(shù)據(jù)表,將2個周期的觀測數(shù)據(jù)分別輸入到已生成的表格中,注意起點號與終點號都要按阿拉伯數(shù)字的形式輸入,如點號BM01則應輸入“1”,如表1所示。
表1 第1周期觀測數(shù)據(jù)表
檢查觀測數(shù)據(jù)輸入無誤后,單擊“整體檢驗”命令按鈕,進行整體檢驗。若4個水準基點都保持穩(wěn)定,則檢驗完畢,退出程序;若含有不穩(wěn)定點,則在假設不穩(wěn)定點點號的文本框中輸入假設不穩(wěn)定點點號,單擊“局部檢驗”命令按鈕,找出不穩(wěn)點。程序運行結果如圖3所示。
圖3 程序運行結果圖
如圖3所示,該監(jiān)測基準網(wǎng)中的4個水準基點保持穩(wěn)定,2個周期的觀測值改正數(shù)也被輸出到水準基點穩(wěn)定性檢驗數(shù)據(jù)表中。在隨后的基準點穩(wěn)定性檢驗工作中,只要將2個周期的數(shù)據(jù)輸入到基準點穩(wěn)定性檢驗數(shù)據(jù)表中,運行該程序即可對水基準點穩(wěn)定性進行檢驗。
在水準基點穩(wěn)定性檢驗過程中,Excel的宏功能完成了自動生成不同測段數(shù)所需要的水準基點穩(wěn)定性檢驗數(shù)據(jù)表操作;Excel VBA語句實現(xiàn)了將水準基點穩(wěn)定性數(shù)據(jù)表中的觀測數(shù)據(jù)讀入到程序中的功能;Matrix VB的矩陣運算函數(shù)對觀測數(shù)據(jù)進行了秩虧自由網(wǎng)平差,并基于平均間隙法原理對水準基點的穩(wěn)定性進行了檢驗。結果表明,基于Matrix VB與Excel VBA的平均間隙法在水準基點穩(wěn)定性檢驗中具有較強的實用性。
[1] 李輝,郝艷芬.Excel 2003 VBA辦公應用[M].北京:人民郵電出版社,2006
[2] 李沛鴻,江鴻斌,王勁松.基于Matrix VB的測量平差程序設計與實現(xiàn)[J].北京測繪,2012(6):14-18
[3] 尹暉,楊睿,陳鵬云.監(jiān)測網(wǎng)基準點穩(wěn)定性檢驗方法與應用[J].武漢理工大學學報:信息與管理工程版,2010,32(6):861-865
[4] 黃聲享,尹暉,蔣征.變形監(jiān)測數(shù)據(jù)處理[M].武漢:武漢大學出版社,2003
[5] 王漢雄,喬景順.Excel VBA在測量數(shù)據(jù)處理中的應用[J].測繪科學,2008,33(2):210-212
[6] 姚占派,緱忠才.基于Matlab的水準點穩(wěn)定性分析[J].現(xiàn)代測繪,2004,27(2):25-27
[7] 湯均博,周立.基于Matlab的逆穩(wěn)平差法在沉降觀測基準點檢驗中的應用[J].淮海工學院學報,2003,12(3):63-65
[8] 周西振.變形監(jiān)測網(wǎng)基準點及工作基點的穩(wěn)定性檢驗[J].北京測繪,2001(3):37-39
P221
B
1672-4623(2015)01-0146-03
10.3969/j.issn.1672-4623.2015.01.048
邱利群,碩士,主要從事變形監(jiān)測及數(shù)據(jù)處理研究。
2013-12-23。
項目來源:國家測繪地理信息局重點實驗室開放基金資助項目(2013118006)。