平差课程设计报告.docx
- 文档编号:24080649
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:35
- 大小:124.94KB
平差课程设计报告.docx
《平差课程设计报告.docx》由会员分享,可在线阅读,更多相关《平差课程设计报告.docx(35页珍藏版)》请在冰豆网上搜索。
平差课程设计报告
一.设计原始资料
水准网严密平差及精度评定示例。
如图所示水准网,有2个已知点,3个未知点,7个测段。
各已知数据及观测值见下表
(1)已知点高程H1=5.016mH2=6.016m
(2)高差观测值(m)
高差观测值(m)
端点号
高差观测值
测段距离
序号
1-3
1.359
1.1
1
1-4
2.009
1.7
2
2-3
0.363
2.3
3
2-4
1.012
2.7
4
3-4
0.657
2.4
5
3-5
0.238
1.4
6
5-2
-0.595
2.6
7
(3)求各待定点的高程;3-4点的高差中误差;3号点、4号点的高程中误差。
(提示,本网可采用以测段的高差为平差元素,采用间接平差法编写程序计算。
)
二、设计内容及要求
误差理论与测量平差是一门理论与实践并重的课程,其课程设计是测量数据处理理论学习的一个重要的实践环节,它是在我们学习了专业基础课“误差理论与测量平差基础”课程后进行的一门实践课程。
其目的是增强我们对误差理论与测量平差基础理论的理解,牢固掌握测量平差的基本原理和基本公式,熟悉测量数据处理的基本技能和计算方法,灵活准确地应用于解决各类数据处理的实际问题,正确应用条件平差模型列出观测值条件方程、误差方程、法方程和解算法方程,得出平差后的平差值及各待定点的高程平差值,评定各平差值的精度和各高程平差值的精度,并能用所学的计算机理论知识,编制简单的计算程序。
三、水准网间接平差思路
⑴.根据网型确定已知水准点数,未知水准点数u,总点数n,总的观测高差段数hn,必要观测数t,多余观测数r。
⑵.确定参数。
为平差后能直接求得待定点高程平差值,以3个待定点高程平差值为参数。
设3,4,5点的高程平差值分别为
,
,
。
⑶.列立条件方程.
左侧为观测值(系数为1),右侧为参数和常数项,并进一步改化成误差方程,最终写成矩阵形式。
得到系数矩阵A和常数项L
⑷.列立法方程,并解求法方程。
由于该水准网间接平差误差方程个数为7个而未知数个数为10个,所列的误差方程是一组相容方程,有无数组解,所以必须在最小二乘原则(VTPV=min)的基础上利用拉格朗日乘数法求解.令F=VTPV-2KT(V-A
+L),分别对V和
求导,并令其导数为零,得到2VTP-2KT=0,ATK=0,将二式合并即得法方程:
ATPV=ATPA
-ATPL=0。
求出Naa=ATPA,W=ATPL,即得到相应的法方程。
求解法方程,得到
=N-1aaW加上Xi即可得到待定点的高程平差值,将
代入误差方程得到相应的V值,hi+Vi得到各段高差的平差值。
⑸.精度评定。
计算单位权中误差的估值:
评定各待定点的高程中误差:
各待定点的精度即为:
评定高程平差值的精度:
四、平差程序设计思路
1、已知数据的输入
需要输入的数据包括水准网中已知点数、未知点数以及这些点的点号、已知高程和高差观测值、距离观测值等。
本程序采用文件方式进行输入,文件输入的格式如下:
第一行:
已知点个数、未知点个数、观测值个数
第二行:
点号(已知点在前,为支点在后)
第三行:
已知高程(顺序与上一行的点号对应)
第四行起:
高差观测值,按照“起点点号,终点点号,高差观测值,距离观测值”的顺序输入。
本程序使用的数据文件如下:
2,3,7
1,2,X1,X2,X3
5.016,6.016
1,X1,1.359,1.1
1,X2,2.009,1.7
2,X1,0.363,2.3
2,X2,1.012,2.7
X1,X2,0.657,2.4
X1,X3,0.238,1.4
X3,2,-0.595,2.6
2、平差计算过程
(1)近似高程计算。
用一个数组来存储高程近似值,已知点的高程放在这个数组的开头,然后按照点号输入的顺序依次搜索涉及该点的高差观测值,看该高程涉及的另一点是否已知,若已知,则可以计算出当前未知点的高程近似值,并放入高程近似值,以此类推,知道所有点的高程近似值都被求出为止。
(2)列立观测值的误差方程。
根据各观测值的起止点信息及高差、距离值给误差方程的系数矩阵、权矩阵和常数项的各个元素赋值。
(3)平差解算。
调用间接平差通用过程进行平差求解。
3、计算结果的输出
计算的中间结果和最后结果都实时地在文本框中显示,最后还可以把文本框中的内容保存在文本文件中。
4、界面设计
根据以上分析,进行界面设计。
用菜单组织程序,用文本框显示数据的输入、计算和输出情况。
由于涉及到打开和保存文件的操作,所以还需要一个通用对话框。
(!
)菜单设计
标题名称快捷键
标题名称快捷键
文件(&File)mnuFile-
…打开数据mnuOpenCtrl+O
…保存结果mnuSaveCtrl+S
…退出mnuExitCtrl+E
计算(&Calc)mnuCalc-
…近似高程mnuHeight-
…误差方程mnuEqu-
…平差计算mnuAdj-
(2)窗体、文本框和通用对话框。
在窗体上绘制一个文本框控件和一个通用对话框控件,其属性设置如下表:
对象属性值
对象属性值
Text1Text
Text1MultiLineTrue
Text1ScrollBarBoth
Form1Caption水准网间接平差
CommonDialog1NameCDg1
设计好属性后,调整控件和窗体的大小和位置,使之方便美观。
五、程序流程图
六、程序源代码及说明
程序中涉及的公共变量及其说明如下:
DimstrAsString
Dimnn%,un%,tn%,hn%'已知点个数,未知点个数,总点数,观测值个数
DimPname()AsString'点名数组
DimHknown()AsDouble'已知高程数组,存放已知点高程和高程近似值
Dimbe%(),en%()'观测值的起点和终点编号数组,存储的是点序号
Dimh#(),s#()'高差观测值数组和距离观测值数组
DimA#(),X#(),P#(),L#()'间接平差的系数阵、解向量、权阵和常数向量
1、数据输入
单击“文件→打开文件”命令,弹出打开对话框,待用户选取了文件以后,程序开始读取已知数据,具体代码如下:
'打开文件
PrivateSubmnuOpen_Click()
DimiAsInteger'循环变量
DimstrT1AsString,strT2AsString
CDg1.Filter="文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"
CDg1.ShowOpen'打开对话框
str=CDg1.'获得选中的文件名和路径
OpenstrForInputAs#1'打开文件
Input#1,nn,un,hn'读入已知点个数,未知点个数,观测值个数
tn=nn+un
ReDimPname(1Totn),Hknown(1Totn)
ReDimh(1Tohn),s(1Tohn),be(1Tohn),en(1Tohn)
Fori=1Totn'读入点名
Input#1,Pname(i)
Nexti
Fori=1Tonn'读入已知高程
Input#1,Hknown(i)
Nexti
Fori=1Tohn'读入各观测值
Input#1,strT1,strT2,h(i),s(i)
be(i)=Order(strT1):
en(i)=Order(strT2)'给起终点数组排序
Nexti
'显示读入的数据
Text1.Text=Text1.Text&"读入的水准网数据:
"&vbCrLf
Text1.Text=Text1.Text&"已知点"&nn&"个,未知点"&un&"个,观测值"&hn&"个。
"&vbCrLf
Text1.Text=Text1.Text&"网中涉及的点名有:
"
Fori=1Totn
Text1.Text=Text1.Text&Pname(i)&","
Nexti
Text1=Text1&vbCrLf
Text1=Text1&"已知点高程为:
"&vbCrLf
Fori=1Tonn
Text1=Text1&Pname(i)&"的高程为:
"&Hknown(i)&vbCrLf
Nexti
Text=Text1&"各观测值分别为:
"&vbCrLf
Text1=Text1&"起点"&""&"终点"&""&"高差观测值"&"距离观测值"&vbCrLf
Fori=1Tohn
Text1=Text1&Pname(be(i))&""&Pname(en(i))&""&Format(h(i),"0.000")&""&Format(s(i),"0.000")&vbCrLf
Nexti
Close#1'不要忘记关闭文件
EndSub
2点名-序号转换函数
'点名-序号转换函数
PublicFunctionOrder(strAsString)AsInteger
Dimi%
Fori=1Totn
Ifstr=Pname(i)Then
Order=i
ExitFor
EndIf
Nexti
EndFunction
3计算近似高程
'计算近似高程
PrivateSubmnuHeight_Click()
Dimi%,j%
Fori=1Toun
Forj=1Tohn
Ifbe(j)=nn+iAnden(j) Hknown(nn+i)=Hknown(en(j))-h(j) ExitFor EndIf Ifen(j)=nn+iAndbe(j) Hknown(nn+i)=Hknown(be(j))+h(j) ExitFor EndIf Nextj Nexti '显示近似高程计算结果 Text1=Text1&"近似高程计算结果: "&vbCrLf Fori=1Toun Text1=Text1&Pname(i+nn)&": "&Format(Hknown(i+nn),"0.000")&vbCrLf Nexti EndSub 4列立误差方程 PrivateSubmnuEqu_Click() Dimi%,j% ReDimA(1Tohn,1Toun),L(1Tohn),P(1Tohn,1Tohn) '对每个观测值列误差方程 Fori=1Tohn Ifen(i)>nnThenA(i,en(i)-nn)=1'若终点未知,则给终点对应的系数矩阵元素赋值 Ifbe(i)>nnThenA(i,be(i)-nn)=-1'若起点未知,则给起点对应的系数矩阵元素赋值 L(i)=-(Hknown(en(i))-Hknown(be(i))-h(i))'根据起终点计算常数项 P(i,i)=1/s(i)'以距离的倒数为权 Nexti '显示误差方程 Text1=Text1&"列立的误差方程: "&vbCrLf Fori=1Tohn Forj=1Toun Text1=Text1&A(i,j)&"" Nextj Text1=Text1&""&Format(L(i),"0.0000")&vbCrLf Nexti Text1=Text1&"权矩阵: "&vbCrLf Fori=1Tohn Forj=1Tohn Text1=Text1&P(i,j)&"" Nextj Text1=Text1&vbCrLf Nexti EndSub 5平差计算 '平差计算 PrivateSubmnuAdj_Click() Dimi%,j% ReDimX(1Toun) InAdjustA,P,L,X'调用间接平差的通用过程求解 '计算并显示高程平差结果 Text1=Text1&"平差计算结果: "&vbCrLf Text1=Text1&"点号初始高程(m)高程改正数(m)平差后高程(m)"&vbCrLf Fori=1Toun Text1=Text1&Pname(nn+i)&""&Format(Hknown(nn+i),"0.0000") Hknown(nn+i)=Hknown(nn+i)+X(i) Text1=Text1&""&Format(X(i),"0.0000")&""&Format(Hknown(nn+i),"0.0000")&vbCrLf Nexti Text1=Text1&vbCrLf EndSub 6平差计算中需要的模板 '矩阵转置的通用过程 PublicSubMatrixTrans(A,c) Dimi%,j% DimR1%,C1% OnErrorResumeNext C1=UBound(A,2)-LBound(A,2)+1 IfErrThen MsgBox"输入的矩阵维数不对! " ExitSub EndIf R1=UBound(A,1)-LBound(A,1)+1 ReDimc(1ToC1,1ToR1) Fori=1ToR1 Forj=1ToC1 c(j,i)=A(i,j) Nextj Nexti EndSub '矩阵相加的通用过程 PublicSubMatrixPlus(A,b,c) Dimi%,j% DimR1%,C1%,R2%,C2% OnErrorResumeNext C1=UBound(A,2)-LBound(A,2)+1 IfErrThen MsgBox"第一个矩阵维数不对! " ExitSub EndIf OnErrorResumeNext C2=UBound(b,2)-LBound(b,2)+1 IfErrThen MsgBox"第二个矩阵维数不对! " ExitSub EndIf R1=UBound(A,1)-LBound(A,1)+1 R2=UBound(b,1)-LBound(b,1)+1 IfR1<>R2OrC1<>C2Then MsgBox"输入的两个矩阵维数不等,不能相加! " ExitSub EndIf ReDimc(1Tom,1Ton)AsDouble Fori=1Tom Forj=1Ton c(i,j)=A(i,j)+b(i,j) Nextj Nexti EndSub '矩阵相减的通用过程 PublicSubMatrixMinus(A,b,c) Dimi%,j% DimR1%,C1%,R2%,C2% OnErrorResumeNext C1=UBound(A,2)-LBound(A,2)+1 IfErrThen MsgBox"第一个矩阵维数不对! " ExitSub EndIf OnErrorResumeNext C2=UBound(b,2)-LBound(b,2)+1 IfErrThen MsgBox"第二个矩阵维数不对! " ExitSub EndIf R1=UBound(A,1)-LBound(A,1)+1 R2=UBound(b,1)-LBound(b,1)+1 IfR1<>R2OrC1<>C2Then MsgBox"输入的两个矩阵维数不等,不能相减! " ExitSub EndIf ReDimc(1Tom,1Ton)AsDouble Fori=1Tom Forj=1Ton c(i,j)=A(i,j)-b(i,j) Nextj Nexti EndSub '矩阵相乘: 输入矩阵或数Qa、Qb,自动识别它们的维数,并输出它们的乘积Qn PublicSubMatrix_Multy(Qn,Qa,Qb) Dimia%,ib%,ic% Dimai%,bi%,ci% Dime1AsBoolean,e2AsBoolean,e3AsBoolean,e4AsBoolean,e5AsBoolean,e6AsBoolean,e7AsBoolean OnErrorResumeNext'看Qa是不是一维数组 ic=UBound(Qa,2)-LBound(Qa,2) IfErrThene1=True OnErrorResumeNext'看Qa是不是一维数组 ib=UBound(Qb,2)-LBound(Qb,2) IfErrThene2=True Ife1=FalseAnde2=FalseThen'二维矩阵相乘 Forai=LBound(Qa,1)ToUBound(Qa,1) Forbi=LBound(Qb,2)ToUBound(Qb,2) Forci=LBound(Qa,2)ToUBound(Qa,2) Qn(ai,bi)=Qn(ai,bi)+Qa(ai,ci)*Qb(ci,bi) Nextci Nextbi Nextai ElseIfe1=TrueAnde2=FalseThen OnErrorResumeNext ia=UBound(Qa)-LBound(Qa) IfErrThene6=True Ife6Then'数乘以二维矩阵 Forai=LBound(Qb,1)ToUBound(Qb,1) Forbi=LBound(Qb,2)ToUBound(Qb,2) Qn(ai,bi)=Qa*Qb(ai,bi) Nextbi Nextai Else'一维矩阵乘以二维矩阵 Forci=LBound(Qb,2)ToUBound(Qb,2) Forai=LBound(Qa,1)ToUBound(Qa,1) Qn(ci)=Qn(ci)+Qa(ai)*Qb(ai,ci) Nextai Nextci EndIf ElseIfe1=FalseAnde2=TrueThen OnErrorResumeNext ic=UBound(Qb)-LBound(Qb) IfErrThene7=True Ife7Then'二维矩阵乘以数 Forai=LBound(Qa,1)ToUBound(Qa,1) Forbi=LBound(Qa,2)ToUBound(Qa,2) Qn(ai,bi)=Qa(ai,bi)*Qb Nextbi Nextai Else'二维矩阵乘以一维矩阵 Forai=LBound(Qa,1)ToUBound(Qa,1) Forbi=LBound(Qa,2)ToUBound(Qa,2) Qn(ai)=Qn(ai)+Qa(ai,bi)*Qb(bi) Nextbi Nextai EndIf Else DimerrTAsInteger OnErrorResumeNext'结果是否是一个数 errT=UBound(Qn) IfErrThene3=True Ife3Then'一维矩阵乘以一维矩阵得一个数 Forai=LBound(Qa,1)ToUBound(Qa,1) Forbi=LBound(Qa,2)ToUBound(Qa,2) Qn=Qn+Qa(ai)*Qb(bi) Nextbi Nextai ExitSub EndIf OnErrorResumeNext'是否是数乘一维矩阵 ia=UBound(Qa)-LBound(Qa) IfErrThene4=True Ife4Then Forbi=LBound(Qa,2)ToUBound(Qa,2) Qn(bi)=Qa*Qb(bi) Nextbi ExitSub EndIf OnErrorResumeNext'是否是一维矩阵乘数 ib=UBound(Qb)-LBound(Qb) IfErrThene5=True Ife5Then Forai=LBound(Qa,1)ToUBound(Qa,1) Qn(ai)=Qa(ai)*Qb Nextai ExitSub EndIf '一维矩阵相乘结果是二维矩阵 Forai=LBound(Qa,1)ToUBound(Qa,1) Forbi=LBound(Qa,2)ToUBound(Qa,2) Qn(ai,bi)=Qa(ai)*Qb(bi)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告