《水准网平差(VB代码)》由会员分享,可在线阅读,更多相关《水准网平差(VB代码)(27页珍藏版)》请在金锄头文库上搜索。
1、(误差理论与测量平差础)课 程 设 计 报 告系(部): 土木工程系 实习单位: 山东交通学院 班 级: 测绘084 学生姓名: 田忠星 学号 带队教师: 夏小裕周宝兴 时间: 10 年 12 月 13日 到 10 年 12 月 19日山东交通学院目录:1.摘要 P32.概述 P33.水准网间接平差程序设计思路P3P44. 平差程序流程图 P4P65. 程序源代码及说明 P7P236. 计算结果 P23P267. 总结 P26P27一:摘要在测量工作中,为了能及时发现错误和提高测量成果的精度,常作多余观测,这就产生了平差问题。在一个平差问题中,当所选的独立参数的个数等于必要观测数t时,可将每个
2、观测值表达成这t个参数的函数,组成观测方程,这种以观测方程为函数模型的平差方法,就是间接平差。二:概述:该课程设计的主要目是对水准网进行间接平差,在输入数据后依次计算高程近似值误差方程和平差计算。三:水准网间接平差程序设计思路1根据平差问题的性质,选择t个独立量(既未知点的高程)作为参数2. 将每一个观测量的平差值(既观测的高程差值)分别表达成 3由误差方程系数B和自由项组成法方程,法方程个数等于参数的个数t ;4. 解算法方程,求出参数,计算参数(高程)的平差值=X0 + ;5由误差方程计算V,求出观测量(高差)平差值 6.评定精度单位权中误差平差值函数的中误差四:平差程序流程图1 已知数据
3、的输入需要输入的数据包括水准网中已知点数未知点数以及这些点的点号,已知高程和高差观测值距离观测值。程序采用文件方式进行输入,约定文件输入的格式如下:第一行:已知点数未知点数观测值个数第二行:点号(已知点在前,未知点在后)第三行:已知高程(顺序与上一行的点号对应)第四行:高差观测值,按“起点点号,终点点号。高差观测值,距离观测值”的顺序输入。本节中使用的算例的数据格式如下2,3,71,2,3,4,55.016,6.0161,3,1.359,1.11,4,2.009,1.72,3,0.363,2.32,4,1.012,2.73,4,0.657,2.43,5,0.238,1.45,2,-0.595,
4、2.62.平差计算过程(1)近似高程的计算。用一个数组来存储高程近似值,已知点的高程放在这个数组的开头,然后按照点号输入顺序依次搜索涉及该店的高差观测值,看该高差涉及的另一点是否已知,若未知,则检查下一个高差观测值,若已知,则可以计算出当前未知点的高差近似值,并放入高程近似值数组,依次类推,直到所有未知点的高程近似值都被求出为止。(2)列立观测值的误差方程。根据各观测值的起止点信息及高差距离值和误差方程的系数矩阵权矩阵和常数项的各个元素赋值。(3)平差计算。通过间接平差通用过程进行平差计算,该过程将系数矩阵数组A权矩阵数组P和常数向量数组L以参数的方式传入,通过计算,把平差结果存放在解向量数组
5、X中,以参数的形式传出。3计算结果的输出计算的中间结果和最后结果都实时在文本框中显示,最后还可以把文本框中的内容保存在文本文件中。4界面设计根据以上分析,本程序采用菜单组织程序,用文本框显示数据的输入计算和输出情况。由于涉及到打开和保存文件的操作,所以还需要一个通用对话框。(1) 菜单设计。本程序的菜单结构如表所示。标题名称快捷键文件(&File) mnuFile 打开数据mnuOpen保存结果mnuSaveaa退出mnuExitCtrl+E计算(&Calc) mnuCalc近似高程mnuHeight 误差方程mnuEqu平差计算mnuAdj(2) 窗体文本框和通用对话框。在主窗体上绘制1个文
6、本框控件和一个通用对话框控件,并按照下图设置属性(文本框的Name属性改为txtShow)对象属性值Text1TextText1MultiLineTrueForm1Caption水准网间接平差CommonDialog1NameCDg1Text1设计好属性后,调整控件和窗体的大小和位置,以方便美观为好。五:程序源代码及说明程序中涉及的公共变量及其说明如下:Dim strFileName As StringDim nn%, un%, tn%, hn% 已知点个数,未知点个数,总点数,观测值个数Dim Pname() As String 点名数组Dim Hknown() As Double 已知高程
7、数组,存放已知点高程和高程近似值Dim be%(), en%() 观测值的起点和终点编号数组,存储的是点序号Dim h#(), s#() 高差观测值数组和距离观测值数组Dim A#(), X#(), P#(), L#() 间接平差的系数阵、解向量、权阵和常数向量1. 数据输入单击“文件打开文件”命令,弹出打开对话框,待用户选取了文件以后,程序开始读取已知数据,具体代码如下Private Sub mnuOpen_Click() Dim i As Integer 循环变量 Dim strT1 As String, strT2 As String CDg1.Filter = 文本文件(*.txt)|
8、*.txt|所有文件(*.*)|*.* CDg1.ShowOpen 打开对话框 strFileName = CDg1.FileName 获得选中的文件名和路径 Open strFileName For Input As #1 打开文件Input #1, nn, un, hn 读入已知点个数,未知点个数,观测值个数 tn = nn + un ReDim Pname(1 To tn), Hknown(1 To tn) ReDim h(1 To hn), s(1 To hn), be(1 To hn), en(1 To hn) For i = 1 To tn 读入点名 Input #1, Pname
9、(i) Next i For i = 1 To nn 读入已知高程 Input #1, Hknown(i) Next i For i = 1 To hn 读入各观测值 Input #1, strT1, strT2, h(i), s(i) be(i) = Order(strT1): en(i) = Order(strT2) 给起终点数组排序 Next i 显示读入的数据 txtShow.Text = txtShow.Text & 读入的水准网数据: & vbCrLf txtShow.Text = txtShow.Text & 已知点 & nn & 个,未知点 & un & 个,观测值 & hn
10、& 个。 & vbCrLf txtShow.Text = txtShow.Text & 网中涉及的点名有: For i = 1 To tn txtShow.Text = txtShow.Text & Pname(i) & , Next i txtShow.Text = txtShow.Text & vbCrLf txtShow.Text = txtShow.Text & 已知点高程为: & vbCrLf For i = 1 To nn txtShow.Text = txtShow.Text & Pname(i) & 的高程为: & Hknown(i) & vbCrLf Next i txtSh
11、ow.Text = txtShow.Text & 各观测值分别为: & vbCrLf txtShow.Text = txtShow.Text & 起点 & & 终点 & & 高差观测值 & 距离观测值 & vbCrLf For i = 1 To hn txtShow.Text = txtShow.Text & Pname(be(i) & & Pname(en(i) & & Format(h(i), 0.000) & & Format(s(i), 0.000) & vbCrLf Next iClose #1 不要忘记关闭文件End Sub其中Order()函数是根据点号(字符串)获得一个点的序号
12、(数值)的自定义函数,之所以要进行这样的排序,是因为在输入和输出时需使用字符串类型的点号,而在程序计算时。数组的下标元素需要整数型的点号。该函数定义如下:点名序号转换函数Public Function Order(str As String) As Integer Dim i% For i = 1 To tn If str = Pname(i) Then Order = i Exit For End If Next iEnd Function2. 高程近似值的计算输入数据后,点击“计算近似高程”,程序根据已知数据计算未知点的高程近似值,并将计算的中间结果显示在文本框中,代码如下:计算近似高程Private Sub mnuHeight_Click() Dim i%, j% For i = 1 To un For j = 1 To hn If be(j) = nn + i And en(j) nn + i Then 找到