水准网平差(VB代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(误差理论与测量平差础)
课程设计报告
系(部):土木工程系
实习单位:山东交通学院
班级:测绘084
学生姓名:田忠星学号0
带队教师:夏小裕﹑周宝兴
时间:10 年12 月13日到10 年12 月19日
山东交通学院
目录:
1.摘要P3
2.概述P3
3.水准网间接平差程序设计思路P3—P4
4. 平差程序流程图P4—P6
5. 程序源代码及说明P7—P23
6. 计算结果P23—P26
7. 总结P26—P27 一:摘要
在测量工作中,为了能及时发现错误和提高测量成果的精度,常作多余观测,这就产生了平差问题。在一个平差问题中,当所选的独立参数Xˆ的个数等于必要观测数t时,可将每个观测值表达成这t个参数的函数,组成观测方程,这种以观测方程为函数模型的平差方法,就是间接平差。
二:概述:
该课程设计的主要目是对水准网进行间接平差,在输入数据后依次计算高程近似值﹑误差方程和平差计算。 三:水准网间接平差程序设计思路
1.根据平差问题的性质,选择t 个独立量(既未知点的高程)
作为参数X
ˆ 2. 将每一个观测量的平差值(既观测的高程差值)分别表达成 3.由误差方程系数B 和自由项组成法方程,法方程个数等于参数的个数t ;
4. 解算法方程,求出参数X ˆ,计算参数(高程)的平差值 X
ˆ=X 0 +x ˆ ; 5.由误差方程计算V ,求出观测量(高差)平差值 6.评定精度
单位权中误差 平差值函数的中误差
四:平差程序流程图 1. 已知数据的输入
需要输入的数据包括水准网中已知点数﹑未知点数以及这些点的点号,已知高程和高差观测值﹑距离观测值。程序采用文件方式进行输入,约定文件输入的格式如下: 第一行:已知点数﹑未知点数﹑观测值个数 第二行:点号(已知点在前,未知点在后)
V L L +=∧
第三行:已知高程(顺序与上一行的点号对应)
第四行:高差观测值,按“起点点号,终点点号。高差观测值,距离观测值”的顺序输入。
本节中使用的算例的数据格式如下
2,3,7
1,2,3,4,5
5.016,
6.016
1,3,1.359,1.1
1,4,2.009,1.7
2,3,0.363,2.3
2,4,1.012,2.7
3,4,0.657,2.4
3,5,0.238,1.4
5,2,-0.595,2.6
2.平差计算过程
(1)近似高程的计算。用一个数组来存储高程近似值,已知点的高程放在这个数组的开头,然后按照点号输入顺序依次搜索涉及该店的高差观测值,看该高差涉及的另一点是否已知,若未知,则检查下一个高差观测值,若已知,则可以计算出当前未知点的高差近似值,并放入高程近似值数组,依次类推,直到所有未知点的高程近似值都被求出为止。
(2)列立观测值的误差方程。根据各观测值的起止点信息及高
差﹑距离值和误差方程的系数矩阵﹑权矩阵和常数项的各个元素赋值。
(3)平差计算。通过间接平差通用过程进行平差计算,该过程将系数矩阵数组A﹑权矩阵数组P和常数向量数组L以参数的方式传入,通过计算,把平差结果存放在解向量数组X中,以参数的形式传出。
3.计算结果的输出
计算的中间结果和最后结果都实时在文本框中显示,最后还可以把文本框中的内容保存在文本文件中。
4.界面设计
根据以上分析,本程序采用菜单组织程序,用文本框显示数据的输入﹑计算和输出情况。由于涉及到打开和保存文件的操作,所以还需要一个通用对话框。
(1)菜单设计。本程序的菜单结构如表所示。
(2)窗体﹑文本框和通用对话框。在主窗体上绘制1个文本框控件和一个通用对话框控件,并按照下图设置属性
(文本框的Name属性改为txtShow)
Text1设计好属性后,调整控件和窗体的大小和位置,以方便美观为好。
五:程序源代码及说明
程序中涉及的公共变量及其说明如下:
Dim strFileName As String
Dim nn%, un%, tn%, hn% '已知点个数,未知点个数,总点数,观测值个数
Dim Pname() As String '点名数组
Dim Hknown() As Double '已知高程数组,存放已知点高程和高程近似值
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)|*.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(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 & "个。" & vbCrLf
txtShow.Text = txtShow.Text & " 网中涉及的点名有:"