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