




已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
沉降監(jiān)測(cè)網(wǎng)擬穩(wěn)平差及程序設(shè)計(jì)畢業(yè)論文目錄ABSTRACT31沉降監(jiān)測(cè)網(wǎng)概述61.1 沉降監(jiān)測(cè)網(wǎng)的形成62地下開采引起的地表移動(dòng)和破壞62.1地表移動(dòng)的形式62.2地表移動(dòng)盆地73沉降監(jiān)測(cè)網(wǎng)的數(shù)據(jù)來(lái)源73.1開采沉陷的觀測(cè)工作73.2本次實(shí)測(cè)數(shù)據(jù)說(shuō)明84擬穩(wěn)平差程序概述94.1擬穩(wěn)平差的基本原理94.2擬穩(wěn)平差程序編譯的相關(guān)函數(shù)104.3函數(shù)功能說(shuō)明及其源代碼114.4原始數(shù)據(jù)文件格式設(shè)計(jì)304.5擬穩(wěn)點(diǎn)信息的讀取與存儲(chǔ)314.6擬穩(wěn)點(diǎn)的判定與選取314.6.1擬穩(wěn)點(diǎn)的判定方法314.6.2擬穩(wěn)點(diǎn)的選擇原則325.擬穩(wěn)平差程序的運(yùn)行335.1原始數(shù)據(jù)的處理335.2程序運(yùn)行的步驟345.3程序運(yùn)行結(jié)果顯示35緒論中國(guó)的經(jīng)濟(jì)發(fā)展隨著改革開放而騰飛,而經(jīng)濟(jì)的發(fā)展離不開對(duì)各種能源的需求。中國(guó)經(jīng)濟(jì)從2003年起進(jìn)入了重化工階段,對(duì)能源的需求快速增長(zhǎng),尤其是對(duì)煤礦的需求大大增加。因此從2003年起到2013年這十年,是煤炭行業(yè)黃金的十年。煤礦企業(yè)挖走了大部分的煤,但是造成了開采沉陷留下了大量的采空區(qū)。這些采空區(qū)對(duì)國(guó)民經(jīng)濟(jì)的發(fā)展有著不可小覷的阻礙。其中尤其對(duì)國(guó)家的基礎(chǔ)設(shè)施影響極大,例如:在交通中的影響,鐵路和國(guó)家高速公路不得穿過(guò)采空區(qū)上方。為了監(jiān)測(cè)采空區(qū)和采區(qū)對(duì)周邊建筑、環(huán)境和其它地物的影響,這時(shí)要布設(shè)沉降觀測(cè)網(wǎng),用以監(jiān)測(cè)和評(píng)價(jià)采區(qū)和采空區(qū)對(duì)環(huán)境的影響。本文正是基于這一理論的基礎(chǔ)上,研究擬穩(wěn)平差在沉降觀測(cè)網(wǎng)中的應(yīng)用以及程序設(shè)計(jì)。 1沉降監(jiān)測(cè)網(wǎng)概述1.1 沉降監(jiān)測(cè)網(wǎng)的形成有用礦物被采出以后,開采區(qū)域周圍的巖體的原始應(yīng)力平衡狀態(tài)受到破壞,應(yīng)力重新分布,到達(dá)新的平衡。在此過(guò)程中,使巖層和地表產(chǎn)生連續(xù)的移動(dòng)、變形和非連續(xù)的破壞(開裂、冒落等),這種現(xiàn)象稱為“開采沉陷”。巖體本身是一種非常復(fù)雜的介質(zhì)。它不僅是由各種不同性質(zhì)的巖層組成,而且還由于各種地質(zhì)作用(如褶皺、斷層、開裂、火成巖、侵入,陷落柱等)而產(chǎn)生了大量的不連續(xù)面。巖體在受到各種不同開采方法影響時(shí),產(chǎn)生的開采沉陷是一個(gè)在時(shí)間上和空間上都是非常復(fù)雜的過(guò)程。在時(shí)間上來(lái)說(shuō),在移動(dòng)的過(guò)程中,開采沉陷的形式和大小在不同的時(shí)間上是不同的,也就是說(shuō),此時(shí)的開采沉陷是“動(dòng)態(tài)的”;隨著時(shí)間的推移,開采沉陷的形式和大小逐漸趨向于穩(wěn)定,開采沉陷變成“靜態(tài)的”或“最終的”。從空間上來(lái)說(shuō),若地下開采的范圍較小、開采的礦物的埋藏深度較小,則開采沉陷波及的范圍往往只局限于開采區(qū)域的周圍的巖體;若開采范圍較大、開采礦物的埋藏深度較大,則開采沉陷波及的范圍就會(huì)從巖體發(fā)展到地表,引起“地表移動(dòng)”。沉降監(jiān)測(cè)網(wǎng)是為了監(jiān)測(cè)“地表移動(dòng)”的表面上指定位置的點(diǎn)的沉降變化而建立的一種水準(zhǔn)網(wǎng)。通過(guò)實(shí)地多次觀測(cè)這些指定位置的點(diǎn)的高程和平面坐標(biāo),確定這些點(diǎn)的空間位置坐標(biāo),進(jìn)行數(shù)據(jù)統(tǒng)計(jì)分析,觀察這些點(diǎn)的沉降情況、沉降速度、沉降變化等,判斷并預(yù)測(cè)這些點(diǎn)位在空間中的變化趨勢(shì)。2地下開采引起的地表移動(dòng)和破壞2.1地表移動(dòng)的形式所謂地表移動(dòng),是指在采空區(qū)面積擴(kuò)大到一定范圍后,巖層移動(dòng)發(fā)展到地表,是地表產(chǎn)生移動(dòng)和變形,在地表沉陷的研究中稱這一過(guò)程和現(xiàn)象為地表移動(dòng)。開采引起的地表移動(dòng)過(guò)程,受多種地質(zhì)采礦因素的影響,因此,隨開采深度、開采厚度、采煤方法及煤層產(chǎn)狀等因素的不同,地表移動(dòng)和破壞的形式也不完全相同。在采深和采厚的比值比較大時(shí),地表的移動(dòng)和變形在空間和時(shí)間上是連續(xù)的、漸變的,具有明顯的規(guī)律性。當(dāng)采深和采厚的比值較?。ㄒ话阈∮?0)或具有較大的地質(zhì)構(gòu)造時(shí),地表的移動(dòng)和變形在空間和時(shí)間上將是不連續(xù)的,移動(dòng)和變形的分布沒(méi)有嚴(yán)格的規(guī)律性,地表可能出現(xiàn)較大的裂縫或坍塌坑。地表移動(dòng)和破壞的形式,歸納起來(lái)有:地表移動(dòng)盆地、裂縫及臺(tái)階、坍塌坑。本程序是針對(duì)地表移動(dòng)盆地而言。2.2地表移動(dòng)盆地在開采影響波及到地表以后,受采動(dòng)影響的地表從原有標(biāo)高向下沉降,從而在采空區(qū)上方地表形成一個(gè)比采空區(qū)面積還大的沉陷區(qū)域。這種地表沉陷區(qū)稱為地表移動(dòng)盆地,或稱下沉盆地。在地表移動(dòng)盆地形成的過(guò)程中,改變了地表原有的形態(tài),引起了高低、坡度及水平位置的變化。地表移動(dòng)盆地的形成:地表移動(dòng)盆地是在工作面的推進(jìn)過(guò)程中逐漸形成的。一般是當(dāng)回采工作面自開切眼開始向前推進(jìn)的距離相當(dāng)于1/41/2H0(H0 為平均采深)時(shí),開采影響即波及到地表,引起地表下沉。然后,隨著工作面繼續(xù)向前推進(jìn),地表的影響范圍不斷擴(kuò)大,下沉值不斷增加,在地表就形成一個(gè)比開采范圍大得多的下沉盆地。 3沉降監(jiān)測(cè)網(wǎng)的數(shù)據(jù)來(lái)源3.1開采沉陷的觀測(cè)工作要保護(hù)井巷、建筑物、水體及鐵路等。是它們免受或減少開采的有害影響,減少地下資源的損失,必須研究地下開采引起的巖層與地表移動(dòng)規(guī)律。巖層與地表移動(dòng)的過(guò)程十分復(fù)雜,它是許多地質(zhì)采礦因素綜合影響的結(jié)果。認(rèn)識(shí)巖層與地表移動(dòng)這一復(fù)雜過(guò)程,目前的主要方法是實(shí)地觀測(cè)。通過(guò)觀測(cè)獲得大量的第一性資料,然后對(duì)這些資料進(jìn)行綜合分析,找出各種因素對(duì)移動(dòng)過(guò)程的影響規(guī)律。為了進(jìn)行實(shí)地觀測(cè),必須在開采進(jìn)行以前,在選定的地點(diǎn)設(shè)置開采沉陷觀測(cè)站。簡(jiǎn)稱觀測(cè)站。所謂觀測(cè)站,是指在開采影響范圍內(nèi)的地表、巖層內(nèi)部或其它研究對(duì)象上,按一定要求設(shè)置的一系列互相聯(lián)系的觀測(cè)點(diǎn)。在采動(dòng)過(guò)程中,根據(jù)需要定期觀測(cè)這些測(cè)點(diǎn)的空間位置及其相對(duì)位置的變化,以確定各測(cè)點(diǎn)的位移和點(diǎn)間的相對(duì)移動(dòng),從而掌握開采沉陷的規(guī)律。開采沉陷觀測(cè)站的類型有以下幾種:1 .按觀測(cè)站設(shè)置的地點(diǎn)不同可分為:(1)地表移動(dòng)觀測(cè)站:測(cè)點(diǎn)布設(shè)在地表。主要研究地表移動(dòng)和變形的規(guī)律;(2)巖層內(nèi)部觀測(cè)站:測(cè)點(diǎn)一般布設(shè)在井下巷道或巖層內(nèi)部的鉆孔中,用于研究巖層內(nèi)部的移動(dòng)和變形規(guī)律;(3)專門觀測(cè)站:為了某一個(gè)特定的目的所設(shè)立的觀測(cè)站,如建筑物觀測(cè)站、鐵路觀測(cè)站、邊坡移動(dòng)觀測(cè)站等。2. 普通觀測(cè)站和短期觀測(cè)站普通觀測(cè)站的觀測(cè)時(shí)間較長(zhǎng)(一般在一年以上),它是在地表移動(dòng)的開始到移動(dòng)結(jié)束的整個(gè)過(guò)程中定期進(jìn)行觀測(cè),主要用于研究地表移動(dòng)和變形的規(guī)律。短期觀測(cè)站觀測(cè)時(shí)間較短(幾個(gè)月到一年),只在移動(dòng)過(guò)程中的某個(gè)階段進(jìn)行觀測(cè),而對(duì)觀測(cè)資料的處理,求出一些近似的移動(dòng)參數(shù),如最大下沉速度、走向移動(dòng)角等。短期觀測(cè)站只是在急需開采沉陷資料的情況下才采用。3. 按步站形式的不同分為:(1)網(wǎng)狀觀測(cè)站:在產(chǎn)狀復(fù)雜的煤層或在建筑物密集的地區(qū)開采時(shí),可考慮多布設(shè)一下測(cè)點(diǎn),組成網(wǎng)格狀觀測(cè)站。網(wǎng)格狀觀測(cè)站可以對(duì)整個(gè)采動(dòng)影響范圍進(jìn)行觀測(cè),所得資料比較全面、準(zhǔn)確,但測(cè)點(diǎn)數(shù)目較多,野外觀測(cè)和室內(nèi)成果整理工作量大,且受地形、地物條件的限制,所以只在研究專門問(wèn)題時(shí)采用。(2)剖面線狀觀測(cè)站:是指在沿移動(dòng)盆地主斷面的方向上,將觀測(cè)點(diǎn)布設(shè)成直線的觀測(cè)站。剖面線狀觀測(cè)站通常由兩條互相垂直且相交的觀測(cè)線所組成。沿走向主斷面布設(shè)的觀測(cè)線稱為走向觀測(cè)線,沿傾斜主斷面布設(shè)的觀測(cè)線稱為傾斜觀測(cè)線。圖3-1觀測(cè)站的布置形式示意圖3.2本次實(shí)測(cè)數(shù)據(jù)說(shuō)明本程序處理的原始數(shù)據(jù)包括各個(gè)點(diǎn)的平面坐標(biāo)和各個(gè)點(diǎn)之間的觀測(cè)高差,其中點(diǎn)位的平面坐標(biāo)用于計(jì)算水準(zhǔn)路線的長(zhǎng)度,用以定權(quán),原始數(shù)據(jù)以excel表格形式如下圖(3-2)和(3-3)所示圖3-2 點(diǎn)位的平面坐標(biāo)圖3-3 各點(diǎn)的觀測(cè)高差4擬穩(wěn)平差程序概述4.1擬穩(wěn)平差的基本原理自由網(wǎng)擬穩(wěn)平差公式設(shè)誤差方程式為(式4-1)式中:為n維自由項(xiàng)向量;V是n維殘差向量;A為系數(shù)矩陣;X是t維參數(shù)向量,這里X是高程點(diǎn)近似值的平差改正數(shù)。由上式(4-1)組成法方程式;(式4-2)式中,P為觀測(cè)值的權(quán)矩陣,對(duì)稱正定。水準(zhǔn)網(wǎng)平差中至少有一個(gè)已知高程點(diǎn)。假如網(wǎng)中沒(méi)有已知高程點(diǎn),誤差方程式的系數(shù)陣A的秩就會(huì)小于t,法方程的系數(shù)陣也會(huì)降秩。擬穩(wěn)平差將全部高程點(diǎn)分為擬穩(wěn)點(diǎn)和非擬穩(wěn)點(diǎn)兩部分,僅在擬穩(wěn)點(diǎn)參數(shù)的平方和最小的約束下求法方程式的解。設(shè)水準(zhǔn)網(wǎng)中共有t個(gè)點(diǎn),其中s個(gè)點(diǎn)為擬穩(wěn)點(diǎn),為擬穩(wěn)點(diǎn)參數(shù)解向量,約束條件為(式4-3)我們采用虛擬觀測(cè)值法求解。設(shè)G、G2都是t維向量, 其中(i=0,1,t-1)為 i號(hào)點(diǎn)位擬穩(wěn)點(diǎn)(式4-5) i號(hào)點(diǎn)為非擬穩(wěn)點(diǎn) 擬穩(wěn)平差參數(shù)解及其權(quán)逆陣的公式為(式4-6)(式4-7)單位權(quán)中誤差計(jì)算公式為(式4-8)4.2擬穩(wěn)平差程序編譯的相關(guān)函數(shù)本程序使用C語(yǔ)言作為編程語(yǔ)言,有以下函數(shù)組成:1) MyBreak信息提示函數(shù)2) ij對(duì)稱矩陣下標(biāo)計(jì)算函數(shù)3) PrintM數(shù)組輸出函數(shù)4) PrintM2對(duì)稱矩陣輸出函數(shù)5) PrintEquation線性方程組輸出函數(shù)6) inverse對(duì)稱正定矩陣求逆函數(shù)7) Calculate_BQBT權(quán)逆陣傳播函數(shù)8) Calculate_q權(quán)倒數(shù)計(jì)算函數(shù)9) 構(gòu)造函數(shù)10) 析構(gòu)函數(shù)11) GetStationNumber點(diǎn)名獲取函數(shù)12) Inputdata原始數(shù)據(jù)輸入函數(shù)13) Printdata原始數(shù)據(jù)寫至結(jié)果文件函數(shù)14) ca_H0高程近似值計(jì)算函數(shù)15) ca_ATPA組成法方程函數(shù)16) ca_dX高程平差值計(jì)算函數(shù)17) ca_V殘差計(jì)算函數(shù)18) PrintResult平差值輸出函數(shù)19) Quasi_Stable擬穩(wěn)平差計(jì)算函數(shù)20) main主函數(shù)上述函數(shù)全部為在C語(yǔ)言中自定義的函數(shù)。4.3函數(shù)功能說(shuō)明及其源代碼1.MyBreak信息提示函數(shù):應(yīng)用程序都需要通過(guò)計(jì)算機(jī)界面動(dòng)態(tài)地顯示一些提示性信息,例如,正定矩陣求逆計(jì)算遇到被求逆的矩陣是非正定矩陣,程序就無(wú)法繼續(xù)運(yùn)行,應(yīng)該通過(guò)用戶界面顯示“矩陣求逆失敗”的提示信息,然后終止程序運(yùn)行。函數(shù)源代碼如下:void MyBreak(char* fmt, .)char buffer256;va_list argptr;va_start(argptr, fmt);vsprintf(buffer, fmt, argptr);va_end(argptr);#ifdef VC_EXTRALEANAfxMessageBox(buffer);#elseprintf(buffer);getchar();#endif / VC_EXTRALEAN2.ij對(duì)稱矩陣下標(biāo)計(jì)算函數(shù)平差程序經(jīng)常會(huì)處理對(duì)稱矩陣,例如觀測(cè)值的權(quán)矩陣、權(quán)逆陣、法方程系數(shù)陣等都是對(duì)稱矩陣,為了節(jié)省存儲(chǔ)空間和避免重復(fù)計(jì)算,采用僅存下三角矩陣(含主對(duì)角線元素)的存儲(chǔ)方案存儲(chǔ)對(duì)稱矩陣,亦即將對(duì)稱矩陣的下三角元素按順序存到數(shù)組中。對(duì)稱矩陣的下標(biāo)計(jì)算,就是當(dāng)對(duì)稱矩陣僅存下三角矩陣時(shí)根據(jù)矩陣元素的行號(hào)和列號(hào)確定相應(yīng)矩陣元素在數(shù)組中的存儲(chǔ)位置。函數(shù)源代碼如下:int ij(int i,int j)return (i=j)? i*(i+1)/2+j :j*(j+1)/2+i;3.PrintM數(shù)組輸出函數(shù)設(shè)有雙精度型數(shù)組A,數(shù)組長(zhǎng)度為size,函數(shù)PrintM將數(shù)組A的元素寫入指定文件,函數(shù)原型如下:void PrintM(FILE *fp,double A,int size, int t,char* fmt,char* title,bool IsLabel)fp文件指針A待輸出的double(雙精度)型數(shù)組Size數(shù)組的長(zhǎng)度,即輸出元素的總個(gè)數(shù)t每行元素的個(gè)數(shù),即每t個(gè)數(shù)據(jù)進(jìn)行一次換行fmt輸出格式title標(biāo)題字符串地址,默認(rèn)值為空IsLabel當(dāng)值為邏輯真時(shí)每行添加行號(hào),為假時(shí)不加行號(hào),默認(rèn)值為真函數(shù)源代碼如下:void PrintM(FILE *fp,double A,int size, int t,char* fmt,char* title,bool IsLabel)if(title)fprintf(fp,n %s: ,title);int j=0;for(int i=0;isize;i+)if(i%t=0)j+;if(IsLabel)fprintf(fp,n%3d ,j);else fprintf(fp,n );fprintf(fp,fmt,Ai);fprintf(fp,n);4. PrintM2對(duì)稱矩陣輸出函數(shù)設(shè)有階對(duì)稱矩陣,程序中僅存矩陣下三角元素,矩陣元素為雙精度型,函數(shù)PrintM2將矩陣輸出至指定文件,函數(shù)原型如下:void PrintM2(FILE* fp, double M, int n, int t,char *fmt, char* title,bool IsLabel)fp文件指針M待輸出的數(shù)組n矩陣的階數(shù)t格式控制變量fmt輸出格式title標(biāo)題字符串地址,缺省值空IsLabel值為true時(shí)每行前添加行號(hào),等于false時(shí)不加行號(hào),默認(rèn)值為true。函數(shù)源代碼如下:void PrintM2(FILE* fp, double M, int n, int t,char *fmt, char* title,bool IsLabel)if(title)fprintf(fp,n %s: ,title);int index=0;for(int i=0;in;i+)if(IsLabel)fprintf(fp,n%3d ,i+1);else fprintf(fp,n );for(int j=0;j0 & j%t=0)fprintf(fp,n );fprintf(fp,fmt,Mindex+);fprintf(fp,n);5.線性方程組輸出函數(shù)設(shè)有線性方程組,A是矩陣,b是n維向量。函數(shù)將此方程組的系數(shù)矩陣和常數(shù)項(xiàng)向量輸出至指定文件,函數(shù)原型如下:void PrintEquation(FILE* fp, double A, double b,int n, int t, char *fmt, char* title)fp文件指針A方程組系數(shù)矩陣,數(shù)組長(zhǎng)度為b方程組常數(shù)項(xiàng)向量,數(shù)組長(zhǎng)度為n;n方程的個(gè)數(shù)t方程未知數(shù)個(gè)數(shù)fmt輸出格式title標(biāo)題字符串地址,默認(rèn)值為空字符串函數(shù)源代碼如下:void PrintEquation(FILE* fp, double A, double b,int n, int t, char *fmt, char* title)if(title)fprintf(fp,n %s: ,title);for(int i=0;in;i+)fprintf(fp,n%3d ,i+1);for(int j=0;jt;j+)fprintf(fp,fmt,Ai*t+j);fprintf(fp,fmt,bi);6.inverse對(duì)稱正定矩陣求逆函數(shù)從誤差方程到權(quán)矩陣,到最后的求其平差值和改正數(shù),都離不開矩陣的求逆運(yùn)算,函數(shù)原型:bool inverse(double a,int n)a函數(shù)調(diào)用前為待求逆矩陣的元素;n矩陣的階數(shù);函數(shù)返回值若計(jì)算成功返回true;若計(jì)算失敗返回false。函數(shù)源代碼如下:bool inverse(double a,int n) double *a0=new doublen; for(int k=0;kn;k+) double a00=a0;if(a00+1.0=1.0)delete a0; return false;for(int i=1;in;i+)double ai0 = ai*(i+1)/2;if(i=n-k-1)a0i= -ai0/a00;else a0i= ai0/a00;for(int j=1;j=i;j+)a(i-1)*i/2+j-1=ai*(i+1)/2+j+ai0*a0j; for(i=1;in;i+)a(n-1)*n/2+i-1=a0i;an*(n+1)/2-1=1.0/a00; delete a0;return true;7. Calculate_BQBT權(quán)逆陣傳播函數(shù)此函數(shù)的功能是類似協(xié)方差的傳播定律,用于計(jì)算矩陣乘積計(jì)算,如,計(jì)算公式(4.3-1)則N的第i行第j列元素的計(jì)算公式為(4.3-2)函數(shù)原型如下;void Calculate_BQBT(double B,double Q,int r,int n,double N);B(4.3-1)中的矩陣,數(shù)組長(zhǎng)度為;Q(4.3-1)中的矩陣,數(shù)組長(zhǎng)度為;N(4.3-1)中的矩陣,數(shù)組長(zhǎng)度為;rB矩陣的行數(shù);nB矩陣的列數(shù)。函數(shù)源代碼如下:void Calculate_BQBT(double B,double Q,int r,int n,double N)for(int i=0;ir;i+)for(int j=0;j=i;j+)double nij=0.0;for(int k=0;kn;k+)for(int s=0;sn;s+)nij+=Bi*n+k*Qij(k,s)*Bj*n+s;Nij(i,j)+=nij;8. Calculate_q權(quán)倒數(shù)計(jì)算函數(shù)計(jì)算說(shuō)明:設(shè)X是t維隨見向量,其權(quán)逆陣為階對(duì)稱矩陣Q,z是X的函數(shù):(4.3-3)其中F為系數(shù)向量,則z的權(quán)倒數(shù)為(4.3-4)由矩陣乘法公式,得(4.3-5)式中:是矩陣Q的第k行第s列元素。函數(shù)原型:double Calculate_q(double Q,double F,int Fin,int n)Q權(quán)逆陣數(shù)組,僅存下三角矩陣,數(shù)組長(zhǎng)度等于;F系數(shù)數(shù)組,數(shù)組長(zhǎng)度為t;t權(quán)逆陣的階數(shù);返回值返回式(4.3-5)計(jì)算的結(jié)果。函數(shù)源代碼如下:double Calculate_q(double Q,double F,int Fin,int n)double q=0.0;for(int k=0;kn;k+)int i=Fink;for(int s=0;s0)delete StartP; delete EndP; delete L; delete P; delete V; if(m_Pnumber0)delete Height; delete ATPA; delete ATPL; delete dX; for(int i=0; im_Pnumber;i+)if(Pnamei!=NULL)delete(Pnamei);delete Pname; 10. GetStationNumber點(diǎn)名獲取函數(shù)工作流程如下:(1)將待查點(diǎn)名name與Pname數(shù)組中已經(jīng)保存的點(diǎn)名利用系統(tǒng)內(nèi)置函數(shù)strcmp逐一比較,檢查Pname中是否已經(jīng)保存有name這個(gè)點(diǎn)名,如果Pname中存在name這個(gè)點(diǎn)名,就返回到name在Pname中的下標(biāo)。(2)如果Pname中沒(méi)有name這個(gè)點(diǎn)名,則向計(jì)算機(jī)內(nèi)申請(qǐng)內(nèi)存,然后利用系統(tǒng)內(nèi)置函數(shù)strcpy將name復(fù)制到申請(qǐng)的內(nèi)存中,再將內(nèi)存地址存到Pname數(shù)組中,再將內(nèi)存地址存到Pname數(shù)組中,最后返回name在Pname中的下標(biāo).函數(shù)源代碼如下:int CLevelingAdjust: GetStationNumber(char *name) for(int i=0; im_Pnumber; i+) if(Pnamei!=NULL)/將待查點(diǎn)名與已經(jīng)存入點(diǎn)名數(shù)組的點(diǎn)名比較if(strcmp(name,Pnamei)=0)return i;else/待查點(diǎn)名是一個(gè)新的點(diǎn)名,將新點(diǎn)名的地址放到Pname數(shù)組中int len = strlen(name);Pnamei = new charlen+1;strcpy(Pnamei, name);return i;return -1; /Pname數(shù)組已經(jīng)存滿,且沒(méi)有待查點(diǎn)名 11. Inputdata原始數(shù)據(jù)輸入函數(shù)該函數(shù)有一個(gè)形參datafile,定義為string型地址變量,其內(nèi)容是數(shù)據(jù)文件名稱字符串的地址,文件名包括文件的全路徑及擴(kuò)張名,如文件在程序所在的文件目錄下的路徑為“data.txt”。為了從數(shù)據(jù)文件讀取數(shù)據(jù),函數(shù)內(nèi)首先聲明了FILE(文件指針定義的關(guān)鍵字)型變量fp,并調(diào)用fopen函數(shù)打開數(shù)據(jù)文件,將文件的指針賦給fp。接著,按照數(shù)據(jù)文件中的數(shù)據(jù)內(nèi)容的順序與格式,先讀取網(wǎng)的概況數(shù)據(jù),在讀取網(wǎng)的已知高程數(shù)據(jù),最后讀取觀測(cè)高差數(shù)據(jù)。函數(shù)院代碼如下:void CLevelingAdjust: Inputdata(char *datafile) FILE *fp; if(fp=fopen(datafile,r)=NULL) MyBreak(n 數(shù)據(jù)文件打不開!); exit(0); fscanf(fp,%d%d%d,&m_Lnumber,&m_Pnumber,&m_knPnumber); int unPnumber=m_Pnumber-m_knPnumber; Height=new double m_Pnumber; dX=new double m_Pnumber; ATPA=new double m_Pnumber*(m_Pnumber+1)/2; ATPL=new double m_Pnumber; StartP=new int m_Lnumber; EndP=new int m_Lnumber; L=new double m_Lnumber; V=new double m_Lnumber; P=new double m_Lnumber; fscanf(fp,%lf,&m_Sigma); Pname=new char* m_Pnumber; for(int i=0;im_Pnumber;i+) / GetStationNumber函數(shù)根據(jù)Pnamei是否為NULL / 確定Pnamei是否為點(diǎn)名地址 Pnamei = NULL; char buffer100; /臨時(shí)數(shù)組,保存從文件中讀到的點(diǎn)名 / 讀取已知高程數(shù)據(jù) for( i=0;i=m_knPnumber-1;i+) fscanf(fp,%s,buffer); int c=GetStationNumber(buffer); fscanf(fp,%lf,&Heightc); / 讀取觀測(cè)數(shù)據(jù) for(i=0;im_Lnumber;i+) fscanf(fp,%s,buffer); /讀取高程起點(diǎn)名 StartPi=GetStationNumber(buffer); if(StartPi0) fprintf(resultfp,n數(shù)據(jù)文件出錯(cuò):); fprintf(resultfp,n第%d個(gè)高差的起始點(diǎn)名為%s,i+1,buffer); fclose(resultfp); exit(0); fscanf(fp,%s,buffer);/讀取高程終點(diǎn) EndPi=GetStationNumber(buffer); if(EndPi0) fprintf(resultfp,n數(shù)據(jù)文件出錯(cuò):); fprintf(resultfp,n第%d個(gè)高差終點(diǎn)的點(diǎn)名為%s,i+1,buffer); fclose(resultfp); exit(0); fscanf(fp,%lf%lf,&Li,&Pi); /讀取高差值與路線長(zhǎng)度 Pi=1.0/Pi; fclose(fp);12. Printdata原始數(shù)據(jù)寫至結(jié)果文件函數(shù)此函數(shù)的功能就是將網(wǎng)的已知信息反饋到結(jié)果文件中。在結(jié)果文件中顯示網(wǎng)額信息,例如;網(wǎng)的總點(diǎn)數(shù),總觀測(cè)值,已知點(diǎn)個(gè)數(shù)。函數(shù)源代碼如下:void CLevelingAdjust: Printdata() int i; fprintf(resultfp,n 觀測(cè)值總數(shù): %d 總點(diǎn)數(shù): %d 已知點(diǎn)數(shù):%d n,m_Lnumber, m_Pnumber,m_knPnumber); fprintf(resultfp,n 驗(yàn)前單位權(quán)中誤差:%lf ,m_Sigma); fprintf(resultfp,nn 已知高程:n); for(i=0;i=m_knPnumber-1;i+) fprintf(resultfp,n%5d %8s ,i+1,Pnamei); fprintf(resultfp,%10.4lf ,Heighti); fprintf(resultfp,nn 高差觀測(cè)值:n); for(i=0;i=m_Lnumber-1;i+) fprintf(resultfp,n%5d%8s%8s,i+1,PnameStartPi,PnameEndPi); fprintf(resultfp,%12.4lf %10.3lf,Li,1.0/Pi); 13. ca_H0近似高程計(jì)算近似高程計(jì)算的思路第一步,計(jì)算位置點(diǎn)標(biāo)志。各點(diǎn)的高程值用Height數(shù)組保存,近似高程計(jì)算計(jì)算之前,先將Height數(shù)組中的未知點(diǎn)的高程值賦值為-9999.9,由于正常的高程值不可能小于-9999.9,根據(jù)高程數(shù)組中的值是否小于-9999.9可判斷某點(diǎn)是否需要計(jì)算近似高程。當(dāng)某點(diǎn)的近似高程計(jì)算出來(lái)之后,數(shù)組中-9999.9就會(huì)被實(shí)際的值所取代,直到高程數(shù)組中所有的高程值均大于-9999.9,近似高程計(jì)算就此結(jié)束。第二步,計(jì)算高程。近似高程計(jì)算的基本思路是,遍歷觀測(cè)值,找到每一個(gè)觀測(cè)值起始點(diǎn)號(hào)、終點(diǎn)號(hào),再根據(jù)點(diǎn)號(hào)從Height數(shù)組中獲得每一段高程起始點(diǎn)的高程值和終點(diǎn)的高程值,當(dāng)高差的一端是高程已知點(diǎn)、另一端是高程已知點(diǎn)時(shí),就由已知點(diǎn)高程和觀測(cè)高差傳算出未知點(diǎn)的高程值,并將計(jì)算結(jié)果賦給高程數(shù)組,如果差兩端同為已知點(diǎn)或者同為未知點(diǎn),就跳到下一次循環(huán),繼續(xù)查找下一個(gè)觀測(cè)值。函數(shù)源代碼如下:void CLevelingAdjust: ca_H0() for(int i=m_knPnumber;im_Pnumber;i+)Heighti=-9999.9; int jj=0; /計(jì)算出近似高程的點(diǎn)數(shù) for(int ii=1;ii+) for(i=0;i-9999.0 & Heightk2-9999.0) Heightk2=Heightk1+Li; jj+; else if(Heightk1-9999.0) Heightk1=Heightk2-Li; jj+; if(jj=(m_Pnumber-m_knPnumber)break; if(ii(m_Pnumber-m_knPnumber) fprintf(resultfp,nn下列點(diǎn)無(wú)法計(jì)算出概略高程:n); for(i=0;im_Pnumber;i+) if(Heighti-9999.0) printf(n%s,Pnamei); MyBreak(近似高程計(jì)算失??!); fclose(resultfp); exit(0); 14. ca_ATPA組成法方程函數(shù)該函數(shù)的作用是組成法方程和,計(jì)算流程如下:1) 獲得高差的起點(diǎn)號(hào)i和終點(diǎn)號(hào)j2) 獲得起點(diǎn)和終點(diǎn)的高程值;3) 計(jì)算誤差方程的自由項(xiàng);4) 將累加到法方程系數(shù)陣和法方程自由項(xiàng)的相應(yīng)單元中。已經(jīng)在InputData函數(shù)中根據(jù)路線長(zhǎng)度計(jì)算出來(lái),保存在權(quán)數(shù)組P中。函數(shù)源代碼如下:void CLevelingAdjust: ca_ATPA() int t=m_Pnumber; for(int i=0; it*(t+1)/2; i+) ATPAi=0.0; for(i=0; it; i+) ATPLi=0.0;for(int k=0; km_Lnumber; k+) int i=StartPk;int j=EndPk; double Pk=Pk; double Lk=Lk-(Heightj-Heighti); ATPLi-=Pk*Lk; ATPLj+=Pk*Lk;ATPAij(i,i)+=Pk; ATPAij(j,j)+=Pk; ATPAij(i,j)-=Pk; 15. ca_dX高程平差值計(jì)算函數(shù)該函數(shù)首先調(diào)用對(duì)稱正定矩陣求逆函數(shù)inverse,計(jì)算法方程系數(shù)矩陣的逆陣,然后以總點(diǎn)數(shù)為循環(huán)界逐點(diǎn)計(jì)算各點(diǎn)高程的改正數(shù),將高程改正數(shù)保存dX數(shù)組中,同時(shí)將高程改正數(shù)累加到數(shù)組Height的對(duì)應(yīng)單元中。這樣,Height數(shù)組就從高程近似值變成了高程平差值。函數(shù)源代碼如下:void CLevelingAdjust: ca_dX() if(!inverse(ATPA,m_Pnumber) MyBreak(n法方程系數(shù)矩陣降秩!); fclose(resultfp); exit(0); for(int i=0; im_Pnumber; i+) double xi=0.0; for(int j=0; jm_Pnumber; j+) xi+=ATPAij(i,j)*ATPLj; dXi=xi; Heighti+=xi; 16. ca_V殘差計(jì)算函數(shù)殘差也叫觀測(cè)值的平差改正數(shù),在參數(shù)平差中觀測(cè)值的平差值都可以直接用參數(shù)平差值計(jì)算出來(lái),所以計(jì)算殘差的目的不是用來(lái)改正觀測(cè)值,而主要是用殘差來(lái)進(jìn)行精度估計(jì)。殘差計(jì)算由函數(shù)ca_V完成,計(jì)算結(jié)果存在數(shù)組V中,該函數(shù)的返回值是pvv。以觀測(cè)值序號(hào)k為循環(huán)變量,按觀測(cè)值循環(huán),按下式計(jì)算各觀測(cè)值的殘差,(k=0,1,2,n-1)式中k為觀測(cè)值編號(hào);是觀測(cè)高差;是觀測(cè)值的平差改正數(shù),是稱為殘差;表示高差兩端點(diǎn)的編號(hào)(即點(diǎn)號(hào));分別表示觀測(cè)高差起點(diǎn)和終點(diǎn)的高程平差值,即平差中未知數(shù)。第k次循環(huán)中所要進(jìn)行的工作包括:1) 獲得高差的起點(diǎn)號(hào)i和終點(diǎn)j;2) 獲得起點(diǎn)和終點(diǎn)的高程值(已經(jīng)是平差值);3) 計(jì)算殘差,存在Vk中;4) 將累加到pvv中。結(jié)束循環(huán)之后,得到pvv,返回pvv.函數(shù)的源代碼如下:double CLevelingAdjust: ca_V()double pvv=0.0;for(int i=0;i=m_Lnumber-1;i+) int k1=StartPi; int k2=EndPi; Vi=Heightk2-Heightk1-Li; pvv+=Vi*Vi*Pi;return(pvv);17. PrintResult精度估計(jì)與平差結(jié)果輸出該函數(shù)將平差結(jié)果以txt的文件格式寫至結(jié)果文件。輸出的內(nèi)容包括高程點(diǎn)名、高程平差值及其中誤差,高差端點(diǎn)點(diǎn)名、高差平差值、高差改正數(shù)、高差平差值的中誤差。 函數(shù)的源代碼如下:void CLevelingAdjust: PrintResult()fprintf(resultfp,nn = 高程平差值及其精度 =n);fprintf(resultfp,n 點(diǎn)名 近似高程 改正數(shù) 高程平差值 中誤差n);for(int i=0; im_Pnumber; i+)fprintf(resultfp,n %5s ,Pnamei); double dx=dXi; double qii=ATPAij(i,i); fprintf(resultfp,%12.4lf%9.4lf%12.4lf%9.4lf, Heighti-dx,dx,Heighti,sqrt(qii)*m_mu);fprintf(resultfp,nnn = 觀測(cè)值平差值及其精度 =n);fprintf(resultfp,n No. 起 點(diǎn) 終 點(diǎn) 觀測(cè)高差 );fprintf(resultfp, 高差平差值 觀測(cè)權(quán) 中誤差n);for(i=0;im_Pnumber | m_StablePnumber1)MyBreak(擬穩(wěn)點(diǎn)數(shù)錯(cuò)誤!);fclose(resultfp);exit(0);IsStable=new intm_Pnumber;for(int i=0;i=m_Pnumber-1;i+) IsStablei=false;fprintf(resultfp,n%sn,n 擬穩(wěn)點(diǎn):);for( i=0;i=m_StablePnumber-1;i+)char name100;fscanf(fp,%s,n
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 17040:2005 AR Conformity assessment - General requirements for peer assessment of conformity assessment bodies and accreditation bodies
- 2025至2030中國(guó)皮卡通行證行業(yè)深度研究及發(fā)展前景投資評(píng)估分析
- 2025至2030中國(guó)男性不育行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)電視媒體行業(yè)發(fā)展研究與產(chǎn)業(yè)戰(zhàn)略規(guī)劃分析評(píng)估報(bào)告
- 2025至2030中國(guó)電動(dòng)調(diào)節(jié)儀表行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)生豬養(yǎng)殖行業(yè)市場(chǎng)發(fā)展分析及投資發(fā)展戰(zhàn)略前景預(yù)測(cè)報(bào)告
- 2025至2030中國(guó)牲豬飼料行業(yè)發(fā)展研究與產(chǎn)業(yè)戰(zhàn)略規(guī)劃分析評(píng)估報(bào)告
- 工廠秋季消防培訓(xùn)
- 世界環(huán)保日培訓(xùn)課件
- 從國(guó)家層面探討兒童的心理健康教育與疏導(dǎo)機(jī)制
- 急性胃腸炎的診斷與治療
- UL4703標(biāo)準(zhǔn)中文版-2020光伏線UL中文版標(biāo)準(zhǔn)
- 酒店前臺(tái)案例分析
- 消防應(yīng)急通信培訓(xùn)
- 消防應(yīng)急通信保障
- XX小學(xué)預(yù)防未成年人違法犯罪工作制度
- 火災(zāi)自動(dòng)報(bào)警系統(tǒng)查驗(yàn)報(bào)告
- 業(yè)務(wù)傭金提成協(xié)議書模板
- GB/T 29469-2024潔凈室及相關(guān)受控環(huán)境性能及合理性評(píng)價(jià)
- 國(guó)家開放大學(xué)《城市管理學(xué)》作業(yè)-“城市病”表現(xiàn)及其治理
- 甄嬛傳電子版劇本第01-10集
評(píng)論
0/150
提交評(píng)論