誤差理論與測(cè)量平差課程設(shè)計(jì)報(bào)告_第1頁
誤差理論與測(cè)量平差課程設(shè)計(jì)報(bào)告_第2頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.n目錄一、目錄 -1二、序言 - 2三、設(shè)計(jì)思路 - 3四、程序流程圖 - 4五、程序及說明 - 5六、計(jì)算結(jié)果 -12七、總結(jié) - 15第二部分 序言1、 課程設(shè)計(jì)的性質(zhì)、目的和任務(wù)誤差理論與測(cè)量平差是一門理論與實(shí)踐并重的課程,其課程設(shè)計(jì)是測(cè)量數(shù)據(jù)處理理論學(xué)習(xí)的一個(gè)重要的實(shí)踐環(huán)節(jié),它是在我們學(xué)習(xí)了專業(yè)基礎(chǔ)課“誤差理論與測(cè)量平差基礎(chǔ)”課程后進(jìn)行的一門實(shí)踐課程。其目的是增強(qiáng)我們對(duì)誤差理論與測(cè)量平差基礎(chǔ)理論的理解,牢固掌握測(cè)量平差的基本原理和基本公式,熟悉測(cè)量數(shù)據(jù)處理的基本技能和計(jì)算方法,靈活準(zhǔn)確地應(yīng)用于解決各類數(shù)據(jù)處理的實(shí)際問題,并能用所學(xué)的計(jì)算機(jī)理論知識(shí),編制簡(jiǎn)單的計(jì)算程序。2、誤差理論與測(cè)

2、量平差課程和其它課程的聯(lián)系和分工這次課程設(shè)計(jì)中所用的數(shù)學(xué)模型和計(jì)算方法是我們?cè)谡`差理論與測(cè)量平差課程中所學(xué)的內(nèi)容,所使用的C程序語言使我們?cè)谟?jì)算機(jī)基礎(chǔ)課程中所學(xué)知識(shí)。誤差理論與測(cè)量平差課程設(shè)計(jì)是測(cè)量平差和計(jì)算機(jī)程序設(shè)計(jì)等課程的綜合實(shí)踐與應(yīng)用,同時(shí)也為我們今后步入工作崗位打下了一定基礎(chǔ)。3、 課程設(shè)計(jì)重點(diǎn)及內(nèi)容本次課程設(shè)計(jì)重點(diǎn)是培養(yǎng)我們正確應(yīng)用公式、綜合分析和解決問題的能力,以及計(jì)算機(jī)編程能力。另外它要求我們完成12個(gè)綜合性的結(jié)合生產(chǎn)實(shí)踐的題目。如目前生產(chǎn)實(shí)踐中經(jīng)常用到的水準(zhǔn)網(wǎng)嚴(yán)密平差及精度評(píng)定,邊角網(wǎng)(導(dǎo)線)嚴(yán)密平差及精度評(píng)定等。此次我所選的課程設(shè)計(jì)課題是水準(zhǔn)網(wǎng)嚴(yán)密平差及精度評(píng)定,其具體內(nèi)容如

3、下:根據(jù)題目要求,正確應(yīng)用平差模型列出觀測(cè)值條件方程、誤差方程和法方程;解算法方程,得出平差后的平差值及各待定點(diǎn)的高程平差值;評(píng)定各平差值的精度和各高程平差值的精度。具體算例為:如圖所示水準(zhǔn)網(wǎng),有2個(gè)已知點(diǎn),3個(gè)未知點(diǎn),7個(gè)測(cè)段。各已知數(shù)據(jù)及觀測(cè)值見下表(1) 已知點(diǎn)高程H1=5.016m , H2=6.016m (2)高差觀測(cè)值(m)端點(diǎn)號(hào)高差觀測(cè)值m測(cè)段距離km序號(hào)1-31.3591.111-42.0091.722-30.3632.332-41.0122.743-40.6572.453-50.2381.465-2-0.5952.67(3)求各待定點(diǎn)的高程;3-4點(diǎn)的高差中誤差;3號(hào)點(diǎn)、4號(hào)

4、點(diǎn)的高程中誤差。第三部分 設(shè)計(jì)思路一、解題步驟(1)此次設(shè)計(jì)我所采用的模型為間接平差模型,根據(jù)已知條件我們可知觀測(cè)總數(shù)n=7,必要觀測(cè)數(shù)t=3(則多余觀測(cè)數(shù)r=n-t=4),因此我需先選定三個(gè)參數(shù),即3、4、5點(diǎn)的最或然高程X3、X4、X5(X=X0+x,X30=6.375、X40=7.025、X50=6.611;其中X0為參數(shù)的近似值,x為其改正值)為參數(shù)。(2)列出條件方程,即將每一個(gè)觀測(cè)量的平差值分別表達(dá)成所選參數(shù)的函數(shù),H1+h1=X3、H1+h2=X4、H2+h3=X3、H2+h4=X4、X3+h5=X4、X3+h6=X5、X5+h7=H2;整理后得出誤差方程,v1=x3、v2=x4

5、、v3=x3-4、v4=x4-3、v5=-x3+x4-7、v6=-x3+x5-2、v7=-x5,即v=Bx-l的形式。(3)定權(quán),令每千米的觀測(cè)高差為單位權(quán)觀測(cè),即Pi=1/Si,從而可寫出權(quán)陣P;根據(jù)誤差方程式又可得其系數(shù)矩陣B和自由項(xiàng)l,并由它們組成法方程N(yùn)BBx-W=0(其中NBB=BTPB,W=BTPl),法方程的個(gè)數(shù)等于所選參數(shù)的個(gè)數(shù)。(4)解算法方程,求出參數(shù)改正值x并計(jì)算參數(shù)的平差值X=X0+x。(5)由誤差方程計(jì)算V,并求出觀測(cè)量的平差值。為了檢查平差計(jì)算的正確性,將所求的值代入條件方程,看其是否滿足方程。(6)精度評(píng)定,計(jì)算單位權(quán)中誤差,按照題設(shè)要求列出權(quán)函數(shù)式,再根據(jù)平差參

6、數(shù)的協(xié)方差陣求出協(xié)因數(shù),最后求出某段高差中誤差,某些點(diǎn)的高程中誤差。二、程序設(shè)計(jì)思想考慮到在解題過程中一些計(jì)算的復(fù)雜性,我們需借助一些技術(shù)將計(jì)算簡(jiǎn)單化,快捷化,因此在課程設(shè)計(jì)過程中,我們把一些C語言程序設(shè)計(jì)引入其中;通過一些簡(jiǎn)單、明了的程序及子函數(shù)調(diào)用,我們就可以很方便快捷的求出用筆算比較繁瑣、費(fèi)時(shí)的矩陣乘積、矩陣的逆(如BTPB、BTPl)等運(yùn)算。第四部分 程序流程圖根據(jù)題目列出條件方程并寫成誤差方程的形式V=Bx-l確定權(quán)陣,根據(jù)誤差方程得到矩陣B、l進(jìn)而寫出BT運(yùn)用C程序語言求出BTP,進(jìn)一步得到NBB=BTPB、W=BTPl并求出NBB-1用C程序求出參數(shù)的改正數(shù)x=NBB-1W根據(jù)C

7、程序語言求Bx,進(jìn)而由V=Bx-l寫出各觀測(cè)值的改正數(shù)根據(jù)L=L+V求出各觀測(cè)值的平差值檢驗(yàn)所求各值是否正確,若無誤則往下進(jìn)行,反之檢查各步驟查出錯(cuò)誤并改正由程序計(jì)算VTP進(jìn)而求出VTPV,求單位權(quán)中誤差,再根據(jù)權(quán)函數(shù)式、協(xié)因數(shù)傳播定律評(píng)定各觀測(cè)值及所求高程的精度第五部分 程序及說明一、矩陣相乘計(jì)算函數(shù)*include “stdio.h”void Matrix(a,b,m,n,k,c)int m,n,k;double a,b,c;int i,j,l,u;for(i=0;i<=m-1;i+)for(j=0;j<=k-1;j+) u=i*k+j;cu=0.0; for(l=0;l<

8、;=n-1;l+) cu=cu+ai*n+l*bl*k+j; return;1.計(jì)算BTPmain()int i,j;static double a37=BT;static double c37,b77=P;Matrixmul(a,b,3,7,7,c);printf(“n”);for(i=0;i<=2;i+)for(j=0;j<=6;j+) printf(“%8.4ft”,cij; printf(“n”);printf(“n”);return0;2.計(jì)算BTPB,即NBBmain()int i,j;static double a37=BTP;static double c33,b7

9、3=B;Matrixmul(a,b,3,7,3,c);printf(“n”);for(i=0;i<=2;i+)for(j=0;j<=2;j+) printf(“%8.4ft”,cij; printf(“n”);printf(“n”);return0;3.計(jì)算BTPl,即Wmain()int i,j;static double a37=BTP;static double c31,b71=l;Matrixmul(a,b,3,7,1,c);printf(“n”);for(i=0;i<=2;i+)for(j=0;j<=0;j+) printf(“%8.4ft”,cij; pri

10、ntf(“n”);printf(“n”);return0;二、矩陣的逆計(jì)算函數(shù)(求NBB-1)*include "stdio.h" *define M 3 void main() float MATM2*M; float MAT1MM; float t; int i,j,k,l; /*/ /*對(duì)矩陣進(jìn)行初始化*/ for(i=0;i<M;i+) for(j=0;j<2*M;j+) MAT1j='0' /*對(duì)MAT1矩陣賦初值 */ for(i=0;i<M;i+) for (j=0;j<M;j+) scanf("%f"

11、;,&MAT1j); /*打印目標(biāo)矩陣"*/ printf("原矩陣為:n"); for (i=0;i<M;i+) for (j=0;j<M;j+) printf("%13.7f",MAT1j); printf("n"); /*/ /*對(duì)MAT1矩陣進(jìn)行擴(kuò)展,MAT1矩陣添加單位陣,由M*M變成2M*2M矩陣 */ for(i=0;i<M;i+) for(j=0;j<2*M;j+) if (j<M) MATj=MAT1j; else if (j=M+i) MATj=1; else MAT

12、j=0; /*對(duì)M矩陣進(jìn)行變換,使得前半部分矩陣成為單位陣,則 */ /*后半部分矩陣即為所求矩陣逆陣 */ for(i=0;i<M;i+) /*對(duì)第i行進(jìn)行歸一化 */ for (j=0;j<2*M;j+) for(k=i+1;k<M;k+) MATj=MATj+MATkj; t=MAT; for(j=i;j<2*M;j+) MATj=MATj/t; /*對(duì)矩陣進(jìn)行行變換,使得第i 列只有一個(gè)元素不為零,且為1*/ for(k=0;k<M;k+) if(k!=i) t=MATk; for (l=i;l<2*M;l+) MATkl=MATkl-MATl*t;

13、 /*將后半部分矩陣即所求矩陣逆陣存入MAT2矩陣。*/ for(i=0;i<M;i+) for(j=0;j<M;j+) MAT1j=MATj+M; printf("n"); /*/ /*輸出所求的逆陣*/ printf("逆陣為:n"); for(i=0;i<M;i+) for(j=0;j<M;j+) printf("%8.4f",MAT1j); printf("n"); 4.求NBB-1W,即改正數(shù)xmain()int i,j;static double a33=NBB-1;static

14、 double c31,b31=W;Matrixmul(a,b,3,3,1,c);printf(“n”);for(i=0;i<=2;i+)for(j=0;j<=0;j+) printf(“%8.4ft”,cij; printf(“n”);printf(“n”);return0;5.計(jì)算Bxmain()int i,j;static double a73=B;static double c71,b31=x;Matrixmul(a,b,7,3,1,c);printf(“n”);for(i=0;i<=6;i+)for(j=0;j<=0;j+) printf(“%8.4ft”,c

15、ij; printf(“n”);printf(“n”);return0;6.計(jì)算VTPmain()int i,j;static double a17=VT;static double c17,b77=P;Matrixmul(a,b,1,7,7,c);printf(“n”);for(i=0;i<=0;i+)for(j=0;j<=6;j+) printf(“%8.4ft”,cij; printf(“n”);printf(“n”);return0;7.計(jì)算VTPVmain()int i,j;static double a17=VTP;static double c11,b71=V;Mat

16、rixmul(a,b,1,7,1,c);printf(“n”);for(i=0;i<=0;i+)for(j=0;j<=0;j+) printf(“%8.4ft”,cij; printf(“n”);printf(“n”);return0;注:程序中有下劃線部分在C語言環(huán)境中運(yùn)行時(shí),需根據(jù)已知條件及所求結(jié)果進(jìn)行替換!第六部分 計(jì)算結(jié)果根據(jù)條件方程及定權(quán)原則寫出B、l、P及BTB=1.0,0.0,0.0, 0.0,1.0,0.0, 1.0,0.0,0.0, 0.0,1.0,0.0, -1.0,1.0,0.0, -1.0,0.0,1.0, 0.0,0.0,-1.0l=0.0, 0.0, 4

17、.0, 3.0, 7.0, 2.0, 0.0P=0.9091,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,0.5882,0.0,0.0,0.0,0.0,0.0, 0.0,0.0,0.4348,0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.3704,0.0,0.0,0.0, 0.0,0.0,0.0,0.0,0.4167,0.0,0.0, 0.0,0.0,0.0,0.0,0.0,0.7143,0.0, 0.0,0.0,0.0,0.0,0.0,0.0,0.3846BT=1.0,0.0,1.0,0.0,-1.0,-1.0,0.0,0.0,1.0,0.0,1.0,1.0,0

18、.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,-1.0一、在矩陣相乘計(jì)算函數(shù)的程序前提下,進(jìn)行以下子程序的調(diào)用1.替換第1個(gè)程序中的BT 、P并運(yùn)行程序得到BTP BTP=0.9091,0.0,0.4348,0.0,-0.4167,-0.7143,0.0,0.0,0.5882,0.0,0.374,0.4167,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.7143,-0.38462.替換第2個(gè)程序中的BTP、B并運(yùn)行程序得到BTPB,即NBBNBB=2.4748,-0.4167,-0.7143,-0.4167,1.3753,0.0,-0.7143,0.0,1.09

19、893.替換第3個(gè)程序中的BTP、l并運(yùn)行程序得到BTPl,即WW=-2.6063,4.0281,1.4286二、在矩陣的逆計(jì)算函數(shù)程序中進(jìn)行以下操作 運(yùn)行程序,按照提示及以上運(yùn)算得到的矩陣NBB輸入其元素,運(yùn)行的結(jié)果即為NBB-1 NBB-1=0.5307,0.1608,0.3450,0.1608,0.7758,0.1045,0.3450,0.1045,1.1342三、再次在矩陣相乘計(jì)算函數(shù)的程序前提下,進(jìn)行以下子程序的調(diào)用1.替換第4個(gè)程序中的NBB-1、W并運(yùn)行程序得到NBB-1W,即所選參數(shù)的改正數(shù)xx=-0.2426,2.8552,1.14212.替換第5個(gè)程序中的B、x并運(yùn)行程序得

20、到BxBx=-0.2426, 2.8552, -0.2464, 2.8552, 3.0978, 1.3847, -1.14213.根據(jù)V=Bx-l求出各觀測(cè)值的改正數(shù)V,并寫出VT,然后替換第6個(gè)程序中的VT、P并運(yùn)行程序得到VTPV=-0.2426, 2.8552, -4.2426, -0.1448, -3.9022, -0.6153, -1.1421VT=-0.2426,2.8552,-4.2426,-0.1448,-3.9022,-0.6153,-1.1421VTP=-0.2205,1.6794,-1.8447,-0.0536,1.6260,-0.4395,-0.43934.替換第7個(gè)程

21、序中的VTP、V并運(yùn)行程序得到VTPVVTPV=19.7997四、求出各個(gè)觀測(cè)值平差值并按要求平定精度X3=6.3748 m X4=7.0279 m X5=6.6122 mh1=1.3588mh2=2.0119mh3=0.3588m h4=1.0119m h5=0.6531mh6=0.2374m h7=-0.5961m根據(jù)公式可求得單位權(quán)中誤差為 2.225mmh34= X3- X4 Q34=1 -1 0 NBB-11 -1 0T=0.9849H3=X3Q34=1 0 0 NBB-11 0 0T=0.5307H4= X4 Q34=0 1 0 NBB-10 1 0T=0.77583、4點(diǎn)高差中誤

22、差為 2.208mm3號(hào)點(diǎn)高程中誤差為 1.621mm4號(hào)點(diǎn)高程中誤差為 1.96mm第七部分 總結(jié)通過這次誤差理論與測(cè)量平差的課程設(shè)計(jì),我又對(duì)整本書有了一個(gè)更深的理解。其實(shí)課程設(shè)計(jì)就是將我們所學(xué)的理論知識(shí)應(yīng)用于實(shí)踐的過程,在這一過程中,進(jìn)一步掌握測(cè)量平差的基本原理和基本公式,并熟悉測(cè)量數(shù)據(jù)處理的基本技能和計(jì)算方法?;蛟S我們已對(duì)誤差理論與測(cè)量平差這本書的理論知識(shí)有了一定了解,但將它應(yīng)用于實(shí)踐依然是我們的一個(gè)難點(diǎn),尤其是將這門課程與計(jì)算機(jī)程序完美地結(jié)合。這便要求我們?cè)谠械慕忸}思路中加入C語言程序,并讓它來幫助我們解決矩陣的復(fù)雜運(yùn)算。既然用到了程序,我們就必須保證其運(yùn)算的簡(jiǎn)潔性、正確性,尤其是在

23、編寫過程中要認(rèn)真檢查,為程序順利運(yùn)行打下基礎(chǔ)。另外在各個(gè)子程序調(diào)用過程中,我們要充分考慮其順序性并反復(fù)調(diào)試,以便得到理想結(jié)果。盡管在這次課程設(shè)計(jì)中遇到了很多困難,但我卻得到了不少收獲,并培養(yǎng)了自己正確應(yīng)用公式、綜合分析和解決問題的能力,同時(shí)也為今后步入社會(huì)打下了一定的基礎(chǔ)。另外,我們還要學(xué)會(huì)綜合利用自身所學(xué)的知識(shí),并將它們聯(lián)系起來幫助自己有效地解決實(shí)際中的問題??傊?,在這次課程設(shè)計(jì)中我不但過了比較充實(shí)的一周,還收獲了不少知識(shí)。*include<iostream>*include<fstream>*include<stdlib.h>*include<ma

24、th.h>*include<iomanip>*include<string.h>using namespace std; class SZWPC private: int gcz_zs; /高差總數(shù) int szd_zs; /總點(diǎn)數(shù) int yz_szd_zs; /已知點(diǎn)數(shù) double s0;/單位權(quán)水準(zhǔn)路線長(zhǎng)度 double m_pvv; /pvv int *qsd_dh; /高差起點(diǎn)號(hào) int *zd_dh; /高差終點(diǎn)號(hào) char *dm; /點(diǎn)名地址數(shù)組 double *gcz; /觀測(cè)值數(shù)組 double *szd_gc; /高程值數(shù)組 double

25、*P; /觀測(cè)值的權(quán) double *BTPB,*BTPL; /法方程系數(shù)矩陣與自由項(xiàng) double *dX; /高程改正數(shù)、平差值 double *V; /殘差 double zwc; /單位權(quán)中誤差 public: SZWPC(); SZWPC(); int ij(int i,int j);/對(duì)稱矩陣下標(biāo)計(jì)算函數(shù) bool inverse(double a,int n);/對(duì)稱正定矩陣求逆(僅存下三角元素)(參考他人) void inputdata(char *datafile);/輸入原始數(shù)據(jù)函數(shù) int dm_dh(char *name); /點(diǎn)名轉(zhuǎn)點(diǎn)號(hào) void ca_H0(); /

26、近似高程計(jì)算函數(shù) void ca_BTPB(); /法方程組成函數(shù) void ca_dX(); /高程平差值計(jì)算函數(shù) void printresult(char *resultfile); /精度估計(jì)與平差值輸出函數(shù) double ca_V(); /殘差計(jì)算函數(shù) void zxecpc(char *resultfile);/最小二乘平差函數(shù);/ / 構(gòu)造函數(shù)SZWPC:SZWPC() gcz_zs=0; szd_zs=0; yz_szd_zs=0;/ / 析構(gòu)函數(shù)SZWPC:SZWPC() if(gcz_zs>0) delete qsd_dh; delete zd_dh; delete

27、gcz; delete P; delete V; if(szd_zs>0) delete szd_gc; delete BTPB; delete BTPL; delete dX; for(int i=0; i<szd_zs;i+) if(dmi!=NULL)delete(dmi); delete dm; / / 對(duì)稱矩陣下標(biāo)計(jì)算函數(shù)int SZWPC:ij(int i,int j) return (i>=j)" i*(i+1)/2+j :j*(j+1)/2+i; / 對(duì)稱正定矩陣求逆(僅存下三角元素)bool SZWPC:inverse(double a,int n

28、) double *a0=new doublen; for(int k=0;k<n;k+) double a00=a0; if(a00+1.0=1.0) delete a0; return false; for(int i=1;i<n;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(int i=1;i<n;i+) a(n-1)*n/2+i-1=a

29、0i; an*(n+1)/2-1=1.0/a00; delete a0; return true;/ 原始數(shù)據(jù)輸入函數(shù)void SZWPC:inputdata(char *datafile) ifstream infile(datafile,ios:in);/聲明輸入句柄infile打開地址為datafile的文件并 if(!infile) cerr<<" Open error!"<<endl; infile>>gcz_zs>>szd_zs>>yz_szd_zs; infile>>s0; szd_gc=

30、new double szd_zs; dX=new double szd_zs; BTPB=new double szd_zs*(szd_zs+1)/2; BTPL=new double szd_zs; qsd_dh=new int gcz_zs; zd_dh=new int gcz_zs; gcz=new double gcz_zs; V=new double gcz_zs; P=new double gcz_zs; dm=new char* szd_zs; for(int i=0;i<szd_zs;i+) dmi = NULL;/ dm_dh函數(shù)根據(jù)dmi是否為NULL確定dmi是否

31、為點(diǎn)名地址 char buffer128; /臨時(shí)數(shù)組,保存從文件中讀到的點(diǎn)名 for(int i=0;i<=yz_szd_zs-1;i+)/ 讀取已知高程數(shù)據(jù) infile>>buffer; int c=dm_dh(buffer); infile>>szd_gci; for(int i=0;i<gcz_zs;i+)/ 讀取觀測(cè)數(shù)據(jù) infile>>buffer; /讀取高程起點(diǎn)名 qsd_dhi=dm_dh(buffer); infile>>buffer;/讀取高程終點(diǎn) zd_dhi=dm_dh(buffer); infile>

32、;>gczi>>Pi; /讀取高差值與路線長(zhǎng)度 Pi=s0/Pi;/線路長(zhǎng)轉(zhuǎn)化為觀測(cè)值的權(quán) infile.close();/ 點(diǎn)名轉(zhuǎn)點(diǎn)號(hào),返回點(diǎn)名對(duì)應(yīng)的點(diǎn)號(hào)int SZWPC:dm_dh(char *name) for(int i=0;i<szd_zs;i+) if(dmi!=NULL) if(strcmp(name,dmi)=0)return i;/將待查點(diǎn)名與已經(jīng)存入點(diǎn)名數(shù)組的點(diǎn)名比較,若存在返回點(diǎn)號(hào) else int len=strlen(name);/判斷點(diǎn)名長(zhǎng)度 dmi=new charlen+1;/為點(diǎn)名申請(qǐng)存儲(chǔ)空間 strcpy(dmi, name);/待

33、查點(diǎn)名是一個(gè)新的點(diǎn)名,將新點(diǎn)名的地址放到dm數(shù)組中 return i;/返回點(diǎn)號(hào) return -1; /dm數(shù)組已經(jīng)存滿,且沒有待查點(diǎn)名/高程近似值計(jì)算void SZWPC:ca_H0() for(int i=yz_szd_zs;i<szd_zs;i+)szd_gci=-10000.9;/為計(jì)算機(jī)設(shè)置辨別未知高程點(diǎn)的標(biāo)志 for(int j=1;j+) int k=0; /計(jì)算出近似高程的點(diǎn)數(shù) for(int i=0;i<gcz_zs;i+) int k1=qsd_dhi; /高差起點(diǎn)號(hào) int k2=zd_dhi; /高差終點(diǎn)號(hào) if(szd_gck1>-10000.0

34、&& szd_gck2<-10000.0)/k1點(diǎn)高程或高程近似值已知,k2點(diǎn)高程或高程近似值未知 szd_gck2=szd_gck1+gczi;/計(jì)算近似高程 k+; else if(szd_gck1<-10000.0 && szd_gck2>-10000.0)/k2點(diǎn)高程或高程近似值已知,k1點(diǎn)高程或高程近似值未知 szd_gck1=szd_gck2-gczi;/計(jì)算近似高程 k+; if(k=(szd_zs-yz_szd_zs)break;/所有的近似高程計(jì)算完成,退出 / 組成法方程void SZWPC:ca_BTPB() int t=

35、szd_zs; for(int i=0; i<szd_zs*(szd_zs+1)/2; i+) BTPBi=0.0;/賦初值 for(int i=0; i<szd_zs; i+) BTPLi=0.0;/賦初值 for(int k=0; k<gcz_zs; k+) int i=qsd_dhk;/獲取點(diǎn)號(hào) int j=zd_dhk;/獲取點(diǎn)號(hào) double Pk=Pk;/獲取權(quán)值 double lk=gczk-(szd_gcj-szd_gci);/獲得第k個(gè)自由項(xiàng) BTPLi-=Pk*lk;/獲得法方程自由項(xiàng) BTPLj+=Pk*lk; BTPBij(i,i)+=Pk;/獲得法方

36、程系數(shù)矩陣 BTPBij(j,j)+=Pk; BTPBij(i,j)-=Pk; / 高程平差值計(jì)算void SZWPC:ca_dX() for(int i=0;i<yz_szd_zs;i+) BTPBij(i,i)=1.0e30;/處理已知點(diǎn) if(!inverse(BTPB,szd_zs)/矩陣求逆 cerr<<"法方程系數(shù)矩陣降秩!"<<endl;/矩陣為奇異矩陣,無法求逆 exit(0);/退出程序 for(int i=0; i<szd_zs; i+)/計(jì)算高程改正數(shù) double xi=0.0; for(int j=0; j<

37、;szd_zs; j+) xi+=BTPBij(i,j)*BTPLj; dXi=xi; szd_gci+=xi;/計(jì)算高程平差值 / 殘差計(jì)算double SZWPC:ca_V() double pvv=0.0; for(int i=0;i<=gcz_zs-1;i+) int k1=qsd_dhi; int k2=zd_dhi; Vi=(szd_gck2-szd_gck1-gczi)*1000; pvv+=Vi*Vi*Pi; return(pvv);/ 原始數(shù)據(jù)和平差值輸出void SZWPC:printresult(char *resultfile) double pvv=ca_V()

38、; / 殘差計(jì)算 ofstream outfile(resultfile,ios:out);/以輸出方式打開文件,若文件不存在,創(chuàng)建文件 /輸出原始觀測(cè)數(shù)據(jù) outfile<<endl<<"觀測(cè)總數(shù):"<<gcz_zs<<" "<<"總點(diǎn)數(shù):"<<szd_zs; outfile<<" "<<"已知點(diǎn)數(shù):"<<yz_szd_zs<<endl<<endl; outfil

39、e<<"單位權(quán)水準(zhǔn)路線長(zhǎng):"<<s0<<"(km)"<<endl; outfile<<endl<<"= 已知高程 ="<<endl;/輸出原始觀測(cè)數(shù)據(jù)已知點(diǎn)點(diǎn)號(hào)、高程 for(int i=0;i<=yz_szd_zs-1;i+) outfile<<" "<<dmi; outfile<<setiosflags(ios:fixed); outfile<<setw(10)<<

40、;setprecision(4)<<szd_gci<<endl; outfile<<endl<<endl<<"= 高差觀測(cè)值="<<endl<<endl;/輸出原始觀測(cè)數(shù)據(jù)高程觀測(cè)值與路線長(zhǎng) outfile<<"起始點(diǎn)名"<<" "<<"終點(diǎn)點(diǎn)名"<<" "<<" 高差觀測(cè)值(m)"<<" "<&

41、lt;" 兩點(diǎn)間距離(km)"<<endl; for(int i=0;i<=gcz_zs-1;i+) outfile<<" "<<dmqsd_dhi<<setw(9)<<dmzd_dhi; outfile<<setiosflags(ios:fixed); outfile<<setw(16)<<setprecision(4)<<gczi; outfile<<setiosflags(ios:fixed); outfile<<

42、;setw(16)<<setprecision(4)<<s0/Pi<<endl; zwc=sqrt(pvv/(gcz_zs-(szd_zs-yz_szd_zs);/計(jì)算單位權(quán)中誤差 outfile<<endl<<"= 單位權(quán)中誤差="<<endl;/輸出單位權(quán)中誤差 outfile<<endl<<"0="<<zwc<<"(mm)"<<endl; outfile<<endl<<&qu

43、ot;= 高程平差值及其精度 ="<<endl<<endl;/輸出高程平差值及其精度 outfile<<"點(diǎn)名 近似高程(m) 改正數(shù)(mm) 高程平差值(m) 中誤差(mm)"<<endl; for(int i=0; i<szd_zs; i+) outfile<<setw(2)<<dmi; double dx=dXi; double qii=BTPBij(i,i); outfile<<setiosflags(ios:fixed);/用定點(diǎn)格式顯示浮點(diǎn)數(shù) outfile<

44、;<setw(12)<<setprecision(4)<<szd_gci-dx; outfile<<setiosflags(ios:fixed); outfile<<setw(15)<<setprecision(4)<<dx*1000; outfile<<setiosflags(ios:fixed); outfile<<setw(13)<<setprecision(4)<<szd_gci; outfile<<setiosflags(ios:fixed); outfile<<setw(16)<<setprecision(4)<<sqrt(qii)*zwc<<endl; /輸出觀測(cè)值平差值及其精度 outfile<<endl<<endl<<"= 觀測(cè)值平差值及其精度

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論