李杰 譚榮建
摘要:
在測量平差計算中,現(xiàn)有的各種平差軟件編制過程一般均為隱含,遇到特殊平差問題不便于軟件自身的優(yōu)化處理和實際應用。運用Excel的VBA編輯器,基于優(yōu)化處理的間接平差數(shù)學模型編制程序進行數(shù)據(jù)處理,闡述了運用Excel進行水準網(wǎng)間接平差的原理和方法。與專業(yè)平差軟件計算結果進行對比分析,結果表明:該方法滿足精度要求,適用于測量平差計算,克服了專業(yè)軟件在實際平差應用中的不足,更具實用性。
關鍵詞:
ExcelVBA;水準網(wǎng);間接平差;數(shù)據(jù)處理
DOIDOI:10.11907/rjdk.173054
中圖分類號:TP319
文獻標識碼:A文章編號文章編號:16727800(2018)003017604
英文摘要Abstract:In the adjustment of surveying calculation, the compilation process of all kinds of surveying adjustment software is generally implicit, and it is not convenient for the optimization processing and practical application of the software itself when the special adjustment of surveying problem is encountered. The mathematical model of leveling network adjustment of indirect observations based on optimized processing is compiled by using VBA editor of Excel, and its superiority is proved; Combined with examples calculation, expounds the principle and method of leveling network adjustment of indirect observations by using excel; and the calculated results were compared with the professional software. The results show that the result of this method meets the requirement of precision. This method can be applied to surveying adjustment, and it overcomes the shortcomings of professional software in application of actual surveying adjustment, and is more practical.
英文關鍵詞Key Words:ExcelVBA; leveling network; adjustment of indirect observations; data processing
0引言
測量平差計算工作主要是矩陣轉(zhuǎn)置、求逆、相乘等[1]。因此,可利用不同的編程語言如VB、 VC++、 Delphi、C++ Builder甚至 Quick Basic、 PC-E500,應運而生了各式各樣的測量平差計算軟件,它們都有一個共同點:要設計一套原始數(shù)據(jù)文件格式,讓程序獲得水準網(wǎng)觀測數(shù)據(jù),但一些軟件使用不便,解決的問題也較單一。因此,需要設計一種使用方便靈活,且易學易懂便于操作的數(shù)據(jù)處理平臺。Excel 宏是一套 Visual Basic for Application ,簡稱 VBA,由 Excel提供一套 COM 接口,高級用戶可用 VB 語法控制 Excel,而且Excel中自帶平差計算用到的一些函數(shù),在程序編寫時可直接運用,非常方便[24]。
1基本原理
水準網(wǎng)間接平差是以待定點的高程平差值作為未知參數(shù),確定合理的近似值,列出測段高差觀測值的誤差方程,基于最小二乘原則求解未知參數(shù)、觀測值的平差值。水準網(wǎng)間接平差模型如下[56]:
誤差方程:
Vn×1=Bn×tX⌒t×1-ln×1(1)
平差準則:
VT1×nPn×nVn×1=min(2)
法方程:
NBBt×tX⌒t×1-Wt×1=0(3)
式(3)中:NBB=BTPB, W =BTPl
因為所選的t個參數(shù)是獨立的,所以系數(shù)陣NBB為滿秩,即R(NBB)= t, X⌒有唯一解,其解為:
X⌒=N\+\{-1\}BBW=(BTPB)-1BTPl(4)
參數(shù)的平差值:
X⌒=X0+X⌒(5)
高差觀測值的平差值:
L⌒=L+v(6)
單位權中誤差:
σ⌒=VTPVn-t(7)
未知數(shù)函數(shù)的中誤差:
σ⌒X⌒i=σ⌒QX⌒iX⌒i(8)
式(8)中:QX⌒iX⌒i是參數(shù)向量X⌒=[X⌒1X⌒2…X⌒t]T的協(xié)因數(shù)陣,即
QX⌒X⌒=QX⌒1X⌒1QX⌒1X⌒2…QX⌒1X⌒tQX⌒2X⌒1QX⌒2X⌒2…QX⌒2X⌒t
QX⌒tX⌒1QX⌒tX⌒1…QX⌒tX⌒t(9)
2程序整體設計
水準網(wǎng)間接平差的解算程序設計流程為:①已知數(shù)據(jù)和觀測數(shù)據(jù)的信息提取及輸入;②每個未知參數(shù)近似高程X0i的計算;③組成法方程,計算高程平差值及相應的中誤差[78]。根據(jù)上述模型編寫程序,所得到的結果直接為所求參數(shù)的估值。
2.1Excel文件設計
利用Excel VBA進行間接平差編程計算時,高程已知點、高程未知點、高差觀測值這3種數(shù)據(jù)需要從水準網(wǎng)中獲取。根據(jù)所讀取的3種數(shù)據(jù)在Excel中設計3張表,分別為“高程已知點表”、“高程未知點表”、“高差觀測值表”。將原始數(shù)據(jù)確認無誤的填入上述已經(jīng)設定好格式的3張表中。對表中的已知高程點的點名和高程值、未知高程點的點號和點名、每一測段的高差觀測值、起始點和終止點點號進行設定,在各點名和點號之間進行匹配,以便更準確地進行數(shù)據(jù)讀取。程序編寫應與所提取數(shù)據(jù)在Excel中的寫入格式嚴格對應起來。在計算高程平差值的誤差時,首先需要計算出QX⌒X⌒,因此增加了“協(xié)因數(shù)陣表”。本文的程序設計和實現(xiàn)都嚴格依靠3張表中數(shù)據(jù)的填寫格式。程序解算出結果后,需要把結果寫入對應的表格中,而寫入表格中的位置由用戶自己設定。通過創(chuàng)建宏,使用“窗體”工具欄,在“高差觀測值”工作表中添加“平差”按鈕控件,并為其指定宏,用戶則通過單擊該控件并根據(jù)相應提示進行操作,所得結果按預定位置寫入工作表中。
2.2未知點近似高程計算
根據(jù)表中的信息,讀取未知點的點號,計算每個未知點高程的近似值X0。
(1)對水準網(wǎng)中每一測段的起點高程、終點高程、點號及高差觀測值掃描讀取,如其中的一個高程點為已知或已獲取近似高程,則另一個高程點為未知。對未知點的高程進行推算,將推算出來的未知點高程標記為“已獲得近似高程”(若是起點和終點的高程均為已知點則說明數(shù)據(jù)輸入錯誤)。
(2)對水準網(wǎng)進行一次掃描,讀取未知點近似高程不能被完全推算出來的情況,循環(huán)掃描,直到一次循環(huán)沒有計算出任何一點近似高程,則表示完成高程未知點讀取。
(3)進行多次掃描后,仍有未知點的近似高程未能計算出來,這說明水準網(wǎng)中該未知點與已知高程點沒有聯(lián)系,在水準網(wǎng)中這是不存在的。如果此情況發(fā)生,說明數(shù)據(jù)輸入錯誤。
根據(jù)上述3點可知:“高差觀測值表”中,觀測值的排列順序嚴重影響著未知點近似高程的計算,即如果觀測值輸入順序有誤,則近似高程X0將發(fā)生改變,而平差結果是否正確將無法判斷。在間接平差中,X⌒=(BTPB)-1BTPl,顯然最終的平差值與 B、 l、P、 L有關,而與近似值X0無關。因此,本文在進行程序設計時直接把X0全部設置為零,不再進行X0的計算。
2.3工作表中數(shù)據(jù)信息讀取
觀測數(shù)據(jù)輸入后,程序首先讀取工作表中已知點名、高程值、未知點名。對于未知點高程的獲取,基于上述4點說明,在本文編寫的程序中賦初值為0。獲得已知點數(shù)、未知點數(shù)及總點數(shù),從而確定誤差方程個數(shù)。然后程序統(tǒng)計高差觀測數(shù)和讀取高差觀測值,列出誤差方程。與此同時,設定每一段高差觀測值起點和終點名稱讀取的正確性判斷,及確認起點和終點是已知點或未知點。本文實例中給出的是每一測段的長度,因此程序設定定權方式為:P=1/Si(Si 為相應測段的長度)。
2.4間接平差程序?qū)崿F(xiàn)
平差過程包括:法方程的組成、求NBB的逆矩陣、求解平差值、高程平差值中誤差、協(xié)因數(shù)陣、單位權中誤差[9]。大部分解算過程都是在B(系數(shù)矩陣)、l、P(權陣)間進行矩陣相乘、求逆和求轉(zhuǎn)置等工作,但最重要的是系數(shù)矩陣B的求解。在平差工作中,l的元素值為觀測值與近似值的差值,而法方程系數(shù)矩陣中,元素值是根據(jù)每段高差觀測值對應的起點和終點編號,以及測量時水準路線的前進方向,確定每段高差所列出的誤差方程中未知數(shù)的系數(shù)值[10],這些系數(shù)值只有1、-1、0三種。然而在實際計算過程中,當水準網(wǎng)中高程未知點和觀測數(shù)的個數(shù)很多時,系數(shù)矩陣B中的元素值大多數(shù)都為0,因此在編寫法方程計算程序時,不用單獨生成B和W兩個矩陣,而是通過程序讀取3張工作表中的觀測數(shù)、未知點數(shù)、已知點數(shù)、起點序號、終點序號等信息,作為系數(shù)值的判斷依據(jù),直接組成法方程并進行計算。
間接平差中幾個主要程序段代碼如下:
'組成法方程
Dim N() As Double
ReDim N(WZDS, WZDS)
Dim U() As Double
ReDim U(GCS)
Dim w As Double
Dim f As Integer
Dim t As Integer
Dim iFlag As Integer
For i = 1 To GCS
f = gc(i).Fidx
t = gc(i).Tidx
iFlag = 0
If f > YZDS Then
'B(i, f - YZDS) = -1
iFlag = iFlag + 1
End If
If t > YZDS Then
'B(i, t - YZDS) = 1
iFlag = iFlag + 2
End If
w = pts(t).H - pts(f).H - gc(i).HDiff
Select Case iFlag
Case 1
N(f - YZDS, f - YZDS) = N(f - YZDS, f - YZDS) + gc(i).P
U(f - YZDS) = U(f - YZDS) - gc(i).P * w
Case 2
N(t - YZDS, t - YZDS) = N(t - YZDS, t - YZDS) + gc(i).P
U(t - YZDS) = U(t - YZDS) + gc(i).P * w
Case 3
N(f - YZDS, f - YZDS) = N(f - YZDS, f - YZDS) + gc(i).P
N(t - YZDS, t - YZDS) = N(t - YZDS, t - YZDS) + gc(i).P
N(f - YZDS, t - YZDS) = N(f - YZDS, t - YZDS) - gc(i).P
N(t - YZDS, f - YZDS) = N(t - YZDS, f - YZDS) - gc(i).P
U(f - YZDS) = U(f - YZDS) - gc(i).P * w
U(t - YZDS) = U(t - YZDS) + gc(i).P * w
End Select
Next
求 N 的逆陣N-1
Dim Q() As Double
ReDim Q(WZDS, WZDS)
Dim tt As Double
Dim j As Integer
Dim k As Integer
For i = 1 To WZDS
Q(i, i) = 1#
Next
For k = 1 To WZDS
tt = 1# / N(k, k)
For j = k + 1 To WZDS
N(k, j) = N(k, j) * tt
Next
For j = 1 To WZDS
Q(k, j) = Q(k, j) * tt
Next
For i = 1 To WZDS
If i <> k Then
tt = -N(i, k)
For j = k + 1 To WZDS
N(i, j) = N(i, j) + N(k, j) * tt
Next
For j = 1 To WZDS
Q(i, j) = Q(i, j) + Q(k, j) * tt
Next
End If
Next
Next
求解平差值
For i = 1 To WZDS
tt = 0#
For j = 1 To WZDS
tt = tt - Q(i, j) * U(j)
Next
pts(i + YZDS).H = tt
Next
3實例驗證
為檢驗程序的正確性,本文采用文獻[11]中的數(shù)據(jù)作為實驗數(shù)據(jù)。水準路線如圖1所示,已知點A的高程為HA=11.100m, P1、P2、P3、P4、P5、P6、P7、P8為未知高程點,觀測高差及路線長度見表1
將水準網(wǎng)中的數(shù)據(jù)分別輸入3張表中,點擊高差觀測值表中的“平差”按鈕,得到平差結果如圖2所示。
對平差結果進行檢驗以驗證平差結果的可靠性。把上述水準網(wǎng)中的數(shù)據(jù)輸入南方平差易2002軟件中進行解算,得出平差結果,再將本文的平差結果、文獻[11]中的平差結果和運用南方平差易解算所得的平差結果進行對比,如表2所示。
4結語
通過表2對比結果可以看出,在同一個水準網(wǎng)平差中,本文程序解算的結果與文獻中的結果及專業(yè)軟件平差結果之間的差值為1mm以內(nèi),充分說明本文程序在運行中達到了預期值,所得的結果滿足水準測量精度要求[12]。本文程序根據(jù)水準網(wǎng)間接平差原理和解算步驟進行設計,在程序編寫過程中省略了一些平差步驟,提高了程序編寫的效率,適合測量初學者理解和掌握間接平差思路,解決相關問題。與此同時,運用Excel進行程序設計,可克服一些專業(yè)軟件程序代碼隱含的缺點,根據(jù)不同需求對程序進行優(yōu)化處理,更具實用性。
參考文獻參考文獻:
[1]李征航,黃勁松.GPS測量與數(shù)據(jù)處理[M].武漢:武漢大學出版社,2005:156165.
[2]李輝,郝艷芬.Excel 2003VBA辦公應用[M].北京:人民郵電出版社,2006.
[3]馬騄.新概念Excel 2003教程[M].北京:科學出版社,2006.
[4]宋毅,王馳,張艷華.Excel實訓教程[M].北京:清華大學出版社,2011.
[5]武漢大學測繪學院測量平差學科組.誤差理論與測量平差基礎[M].武漢:武漢大學出版社,2005.
[6]靳祥升.測量平差[M].第2版.鄭州:黃河水利出版社,2010.
[7]劉翔禹.基于ExcelVBA的水準網(wǎng)間接平差的應用[J].江西測繪,2015(2):1620.
[8]胡遠新,趙奮軍.MATLAB軟件在測量平差解算中的應用[J].采礦技術,2009(2):98100.
[9]胡奇.水準網(wǎng)測量平差軟件設計與開發(fā)[D].淮南:安徽理工大學,2012.
[10]周長江,顧和和.基于VB環(huán)境下水準網(wǎng)平差程序設計研究[J].現(xiàn)代測繪,2012(1):1214.
[11]曾紹炳.基于Excel的條件平差解算[J].東華理工學院學報,2007(1):5154.
[12]梁先兵,李兆雄.利用GPS擬合方法代替四等水準的可行性分析[J].地理空間信息,2016(3):8393.
責任編輯(責任編輯:杜能鋼)