李張華 姚連璧
摘要:本文主要探討如何利用Microsoft Excel內(nèi)置的VBA來編寫導(dǎo)線網(wǎng)平差的計(jì)算程序的方法。該方法具有計(jì)算步驟、計(jì)算方法可視化,計(jì)算原理、計(jì)算公式緊密結(jié)合的解題式特點(diǎn),非常適合剛剛進(jìn)入測(cè)量工作中的工作人員解決測(cè)量實(shí)踐中平差計(jì)算問題并能從基礎(chǔ)逐步掌握測(cè)量平差的原理。
關(guān)鍵詞:測(cè)量誤差;測(cè)量平差;導(dǎo)線網(wǎng);平差計(jì)算;最小二乘法
1引言
Microsoft Excel是微軟公司開發(fā)的Office辦公軟件之一,是目前市面上使用率最高也是功能最全面的電子表格軟件。它不僅擁有豐富的電子表格制作和編輯功能,還擁有功能強(qiáng)大的函數(shù)計(jì)算功能,能夠創(chuàng)建和編輯函數(shù)公式,可以利用軟件系統(tǒng)本身提供的函數(shù)公式來完成各項(xiàng)復(fù)雜的數(shù)學(xué)計(jì)算。
本文在介紹Microsoft Excel基本的運(yùn)算操作方法的基礎(chǔ)上,結(jié)合平差算例全面闡述Microsoft Excel在導(dǎo)線測(cè)量平差中的應(yīng)用方法。
2閉合導(dǎo)線平差和附合導(dǎo)線平差的基本原理和方法
2.1角度閉合差的計(jì)算與調(diào)整
(1)計(jì)算閉合差:
(2)計(jì)算限差:
(3)若在限差內(nèi),則按平均分配原則,計(jì)算改正數(shù):
(4)計(jì)算改正后新的角值:
2.2 坐標(biāo)增量閉合差的計(jì)算與調(diào)整
(1) 計(jì)算坐標(biāo)增量閉合差。 有:
導(dǎo)線全長閉合差:
導(dǎo)線全長相對(duì)閉合差:
(2)分配坐標(biāo)增量閉合差
若 K不大于1/2000 ,則將fx、fy以相反符號(hào),按邊長成正比分配到各坐標(biāo)增量上去。并計(jì)算改正后的坐標(biāo)增量。
2.3坐標(biāo)計(jì)算
根據(jù)起始點(diǎn)的已知坐標(biāo)和經(jīng)改正的新的坐標(biāo)增量,來依次計(jì)算各導(dǎo)線點(diǎn)的坐標(biāo)。兩相鄰導(dǎo)線點(diǎn)i,j,已知點(diǎn)的坐標(biāo)及i點(diǎn)至j點(diǎn)的坐標(biāo)增量,用下式推算j點(diǎn)的坐標(biāo):
閉合導(dǎo)線從已知點(diǎn)開始進(jìn)行推算回已知點(diǎn)應(yīng)當(dāng)與原來的已知數(shù)據(jù)值相同,作為推算正確性的檢核。
3基于Excel實(shí)現(xiàn)測(cè)量平差程序
3.1 Microsoft Excel的基本功能
Microsoft Excel中有大量的數(shù)學(xué)公式和數(shù)學(xué)函數(shù)可以選擇使用,利用Microsoft Excel可以執(zhí)行許多數(shù)學(xué)計(jì)算,并且在分析信息和管理電子表格中的數(shù)據(jù)信息列表中,可以實(shí)現(xiàn)許多便利的功能。
3.2 公式及函數(shù)
3.3 Excel與VBA
Excel 之所以能在工程測(cè)量上發(fā)揮其獨(dú)到的作用,關(guān)鍵在于其有強(qiáng)大的函數(shù)功能。Excel 內(nèi)置的函數(shù)約 9大類 333 種,還能利用宏自定義函數(shù)。準(zhǔn)確使用Excel內(nèi)置的函數(shù),可以輕松解決各種常見計(jì)算問題。
(1) SUB過程
Sub函數(shù)是以Sub…End Sub語句封閉起來的程序塊。每當(dāng)該函數(shù)被調(diào)用時(shí),就會(huì)將存放在函數(shù)塊內(nèi)的語句執(zhí)行一次。執(zhí)行中若碰到End Sub 、Exit Sub或Return便離開函數(shù),回到調(diào)用此函數(shù)的下一個(gè)語句繼續(xù)望下執(zhí)行。編寫程序時(shí),在模塊、對(duì)象類模塊和結(jié)構(gòu)中定義Sub函數(shù)。模塊內(nèi)的Sub函數(shù)都默認(rèn)為Public,表示可以從應(yīng)用程序任何位置調(diào)用此Sub函數(shù)。除了Main函數(shù)外,其他函數(shù)是在被調(diào)用才執(zhí)行。
Sub函數(shù)定義的語法如下:
[Private∣Public]Sub函數(shù)名稱([參數(shù)類表])
[程序塊]
[Exit Sub]
End Sub
Sub函數(shù)是以Public Sub或Private Sub開頭,最后以End Sub結(jié)束。當(dāng)執(zhí)行到End Sub后即返回緊接再原調(diào)用處的下一個(gè)語句繼續(xù)往下執(zhí)行。若中途要離開函數(shù),可使用Exit Sub語句。
調(diào)用Sub函數(shù)的語法有下列兩種方式:
語法1:Call函數(shù)名稱([參數(shù)列表])
語法2:函數(shù)名稱([參數(shù)列表])
調(diào)用程序與被調(diào)用程序之間若無數(shù)據(jù)傳遞,參數(shù)列表可省略(即不傳任何參數(shù));若不省略,參數(shù)列表的數(shù)目可以是一個(gè)或一個(gè)以上的參數(shù)。
(2) Function過程
Sub函數(shù)和Function函數(shù)兩者都可以做參數(shù)傳遞,但兩者使用上的主要差異是Sub函數(shù)沒有返回值,F(xiàn)unction函數(shù)則有返回值。有關(guān)Function函數(shù)的語法如下:
[Public∣Private] Function函數(shù)名稱([參數(shù)列表]) [As數(shù)據(jù)類型]
[語句塊]
函數(shù)名=表達(dá)式
[Exit Function]
或(Return表達(dá)式)
End Function
測(cè)試函數(shù)
IsNumeric(x) 是否為數(shù)字, 返回Boolean結(jié)果,True or False
IsDate(x) 是否是日期, 返回Boolean結(jié)果,True or False
IsEmpty(x) 是否為Empty, 返回Boolean結(jié)果,True or False
IsArray(x) 指出變量是否為一個(gè)數(shù)組。
IsError(expression) 指出表達(dá)式是否為一個(gè)錯(cuò)誤值
IsNull(expression) 指出表達(dá)式是否不包含任何有效數(shù)據(jù) (Null)。
IsObject(identifier) 指出標(biāo)識(shí)符是否表示對(duì)象變量
4基于Excel的閉合導(dǎo)線測(cè)量平差
4.1表格創(chuàng)建與數(shù)據(jù)錄入
4.2 VBA程序設(shè)計(jì)
打開VBAProject的sheet1代碼窗口錄入代碼,并添加窗口,界面及運(yùn)算結(jié)果如下圖所示:
點(diǎn)擊計(jì)算后,顯示計(jì)算結(jié)果如下:
5結(jié)論
Excel 功能強(qiáng)大,易學(xué)易操作,如果將相關(guān)程序編在一個(gè)文件下不同的工作簿中,并用適當(dāng)語句將計(jì)算結(jié)果傳至其它工作簿,就會(huì)形成數(shù)據(jù)共享,大大提高計(jì)算速度,而且對(duì)老版本下所編程序,新版本對(duì)其有自動(dòng)升級(jí)功能。總之只要Excel 軟件有一定了解,同時(shí)參考本例的基本思路,結(jié)合各自單位儀器、《規(guī)范》 及具體作業(yè)習(xí)慣,量體裁衣,大家一定能在較短的時(shí)間內(nèi)編出適合自己具體情況的專用程序。
參考文獻(xiàn):
[1]李孟山、張文彥編.工程測(cè)量概論.西安地圖出版社.2004.
[2]美John Walkenback著.Excel 2003 高級(jí)VBA編程寶典.電子工業(yè)出版社.
[3]孔祥元.國家標(biāo)準(zhǔn)新版GB50026-2007工程測(cè)量規(guī)范.武漢大學(xué)出版社.
(作者單位:同濟(jì)大學(xué))