您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 水准网平差(VB代码)
1(误差理论与测量平差础)课程设计报告系(部):土木工程系实习单位:山东交通学院班级:测绘084学生姓名:田忠星学号080712420带队教师:夏小裕﹑周宝兴时间:10年12月13日到10年12月19日山东交通学院2目录:1.摘要P32.概述P33.水准网间接平差程序设计思路P3—P44.平差程序流程图P4—P65.程序源代码及说明P7—P236.计算结果P23—P267.总结P26—P273一:摘要在测量工作中,为了能及时发现错误和提高测量成果的精度,常作多余观测,这就产生了平差问题。在一个平差问题中,当所选的独立参数Xˆ的个数等于必要观测数t时,可将每个观测值表达成这t个参数的函数,组成观测方程,这种以观测方程为函数模型的平差方法,就是间接平差。二:概述:该课程设计的主要目是对水准网进行间接平差,在输入数据后依次计算高程近似值﹑误差方程和平差计算。三:水准网间接平差程序设计思路1.根据平差问题的性质,选择t个独立量(既未知点的高程)作为参数Xˆ2.将每一个观测量的平差值(既观测的高程差值)分别表达成3.由误差方程系数B和自由项组成法方程,法方程个数等于参数的个数t;4.解算法方程,求出参数Xˆ,计算参数(高程)的平差值Xˆ=X0+xˆ;5.由误差方程计算V,求出观测量(高差)平差值6.评定精度单位权中误差VLLVLL4平差值函数的中误差四:平差程序流程图1.已知数据的输入需要输入的数据包括水准网中已知点数﹑未知点数以及这些点的点号,已知高程和高差观测值﹑距离观测值。程序采用文件方式进行输入,约定文件输入的格式如下:第一行:已知点数﹑未知点数﹑观测值个数第二行:点号(已知点在前,未知点在后)第三行:已知高程(顺序与上一行的点号对应)第四行:高差观测值,按“起点点号,终点点号。高差观测值,距离观测值”的顺序输入。本节中使用的算例的数据格式如下2,3,71,2,3,4,55.016,6.0161,3,1.359,1.11,4,2.009,1.72,3,0.363,2.3,ˆ20sunPVVrPVVTT.ˆˆˆ0ˆQ52,4,1.012,2.73,4,0.657,2.43,5,0.238,1.45,2,-0.595,2.62.平差计算过程(1)近似高程的计算。用一个数组来存储高程近似值,已知点的高程放在这个数组的开头,然后按照点号输入顺序依次搜索涉及该店的高差观测值,看该高差涉及的另一点是否已知,若未知,则检查下一个高差观测值,若已知,则可以计算出当前未知点的高差近似值,并放入高程近似值数组,依次类推,直到所有未知点的高程近似值都被求出为止。(2)列立观测值的误差方程。根据各观测值的起止点信息及高差﹑距离值和误差方程的系数矩阵﹑权矩阵和常数项的各个元素赋值。(3)平差计算。通过间接平差通用过程进行平差计算,该过程将系数矩阵数组A﹑权矩阵数组P和常数向量数组L以参数的方式传入,通过计算,把平差结果存放在解向量数组X中,以参数的形式传出。3.计算结果的输出计算的中间结果和最后结果都实时在文本框中显示,最后还可以把文本框中的内容保存在文本文件中。4.界面设计6根据以上分析,本程序采用菜单组织程序,用文本框显示数据的输入﹑计算和输出情况。由于涉及到打开和保存文件的操作,所以还需要一个通用对话框。(1)菜单设计。本程序的菜单结构如表所示。标题名称快捷键文件(&File)mnuFile—…打开数据mnuOpen—…保存结果mnuSave—…—aa—…退出mnuExitCtrl+E计算(&Calc)mnuCalc—…近似高程mnuHeight—…误差方程mnuEqu—…平差计算mnuAdj—(2)窗体﹑文本框和通用对话框。在主窗体上绘制1个文本框控件和一个通用对话框控件,并按照下图设置属性(文本框的Name属性改为txtShow)对象属性值Text1TextText1MultiLineTrue7Form1Caption水准网间接平差CommonDialog1NameCDg1Text1设计好属性后,调整控件和窗体的大小和位置,以方便美观为好。五:程序源代码及说明程序中涉及的公共变量及其说明如下:DimstrFileNameAsStringDimnn%,un%,tn%,hn%'已知点个数,未知点个数,总点数,观测值个数DimPname()AsString'点名数组DimHknown()AsDouble'已知高程数组,存放已知点高程和高程近似值Dimbe%(),en%()'观测值的起点和终点编号数组,存储的是点序号Dimh#(),s#()'高差观测值数组和距离观测值数组DimA#(),X#(),P#(),L#()'间接平差的系数阵、解向量、权阵和常数向量1.数据输入单击“文件→打开文件”命令,弹出打开对话框,待用户选取了文件以后,程序开始读取已知数据,具体代码如下8PrivateSubmnuOpen_Click()DimiAsInteger'循环变量DimstrT1AsString,strT2AsStringCDg1.Filter=文本文件(*.txt)|*.txt|所有文件(*.*)|*.*CDg1.ShowOpen'打开对话框strFileName=CDg1.FileName'获得选中的文件名和路径OpenstrFileNameForInputAs#1'打开文件Input#1,nn,un,hn'读入已知点个数,未知点个数,观测值个数tn=nn+unReDimPname(1Totn),Hknown(1Totn)ReDimh(1Tohn),s(1Tohn),be(1Tohn),en(1Tohn)Fori=1Totn'读入点名Input#1,Pname(i)NextiFori=1Tonn'读入已知高程Input#1,Hknown(i)NextiFori=1Tohn'读入各观测值Input#1,strT1,strT2,h(i),s(i)be(i)=Order(strT1):en(i)=Order(strT2)'给起终点数组排序Nexti'显示读入的数据txtShow.Text=txtShow.Text&读入的水准网数据:&vbCrLftxtShow.Text=txtShow.Text&已知点&nn&个,未知点&un&个,观测值&hn&个。&vbCrLftxtShow.Text=txtShow.Text&网中涉及的点名有:Fori=1TotntxtShow.Text=txtShow.Text&Pname(i)&,NextitxtShow.Text=txtShow.Text&vbCrLftxtShow.Text=txtShow.Text&已知点高程为:&vbCrLfFori=1TonntxtShow.Text=txtShow.Text&Pname(i)&的高程为:&Hknown(i)&vbCrLfNextitxtShow.Text=txtShow.Text&各观测值分别为:&vbCrLftxtShow.Text=txtShow.Text&起点&&终点&&高差观测值&距离观测值&vbCrLfFori=1TohntxtShow.Text=txtShow.Text&Pname(be(i))&&Pname(en(i))&&Format(h(i),0.000)&&Format(s(i),0.000)&vbCrLfNextiClose#1'不要忘记关闭文件EndSub9其中Order()函数是根据点号(字符串)获得一个点的序号(数值)的自定义函数,之所以要进行这样的排序,是因为在输入和输出时需使用字符串类型的点号,而在程序计算时。数组的下标元素需要整数型的点号。该函数定义如下:'点名-序号转换函数PublicFunctionOrder(strAsString)AsIntegerDimi%Fori=1TotnIfstr=Pname(i)ThenOrder=iExitForEndIfNextiEndFunction2.高程近似值的计算输入数据后,点击“计算→近似高程”,程序根据已知数据计算未知点的高程近似值,并将计算的中间结果显示在文本框中,代码如下:'计算近似高程PrivateSubmnuHeight_Click()Dimi%,j%Fori=1TounForj=1TohnIfbe(j)=nn+iAnden(j)nn+iThen'找到一个起点相同且终点已知的观测值Hknown(nn+i)=Hknown(en(j))-h(j)ExitForEndIfIfen(j)=nn+iAndbe(j)nn+iThen'找到一个终点相同且起点已知的观测值Hknown(nn+i)=Hknown(be(j))+h(j)ExitForEndIfNextj10Nexti'显示近似高程计算结果txtShow.Text=txtShow.Text&近似高程计算结果:&vbCrLfFori=1TountxtShow.Text=txtShow.Text&Pname(i+nn)&:&Format(Hknown(i+nn),0.000)&vbCrLfNextiEndSub3.列立误差方程点击“计算→误差方程”命令,程序根据输入的数据给误差方程的系数矩阵﹑权矩阵和常数向量赋值,并将其结果显示在文本框中,代码如下:'列立误差方程:给A、P、L赋值PrivateSubmnuEqu_Click()Dimi%,j%ReDimA(1Tohn,1Toun),L(1Tohn),P(1Tohn,1Tohn)'对每个观测值列误差方程Fori=1TohnIfen(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'显示误差方程txtShow.Text=txtShow.Text&列立的误差方程:&vbCrLfFori=1TohnForj=1TountxtShow.Text=txtShow.Text&A(i,j)&NextjtxtShow.Text=txtShow.Text&&Format(L(i),0.0000)&vbCrLfNextitxtShow.Text=txtShow.Text&权矩阵:&vbCrLfFori=1TohnForj=1TohntxtShow.Text=txtShow.Text&P(i,j)&Nextj11txtShow.Text=txtShow.Text&vbCrLfNextiEndSub4.计算高程平差值和高程中误差和高差中误差点击“计算→平差计算”命令,程序调用间接平差通用过程求解误差方程,并求出高程平差值﹑高程中误差和高差中误差,显示在文本框中,代码如下:'平差计算PrivateSubmnuAdj_Click()Dimi%,j%,VtP#(),VtPV#(),z#,AtP#(),AtPA#(),r(),Naan#(),b()Dimo()AsDoubleReDimX(1Toun)ReDimo(1Toun,1To1)ReDims(1Tohn,1To1)ReDimAX(1Tohn,1To1)ReDimV(1Tohn,1To1)ReDimVtP(1To1,1Tohn)ReDimVtPV(1To1,1To1)ReDimAtP(1Toun,1Tohn)ReDimAtPA(1Toun,1Toun)ReDimbAt(1Toun,1Tohn)ReDimAbAt(1Tohn,1Tohn)ReDimr(1Toun,1Toun)ReDimb(1Toun,1Toun)InAdjustA,P,L,X'调用间接平差的通用过程求解'计算并显示高程平差结果txtShow.Text=txtShow.Text&平差计算结果:&vbCrLftxtShow.Text=txtShow.Text&点号
本文标题:水准网平差(VB代码)
链接地址:https://www.777doc.com/doc-4224948 .html