測(cè)量平差課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁(yè)
測(cè)量平差課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁(yè)
測(cè)量平差課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁(yè)
測(cè)量平差課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁(yè)
測(cè)量平差課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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)介

測(cè)量平差課程設(shè)計(jì)學(xué)院:專業(yè):班級(jí):姓名:學(xué)號(hào):指導(dǎo)教師:、任務(wù)概述1、任務(wù)背景條件平差課程設(shè)計(jì)是在繼大學(xué)二年級(jí)完成誤差理論與測(cè)量平差基礎(chǔ)課程之后所開(kāi)設(shè)的一門實(shí)踐性課程,以便于學(xué)生更加鞏固與運(yùn)用這些知識(shí),并培養(yǎng)學(xué)生的綜合應(yīng)用能力。2、軟件說(shuō)明本程序采用C#語(yǔ)言編寫完成,旨在計(jì)算條件平差中的改正數(shù)矩陣,具體所參考例題在平差教材99頁(yè)例5-8,網(wǎng)形為水準(zhǔn)網(wǎng)。具有四個(gè)誤差方程。二、平差原理如果一個(gè)幾何模型中有r個(gè)多余觀測(cè),就會(huì)產(chǎn)生r個(gè)多余方程,就產(chǎn)生r個(gè)條件方程,以條件方程為函數(shù)模型的平差方法叫做條件平差。條件平差原理:AV+W=0D=O02Q=O02P-1平差準(zhǔn)則為:VTPV=min法方程:NAA平差準(zhǔn)則為:VTPV=min法方程:NAAK+W=0解為:K=-NAA-1W改正數(shù)方程:V=QATK三、系統(tǒng)設(shè)計(jì)總體框架及模塊劃分:數(shù)據(jù)輸入:本程序采用Excel表格輸入數(shù)據(jù)預(yù)處理:本程序需要現(xiàn)在紙上寫出條件方程,并將條件方程系數(shù)填入上圖Excel表中。平差計(jì)算成果輸出實(shí)用工具采用visualstudio2013所支持的C#語(yǔ)言的Windows窗體應(yīng)用程序進(jìn)行編程。四、平差計(jì)算流程1、 首先用矩陣讀取datagridview1中的觀測(cè)高差列,條件方程系數(shù),與W矩陣,在這,我是先用數(shù)組進(jìn)行讀取,再利用循環(huán)語(yǔ)句將其賦予到矩陣之中。2、 利用之前封裝的矩陣相乘,求交,求逆,與轉(zhuǎn)置代碼進(jìn)行相應(yīng)的矩陣運(yùn)算,具體計(jì)算步驟參考之前的平差計(jì)算原理。(矩陣運(yùn)算代碼張瑞婭老師學(xué)習(xí)通里有過(guò)講解)3、 再將運(yùn)算的結(jié)果輸入到datagridview表格中,程序運(yùn)行結(jié)束。五、代碼Excel輸入代碼:dataGridViewl.DataSource=null;dataGridViewl.Rows.Clear();dataGridViewl.Columns.Clear();OpenFileDialogfile=newOpenFileDialogO;file.Filter="Excel文件|*.xls|Excel文件|*.xlsx";if(file.ShowDialogO==DialogResult.OK){stringfname=file.FileName;stringstrSource="provider二Microsoft.ACE.OLEDB.12.O;"+"DataSource二"+fname+";ExtendedProperties='Excel8.0;HDR=Yes;IMEX=1'";OleDbConnectionconn=newOleDbConnection(strSource);stringsqlstring="SELECT*FROM[Sheetl$]";OleDbDataAdapteradapter=newOleDbDataAdapter(sqlstring,conn);DataSetda=newDataSet();adapter.Fill(da);dataGridViewl.DataSource=da.Tables[O];}elsereturn;矩陣運(yùn)算代碼://矩陣轉(zhuǎn)置publicdouble],]tranMatrix(double[,]a){intm,n;m=a.GetLength(0); //獲取二維數(shù)組即矩陣中第一維的長(zhǎng)度,即行數(shù)n=a.GetLength(l);//獲取矩陣中第二維的長(zhǎng)度,即列數(shù)double[,]b=newdouble[n,m]; //定義新的矩陣為n行m列,用于存放轉(zhuǎn)置后矩陣for(inti二0;i<n;i++)for(intj二0;j<m;j++)b[i,j]=a[j,i];returnb;}//矩陣相乘publicdouble],]MultiplyMatrix(double[,]a,double[,]b){intm,n,M,N;m=a.GetLength(0);//獲取a,b兩個(gè)矩陣的行列數(shù)n=a.GetLength(l);M=b.GetLength(0);N=b.GetLength(1);double[,]c=newdouble[m,N];//定義新的矩陣為m行N列,用于存放相乘后矩陣if(n!=M)MessageBox.Show(“輸入的兩個(gè)矩陣不能相乘!");//檢查矩陣a的列數(shù)是否等于b的行數(shù)else{for(inti二0;i<m;i++)for(intj二0;j<N;j++){doublesum=0;for(intk=0;k<n;k++)sum+=a[i,k]*b[k,j];//將矩陣a的第i行與b的第j列對(duì)應(yīng)相乘再相加c[i,j]=sum;}}returnc;}//矩陣求逆一首先計(jì)算矩陣對(duì)應(yīng)行列式的值publicstaticdoubleMatrixValue(double[,]MatrixList)//首先需要計(jì)算行列式的值|A|,如果為0說(shuō)明不可逆//計(jì)算行列式的方法//ala2a3//b1b2b3//c1c2c3//結(jié)果為a1?b2?c3+b1?c2?a3+c1?a2?b3-a3?b2?c1-b3?c2?a1-c3?a2?b1(注意對(duì)角線就容易記住了){intLevel=MatrixList.GetLength(0); //獲取矩陣維數(shù)double[,]dMatrix=newdouble[Level,Level];//定義二維數(shù)組,行列數(shù)相同for(inti二0;i<Level;i++)for(intj=0;j<Level;j++)dMatrix[i,j]=MatrixList[i,j];//將參數(shù)的值,賦值給定義的數(shù)組doublec,x;intk=1;for(inti二0,j=0;i<Level&&j<Level;i++,j++){if(dMatrix[i,j]==0)//判斷對(duì)角線上的數(shù)據(jù)是否為0(從i=j=0即第一個(gè)數(shù)據(jù)開(kāi)始){intm=i;for(;dMatrix[m,j]==0;m++);//如果對(duì)角線上數(shù)據(jù)為0,從該數(shù)據(jù)開(kāi)始依次往后判斷該列是否為0if(m==Level)//當(dāng)該列從對(duì)角線數(shù)據(jù)開(kāi)始數(shù)據(jù)都為0的時(shí)候返回0return0;else{//Rowchangebetweeni-rowandm-row從對(duì)角線數(shù)據(jù)開(kāi)始交換第i行和第m行數(shù)據(jù),因?yàn)閷?duì)角線之前都是0for(intn二j;n<Level;n++){c=dMatrix[i,n];dMatrix[i,n]=dMatrix[m,n];dMatrix[m,n]=c;}//Changevaluepre-value交換兩行后行列式變號(hào)k*=(-1);}}//Set0tothecurrentcolumnintherowsaftercurrentrow化成下三角for(ints=Level-1;s>i;s—){x=dMatrix[s,j];for(intt二j;t<Level;t++)dMatrix[s,t]-二dMatrix[i,t]*(x/dMatrix[i,j]);}}doublesn=1;for(inti=0;i<Level;i++)//化成下三角后,行列式值為對(duì)角線相乘{(lán)if(dMatrix[i,i]!=0)sn*=dMatrix[i,i];elsereturn0;}returnk*sn;}//矩陣相加publicdouble],]MatrixAdd(double[,]A,double[,]B){introwA=A.GetLength(0);intcolA=A.GetLength(l);introwB=B.GetLength(0);intcolB=B.GetLength(l);double],]C=newdouble[rowA,colA];try{for(inti二0;i<rowA;i++){for(intj=0;j<colA;j++){C[i,j]=A[i,j]+B[i,j];}returnC;catch{System.Exceptionexp二newException(“相加的兩個(gè)矩陣行數(shù)或者列數(shù)不相等,不能相加!〃);throwexp;}}//矩陣求逆一開(kāi)始求逆publicstaticdouble[,]ReverseMatrix(double[,]dMatrix)//開(kāi)始求逆{intLevel=dMatrix.GetLength(0); //獲取矩陣維數(shù)doubledMatrixValue=MatrixValue(dMatrix);//求取矩陣的行列式值if(dMatrixValue==0)returnnull;//A為該矩陣若|A|=0則該矩陣不可逆返回空double[,]dReverseMatrix二newdouble[Level,2*Level];//列為行的2倍,用于存放單位陣Idoublex,c;//InitReversematrixfor(inti=0;i<Level;i++)//創(chuàng)建一個(gè)矩陣(A|I)以對(duì)其進(jìn)行初等變換求得其矩陣的逆{for(intj=0;j<2*Level;j++){if(j<Level)dReverseMatrix[i,j]=dMatrix[i,j];//該(A|I)矩陣前Level列為矩陣A后面為數(shù)據(jù)全部為0elsedReverseMatrix[i,j]=0;}dReverseMatrix[i.Level+i]=1;//將Level+1行開(kāi)始的Level階矩陣裝換為單位矩陣(起初的時(shí)候該矩陣都為0現(xiàn)在在把對(duì)角線位置裝換為1)//參考/gaosuzk/content/lljx/wzja/12/12-6.htm}for(inti二0,j=0;i<Level&&j<Level;i++,j++){if(dReverseMatrix[i,j]==0)//判斷一行對(duì)角線是否為0{intm=i;for(;dMatrix[m,j]==0;m++);if(m==Level)returnnull;//某行對(duì)角線為0的時(shí)候判斷該行該數(shù)據(jù)所在的列在該數(shù)據(jù)后是否為0都為0的話不可逆返回空值else{//Addi-rowwithm-rowfor(intn=j;n<2*Level;n++)//如果對(duì)角線為0則該i行加上m行m行為(初等變換要求對(duì)角線為1,0—>1先加上某行,下面在變1)dReverseMatrix[i,n]+=dReverseMatrix[m,n];}}//此時(shí)數(shù)據(jù):第二行加上第一行為第一行的數(shù)據(jù)TOC\o"1-5"\h\z//1 1 3 1 1 0//1 0 1 0 1 0//4 2 1 0 0 1////Formatthei-rowwith"T"startx=dReverseMatrix[i,j];if(x!=1)//如果對(duì)角線元素不為1執(zhí)行以下{for(intn二j;n<2*Level;n++)if(dReverseMatrix[i,n]!=0)dReverseMatrix[i,n]/=x;//相除使i行第一個(gè)數(shù)字為1}//Set0tothecurrentcolumnintherowsaftercurrentrowfor(ints=Level-1;s>i;s—)//該對(duì)角線數(shù)據(jù)為1時(shí),這一列其他數(shù)據(jù)要轉(zhuǎn)換為0{x=dReverseMatrix[s,j];//第一次時(shí)//113110//101010//4(x)21001//for(intt二j;t<2*Level;t++)dReverseMatrix[s,t]-二(dReverseMatrix[i,t]*x);//第一個(gè)輪回用第一行*4減去第三行為第三行的數(shù)據(jù)依次類推//113110//101010//0(x)-2-11-4-41}}//Formatthefirstmatrixintounit-matrixfor(inti二Level-2;i>=0;i--)//處理第一行二列的數(shù)據(jù)思路如上就是把除了對(duì)角線外的元素轉(zhuǎn)換為0{for(intj=i+1;j<Level;j++)if(dReverseMatrix[i,j]!=0){c=dReverseMatrix[i,j];for(intn二j;n<2*Level;n++)dReverseMatrix[i,n]-二(c*dReverseMatrix[j,n]);}}double[,]dReturn=newdouble[Level,Level];for(inti二0;i<Level;i++)for(intj=0;j<Level;j++)dReturn[i,j]=dReverseMatrix[i,j+Level];//就是把Level階的矩陣提取出來(lái)(減去原先為單位矩陣的部分)}計(jì)算代碼:returndReturn;double[]h=newdouble[7];//新建一個(gè)數(shù)組存放觀測(cè)高差double[]s=newdouble[7];double[]v1=newdouble[4];//輸入條件方程系數(shù)double[]v2=newdouble[4];double[]v3=newdouble[4];double[]v4=newdouble[4];double[]v5=newdouble[4];double[]v6=newdouble[4];double[]v7=newdouble[4];double[]w=newdouble[4];for(inti二0;i<4;i++){v1[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[4].Value);//讀取表格中數(shù)據(jù)v2[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[5].Value);v3[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[6].Value);v4[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[7].Value);v5[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[8].Value);v6[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[9].Value);v7[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[10].Value);w[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[ll].Value);}for(inti二0;i<h.Length;i++){h[i]=Convert.ToDouble(dataGridViewl.Rows[i].Cells[2].Value);//獲取第一個(gè)觀測(cè)高差s[i]Convert.ToDouble(dataGridViewl.Rows[i].Cells[l].Value);}double[]p=newdouble[h.Length];for(inti二0;i<h.Length;i++){p[i]=1/s[i];//根據(jù)長(zhǎng)度計(jì)算權(quán)}double[,]A=newdouble[4,7];//新建一個(gè)二維矩陣存放條件平差方程矩陣Afor(inti二0;i<4;i++){A[i,0]=v1[i];A[i,1]=v2[i];A[i,2]=v3[i];A[i,3]=v4[i];A[i,4]=v5[i];A[i,5]=v6[i];A[i,6]=v7[i];}double[,]P=newdouble[7,7];//新建一個(gè)矩陣存放測(cè)段距離for(inti二0;i<7;i++){P[i,i]=p[i];}double[,]W=newdouble[4,l];for(inti二0;i<4;i++){W[i,0]=w[i];//新建一個(gè)矩陣存放W}double[,]H=newdouble[h.Length,1];//新建一個(gè)矩陣存放改正后高差for(inti二0;i<7;i++){H[i,0]=h[i];}double],]Q=ReverseMatrix(P);//計(jì)算Q矩陣double],]NA1=MultiplyMa

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論