文档库 最新最全的文档下载
当前位置:文档库 › 水准网平差(VB代码)

水准网平差(VB代码)

水准网平差(VB代码)
水准网平差(VB代码)

(误差理论与测量平差础)

课程设计报告

系(部):土木工程系

实习单位:山东交通学院

班级:测绘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 & " 网中涉及的点名有:"

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

txtShow.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 i

Close #1 '不要忘记关闭文件

End Sub

其中Order()函数是根据点号(字符串)获得一个点的序号(数值)的自定义函数,之所以要进行这样的排序,是因为在输入和输出时需使用字符串类型的点号,而在程序计算时。数组的下标元素需要整数型的点号。该函数定义如下:

'点名-序号转换函数

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 i

End Function

2.高程近似值的计算

输入数据后,点击“计算→近似高程”,程序根据已知数据计算未知点的高程近似值,并将计算的中间结果显示在文本框中,代码如下:

'计算近似高程

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 '找到一个起点相同且终点已知的观测值

Hknown(nn + i) = Hknown(en(j)) - h(j)

Exit For

End If

If en(j) = nn + i And be(j) < nn + i Then '找到一个终点相同且起点已知的观测值

Hknown(nn + i) = Hknown(be(j)) + h(j)

Exit For

End If

Next j

Next i

'显示近似高程计算结果

txtShow.Text = txtShow.Text & " 近似高程计算结果:" & vbCrLf

For i = 1 To un

txtShow.Text = txtShow.Text & Pname(i + nn) & ":" & Format(Hknown(i + nn), "0.000") & vbCrLf

Next i

End Sub

3.列立误差方程

点击“计算→误差方程”命令,程序根据输入的数据给误差方程的系数矩阵﹑权矩阵和常数向量赋值,并将其结果显示在文本框中,代码如下:

'列立误差方程:给A、P、L赋值

Private Sub mnuEqu_Click()

Dim i%, j%

ReDim A(1 To hn, 1 To un), L(1 To hn), P(1 To hn, 1 To hn)

'对每个观测值列误差方程

For i = 1 To hn

If en(i) > nn Then A(i, en(i) - nn) = 1 '若终点未知,则给终点对应的系数矩阵元素赋值

If be(i) > nn Then A(i, be(i) - nn) = -1 '若起点未知,则给起点对应的系数矩阵元素赋值

L(i) = -(Hknown(en(i)) - Hknown(be(i)) - h(i)) '根据起终点计算常数项

P(i, i) = 1 / s(i) '以距离的倒数为权

Next i

'显示误差方程

txtShow.Text = txtShow.Text & " 列立的误差方程:" & vbCrLf

For i = 1 To hn

For j = 1 To un

txtShow.Text = txtShow.Text & A(i, j) & " "

Next j

txtShow.Text = txtShow.Text & " " & Format(L(i), "0.0000") & vbCrLf

Next i

txtShow.Text = txtShow.Text & "权矩阵:" & vbCrLf

For i = 1 To hn

For j = 1 To hn

txtShow.Text = txtShow.Text & P(i, j) & " "

Next j

txtShow.Text = txtShow.Text & vbCrLf

Next i

End Sub

4.计算高程平差值和高程中误差和高差中误差

点击“计算→平差计算”命令,程序调用间接平差通用过程求解误差方程,并求出高程平差值﹑高程中误差和高差中误差,显示在文本框中,代码如下:

'平差计算

Private Sub mnuAdj_Click()

Dim i%, j%, VtP#(), VtPV#(), z#, AtP#(), AtPA#(), r(), Naan#(), b()

Dim o() As Double

ReDim X(1 To un)

ReDim o(1 To un, 1 To 1)

ReDim s(1 To hn, 1 To 1)

ReDim AX(1 To hn, 1 To 1)

ReDim V(1 To hn, 1 To 1)

ReDim VtP(1 To 1, 1 To hn)

ReDim VtPV(1 To 1, 1 To 1)

ReDim AtP(1 To un, 1 To hn)

ReDim AtPA(1 To un, 1 To un)

ReDim bAt(1 To un, 1 To hn)

ReDim AbAt(1 To hn, 1 To hn)

ReDim r(1 To un, 1 To un)

ReDim b(1 To un, 1 To un)

InAdjust A, P, L, X '调用间接平差的通用过程求解

'计算并显示高程平差结果

txtShow.Text = txtShow.Text & "平差计算结果:" & vbCrLf

txtShow.Text = txtShow.Text & "点号初始高程(m) 高程改正数(m) 平差后高程(m)" & vbCrLf

For i = 1 To un

txtShow.Text = txtShow.Text & Pname(nn + i) & " " & Format(Hknown(nn + i), "0.0000")

Hknown(nn + i) = Hknown(nn + i) + X(i)

txtShow.Text = txtShow.Text & " " & Format(X(i), "0.0000") & " " & Format(Hknown(nn + i), "0.0000") & vbCrLf

Next i

txtShow.Text = txtShow.Text & vbCrLf

'计算改正数V

For i = 1 To un

For j = 1 To 1

o(i, j) = X(i)

Next j

Next i

Matrix_Multy AX, A, o

For i = 1 To un

For j = 1 To 1

s(i, j) = L(i) * 1000

Next j

Next i

MatrixMinus AX, s, V

For i = 1 To hn

For j = 1 To 1

V(i, j) = AX(i, j) * 1000 - s(i, j)

Next j

Next i

'计算并显示单位权中误差

MatrixTrans V, Vt

txtShow.Text = txtShow.Text & vbCrLf

Matrix_Multy VtP, Vt, P

txtShow.Text = txtShow.Text & vbCrLf

Matrix_Multy VtPV, VtP, V

For i = 1 To 1

For j = 1 To 1

z = VtPV(i, j)

Next j

Next i

σ0 = Sqr(z / (hn - nn))

txtShow.Text = txtShow.Text & "单位权中误差:(mm)" & vbCrLf

txtShow.Text = txtShow.Text & Format(σ0, "0.0000")

txtShow.Text = txtShow.Text & vbCrLf

'计算未知点的高程中误差

MatrixTrans A, At

Matrix_Multy AtP, At, P

Matrix_Multy AtPA, AtP, A

For i = 1 To un

For j = 1 To un

r(i, j) = AtPA(i, j)

Next j

Next i

Call jzqn(r(), b())

txtShow.Text = txtShow.Text & "点号高程中误差:(mm)" & vbCrLf

For i = 1 To un

z = b(i, i)

zz = σ0 * Sqr(z)

txtShow.Text = txtShow.Text & Pname(nn + i) & " "

txtShow.Text = txtShow.Text & " " & Format(zz, "0.0000") & vbCrLf

Next i

'计算高差平差值的中误差

MatrixTrans A, At

Matrix_Multy bAt, b, At

Matrix_Multy AbAt, A, bAt

txtShow.Text = txtShow.Text & "起点" & " " & "终点" & " " & "高差平差值的中误差(mm)" & vbCrLf

For i = 1 To hn

y = AbAt(i, i)

yy = σ0 * Sqr(y)

txtShow.Text = txtShow.Text & Pname(be(i)) & " " & Pname(en(i)) & " " & Format(yy, "0.0000") & vbCrLf

Next i

End Sub

在此程序中用到了过程jzqn()代码如下:

Public Sub jzqn(Qa(), na())

Dim A()

n = UBound(Qa, 1)

ReDim na(n, n)

ReDim A(n, 2 * n)

For i = 1 To n

For j = 1 To n

A(i, j) = Qa(i, j)

Next j

Next i

For i = 1 To n

For j = n + 1 To 2 * n

If j - i = n Then

A(i, j) = 1

Else

A(i, j) = 0

End If

Next j

Next i

For i = 1 To n

If A(i, i) = 0 Then

For Q = i To n

If A(Q, i) <> 0 Then

For W = i To 2 * n

zj = A(i, W)

A(i, W) = A(Q, W)

A(Q, W) = zj

Next W

Exit For

End If

Next Q

If Q > n Then MsgBox "此矩阵不可逆": Exit Sub End If

For K = 2 * n To i Step -1

A(i, K) = A(i, K) / A(i, i)

Next K

For j = i + 1 To n

If A(j, i) <> 0 Then

For K = 2 * n To i Step -1

A(j, K) = A(j, K) / A(j, i) - A(i, K)

Next K

End If

Next j

Next i

For i = n To 1 Step -1

If A(i, i) = 0 Then

For Q = i - 1 To 1 Step -1

If A(Q, i) <> 0 Then

For W = i To 2 * n

zj = A(i, W)

A(i, W) = A(Q, W)

A(Q, W) = zj

Next W

Exit For

End If

Next Q

End If

For K = 2 * n To i Step -1

A(i, K) = A(i, K) / A(i, i)

Next K

For j = i - 1 To 1 Step -1

If A(j, i) <> 0 Then

xxx = A(j, i)

For K = 2 * n To 1 Step -1

A(j, K) = A(j, K) / xxx - A(i, K)

Next K

End If

Next j

Next i

For i = 1 To n

For j = 1 To n

na(i, j) = A(i, j + n)

Next j

Next i

End Sub

5.保存﹑退出

点击“文件→保存结果”命令,将文本框中的内容保存在指定的文件中,代码如下:

'保存计算结果

Private Sub mnuSave_Click()

CDg1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"

CDg1.ShowSave

strFileName = CDg1.FileName

Open strFileName For Output As #1

Print #1, txtShow.Text

Close #1

End Sub

点击“文件→退出”命令,退出程序。代码如下:

Private Sub mnuExit_Click()

End

End Sub

6.此程序用到的通用过程mdlAdjust()代码如下:

'矩阵转置的通用过程

Public Sub MatrixTrans(A, c)

Dim i%, j%

Dim R1%, C1%

On Error Resume Next

C1 = UBound(A, 2) - LBound(A, 2) + 1

If Err Then

MsgBox "输入的矩阵维数不对!"

Exit Sub

End If

R1 = UBound(A, 1) - LBound(A, 1) + 1

ReDim c(1 To C1, 1 To R1)

For i = 1 To R1

For j = 1 To C1

c(j, i) = A(i, j)

Next j

Next i

End Sub

'矩阵相加的通用过程

Public Sub MatrixPlus(A, b, c)

Dim i%, j%

Dim R1%, C1%, R2%, C2%

On Error Resume Next

C1 = UBound(A, 2) - LBound(A, 2) + 1

If Err Then

MsgBox "第一个矩阵维数不对!"

Exit Sub

End If

On Error Resume Next

C2 = UBound(b, 2) - LBound(b, 2) + 1

If Err Then

MsgBox "第二个矩阵维数不对!"

Exit Sub

End If

R1 = UBound(A, 1) - LBound(A, 1) + 1

R2 = UBound(b, 1) - LBound(b, 1) + 1

If R1 <> R2 Or C1 <> C2 Then

MsgBox "输入的两个矩阵维数不等,不能相加!"

Exit Sub

End If

ReDim c(1 To m, 1 To n) As Double

For i = 1 To m

For j = 1 To n

c(i, j) = A(i, j) + b(i, j)

Next j

Next i

End Sub

'矩阵相减的通用过程

Public Sub MatrixMinus(A, b, c)

Dim i%, j%

Dim R1%, C1%, R2%, C2%

On Error Resume Next

C1 = UBound(A, 2) - LBound(A, 2) + 1

If Err Then

MsgBox "第一个矩阵维数不对!"

Exit Sub

End If

On Error Resume Next

C2 = UBound(b, 2) - LBound(b, 2) + 1

If Err Then

MsgBox "第二个矩阵维数不对!"

Exit Sub

End If

R1 = UBound(A, 1) - LBound(A, 1) + 1

R2 = UBound(b, 1) - LBound(b, 1) + 1

If R1 <> R2 Or C1 <> C2 Then

MsgBox "输入的两个矩阵维数不等,不能相减!"

Exit Sub

End IF

ReDim c(1 To m, 1 To n) As Double

For i = 1 To m

For j = 1 To n

c(i, j) = A(i, j) - b(i, j)

Next j

Next i

End Sub

'矩阵相乘:输入矩阵或数Qa、Qb,自动识别它们的维数,并输出它们的乘积Qn

Public Sub Matrix_Multy(Qn, Qa, Qb)

Dim ia%, ib%, ic%

Dim ai%, bi%, ci%

Dim e1 As Boolean, e2 As Boolean, e3 As Boolean, e4 As Boolean, e5 As Boolean, e6 As Boolean, e7 As Boolean

On Error Resume Next '看Qa是不是一维数组

ic = UBound(Qa, 2) - LBound(Qa, 2)

If Err Then e1 = True

On Error Resume Next '看Qa是不是一维数组

ib = UBound(Qb, 2) - LBound(Qb, 2)

If Err Then e2 = True

If e1 = False And e2 = False Then '二维矩阵相乘

For ai = LBound(Qa, 1) To UBound(Qa, 1)

For bi = LBound(Qb, 2) To UBound(Qb, 2)

For ci = LBound(Qa, 2) To UBound(Qa, 2)

Qn(ai, bi) = Qn(ai, bi) + Qa(ai, ci) * Qb(ci, bi) Next ci

Next bi

Next ai

ElseIf e1 = True And e2 = False Then

On Error Resume Next

ia = UBound(Qa) - LBound(Qa)

If Err Then e6 = True

If e6 Then '数乘以二维矩阵

For ai = LBound(Qb, 1) To UBound(Qb, 1)

For bi = LBound(Qb, 2) To UBound(Qb, 2)

Qn(ai, bi) = Qa * Qb(ai, bi)

Next bi

Next ai

Else '一维矩阵乘以二维矩阵

For ci = LBound(Qb, 2) To UBound(Qb, 2)

For ai = LBound(Qa, 1) To UBound(Qa, 1)

Qn(ci) = Qn(ci) + Qa(ai) * Qb(ai, ci)

Next ai

Next ci

End If

ElseIf e1 = False And e2 = True Then

On Error Resume Next

ic = UBound(Qb) - LBound(Qb)

If Err Then e7 = True

If e7 Then '二维矩阵乘以数

For ai = LBound(Qa, 1) To UBound(Qa, 1)

For bi = LBound(Qa, 2) To UBound(Qa, 2)

Qn(ai, bi) = Qa(ai, bi) * Qb

Next bi

Next ai

Else '二维矩阵乘以一维矩阵

For ai = LBound(Qa, 1) To UBound(Qa, 1)

For bi = LBound(Qa, 2) To UBound(Qa, 2)

Qn(ai) = Qn(ai) + Qa(ai, bi) * Qb(bi)

Next bi

Next ai

End If

Else

Dim errT As Integer

On Error Resume Next '结果是否是一个数

errT = UBound(Qn)

If Err Then e3 = True

If e3 Then '一维矩阵乘以一维矩阵得一个数

For ai = LBound(Qa, 1) To UBound(Qa, 1)

For bi = LBound(Qa, 2) To UBound(Qa, 2)

Qn = Qn + Qa(ai) * Qb(bi)

Next bi

Next ai

Exit Sub

End If

On Error Resume Next '是否是数乘一维矩阵

ia = UBound(Qa) - LBound(Qa)

If Err Then e4 = True

If e4 Then

For bi = LBound(Qa, 2) To UBound(Qa, 2)

Qn(bi) = Qa * Qb(bi)

Next bi

Exit Sub

End If

On Error Resume Next '是否是一维矩阵乘数

ib = UBound(Qb) - LBound(Qb)

If Err Then e5 = True

If e5 Then

For ai = LBound(Qa, 1) To UBound(Qa, 1)

Qn(ai) = Qa(ai) * Qb

Next ai

Exit Sub

End If

'一维矩阵相乘结果是二维矩阵

For ai = LBound(Qa, 1) To UBound(Qa, 1)

For bi = LBound(Qa, 2) To UBound(Qa, 2)

Qn(ai, bi) = Qa(ai) * Qb(bi)

Next bi

Next ai

End If

End Sub

'矩阵相乘的通用过程

Public Sub MatrixMulti(A, b, c)

Dim i%, j%, K%

Dim R1%, C1%, R2%, C2%

On Error Resume Next

C1 = UBound(A, 2) - LBound(A, 2) + 1

If Err Then

MsgBox "第一个矩阵维数不对!"

Exit Sub

End If

On Error Resume Next

C2 = UBound(b, 2) - LBound(b, 2) + 1

If Err Then

MsgBox "第二个矩阵维数不对!"

Exit Sub

End If

R1 = UBound(A, 1) - LBound(A, 1) + 1

R2 = UBound(b, 1) - LBound(b, 1) + 1

If C1 <> R2 Then

MsgBox "输入的两个矩阵大小不对,不能相乘!"

Exit Sub

End If

m = R1: s = C1: n = C2

ReDim c(1 To m, 1 To n) As Double

For i = 1 To m

For j = 1 To n

For K = 1 To s

c(i, j) = c(i, j) + A(i, K) * b(K, j)

Next K

Next j

Next i

End Sub

'列选主元法Guass约化求解线性方程组

Public Sub MajorInColGuass(A, b, X)

Dim Row%, Col%, n% '矩阵大小

Dim iStep%, iRow%, iCol% '循环变量

Dim L() As Double '各行的约化系数

'计算并检查矩阵的大小

Row = UBound(A, 1) - LBound(A, 1) + 1

Col = UBound(A, 2) - LBound(A, 2) + 1

If Row <> Col Then

MsgBox "方程组的系数矩阵有误!"

Exit Sub

End If

'准备约化过程的变量和数组

n = UBound(b) - LBound(b) + 1

If n <> Row Then

MsgBox "方程组的系数矩阵与常数项大小不符!"

Exit Sub

End If

ReDim L(2 To Row) As Double

Dim sumAX As Double, iPos%, temp#

'约化过程

For iStep = 1 To n - 1

'列选主元

iPos = 0

For iRow = iStep + 1 To n

If Abs(A(iRow, iStep)) > Abs(A(iStep, iStep)) Then

iPos = iRow

End If

Next iRow

If iPos > iStep Then '需要换主元

For iCol = iStep To n

temp = A(iStep, iCol)

A(iStep, iCol) = A(iPos, iCol)

A(iPos, iCol) = temp

Next iCol

temp = b(iStep)

b(iStep) = b(iPos)

b(iPos) = temp

End If

'约化过程

For iRow = iStep + 1 To n

L(iRow) = A(iRow, iStep) / A(iStep, iStep)

For iCol = iStep To n

A(iRow, iCol) = A(iRow, iCol) - L(iRow) * A(iStep, iCol) Next iCol

b(iRow) = b(iRow) - L(iRow) * b(iStep)

Next iRow

ShowMatrix A

Next iStep

'回代过程

X(n) = b(n) / A(n, n)

For iRow = n - 1 To 1 Step -1

sumAX = 0

For iCol = n To iRow + 1 Step -1

sumAX = sumAX + A(iRow, iCol) * X(iCol)

Next iCol

X(iRow) = (b(iRow) - sumAX) / A(iRow, iRow)

Next iRow

End Sub

Public Sub ShowMatrix(tt)

Dim i%, j%, n%, m%

m = UBound(tt, 1) - LBound(tt, 1) + 1

n = UBound(tt, 2) - LBound(tt, 2) + 1

For i = 1 To m

For j = 1 To n

Debug.Print tt(i, j),

Next j

Debug.Print

Next i

End Sub

'通用的间接平差解算过程:输入系数矩阵A、权矩阵P、常数向量L和解向量X,求出X,并通过参数传出去

Public Sub InAdjust(A, P, L, X)

Dim a1%, a2%, p1%, p2%, L1%, x1% '输入矩阵或向量的大小

Dim At() As Double, AtP() As Double, Naa#(), W() As Double '几个中间矩阵'计算并检查输入矩阵或向量的大小

On Error Resume Next

a1 = UBound(A, 1) - LBound(A, 1) + 1

If Err Then

MsgBox "系数矩阵A大小错误!"

Exit Sub

End If

On Error Resume Next

a2 = UBound(A, 2) - LBound(A, 2) + 1

If Err Then

MsgBox "系数矩阵A大小错误!"

Exit Sub

End If

On Error Resume Next

L1 = UBound(L) - LBound(L) + 1

If Err Then

MsgBox "常数向量L大小错误!"

Exit Sub

End If

On Error Resume Next

x1 = UBound(X) - LBound(X) + 1

If Err Then

MsgBox "解向量X大小错误!"

Exit Sub

End If

On Error Resume Next

p1 = UBound(P, 1) - LBound(P, 1) + 1

If Err Then

MsgBox "权矩阵P大小错误!"

Exit Sub

End If

On Error Resume Next

测绘程序设计—实验八 水准网平差程序设计报告

《测绘程序设计(https://www.wendangku.net/doc/4110903241.html,)》 上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号:0405090204 姓名:代娅琴 2012年4月29日

实验八平差程序设计基础 一、实验目的 ?巩固过程的定义与调用 ?巩固类的创建与使用 ?巩固间接平差模型及平差计算 ?掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例:

近似高程计算:

3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权; (5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法 5.输入数据格式示例

实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void); public: CString strName;//点名 CString strID;//点号 float H; bool flag;//标记是否已经计算出近似高程值,若计算出则为,否则为}; class CDhObs { public: CDhObs(void); ~CDhObs(void); public: LevelControlPoint* cpBackObj;//后视点 LevelControlPoint* cpFrontObj;//前视点 double ObsValue;//高差值 double Dist;//测站的距离 }; #include"StdAfx.h" #include"LevelControlPoint.h" LevelControlPoint::LevelControlPoint(void) {

水准网平差(VB代码)

(误差理论与测量平差础) 课程设计报告 系(部):土木工程系 实习单位:山东交通学院 班级:测绘084 学生姓名:田忠星学号080712420 带队教师:夏小裕﹑周宝兴 时间: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?=X0 +x?; 5.由误差方程计算V,求出观测量(高差)平差值6.评定精度 单位权中误差 V L L+ = ∧ V L L+ = ∧

平差值函数的中误差 四:平差程序流程图 1. 已知数据的输入 需要输入的数据包括水准网中已知点数﹑未知点数以及这些点的点号,已知高程和高差观测值﹑距离观测值。程序采用文件方式进行输入,约定文件输入的格式如下: 第一行:已知点数﹑未知点数﹑观测值个数 第二行:点号(已知点在前,未知点在后) 第三行:已知高程(顺序与上一行的点号对应) 第四行:高差观测值,按“起点点号,终点点号。高差观测值,距离观测值”的顺序输入。 本节中使用的算例的数据格式如下 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 ,?20s u n PV V r PV V T T +-==σ. ???0????σσQ =

水准网按条件平差算例

在图 表9-1 试求: (1)1P 、2P 及3P 点高程之最或然值; (2)1P 、2P 点间平差后高差的中误差。 解:(1)列条件方程式,不符值以“mm ”为单位。 已知3,7==t n ,故437=-=r ,其条件方程式为 ??? ? ???=--+=-+--=-+--=++-01030707742643765521v v v v v v v v v v v v (2)列函数式: 555v h x F +== 故 15=f 0764321======f f f f f f (3)组成法方程式。 1)令每公里观测高差的权为1,按1/i i s p =,将条件方程系数及其与权倒数之乘积填于表9-2中。 2)由表9-2数字计算法方程系数,并组成法方程式:

????????????----------5221251021411013????????????d c b a k k k k +????? ???????---1377=0 表9-2 条件方程系数表 (4)法方程式的解算。 1)解算法方程式在表9-3中进行。 2)[]pvv 计算之检核。 [][]wk pvv -= []467.35=-wk 由表9-3中解得[]47.35-=pvv ,两者完全一致,证明表中解算无误。 (5)计算观测值改正数及平差值见表9-4。 (6)计算321,,P P P 点高程最或然值。 359.3611=+=x H H A P m 012.3722=+=x H H A P m

表9-4 改正数与平差值计算表 (7)精度评定。 1)单位权(每公里观测高差)中误差 2)21,P P 点间平差后高差中误差 mm 0.34 47.35±=±=μmm P m F F 2.252.00.31 ±=±=±=μ

平差易软件数据输入实例

导线实例 这就是一条符合导线的测量数据与简图,A、B、C与D就是已知坐标点,2、3与4就是待测的控制点。 测站点角度(°′″) 距离(米) X (米) Y(米) B 8345、8709 5216、6021 A 85、30211 1474、4440 7396、2520 5530、0090 2 254、32322 1424、7170 3 131、04333 1749、3220 4 272、20202 1950、4120 C 244、18300 4817、6050 9341、4820 D 4467、5243 8404、7624 导线原始数据表 导线图如下: 导线图 在平差易软件中输入以上数据,如下图“数据输入”所示:

数据输入 在测站信息区中输入A、B、C、D、2、3与4号测站点,其中A、B、C、D为已知坐标点,其属性为10,其坐标如“原始数据表”;2、3、4点为待测点,其属性为00,其它信息为空。如果要考虑温度、气压对边长的影响,就需要在观测信息区中输入每条边的实际温度、气压值,然后通过概算来进行改正。 根据控制网的类型选择数据输入格式,此控制网为边角网,选择边角格式。 如下图“选择格式”所示: 选择格式 在观测信息区中输入每一个测站点的观测信息,为了节省空间只截取观测信息的部分表格示意图,如下表 B、D作为定向点,它没有设站,所以无观测信息,但在测站信息区中必须输入它们的坐标。 以A为测站点,B为定向点时(定向点的方向值必须为零),照准2号点的数据输入如下图“测站A的观测信息”所示: 测站A的观测信息 以C为测站点,以4号点为定向点时,照准D点的数据输入如下图“测站C的观测信息”所示: 测站C的观测信息 2号点作为测站点时,以A为定向点,照准3号点,如下图“测站2的观测信息”所示: 测站2的观测信息 以3号点为测站点,以2号点为定向点时,照准4号点的数据输入如下图“测站3的观测信息”所示: 测站3的观测信息 以4号点为测站点,以3号点为定向点时,照准C点的数据输入如下图“测站4的观测信息”所示:

水准网间接平差程序设计(C++)

//////////////////////////////////////////////////// // visual C++6.0 编译通过 // //////////////////////////////////////////////////// /////////////////////////////////////////////////// // 参考资料 // // 部分网络资料 // // 宋力杰《测量平差程序设计》 // //连壁《基于matlab的控制网平差程序设计》 // /////////////////////////////////////////////////// #include #include #include #include #include using namespace std; //////////////////////////////////////////////////////////////////////////class class SZWPC { private: int gcz_zs; //高差总数 int szd_zs; //总点数 int yz_szd_zs; //已知点数 double m_pvv; //[pvv] int *qsd_dh; //高差起点号 int *zd_dh; //高差终点号 char **dm; //点名地址数组 double *gcz; //观测值数组 double *szd_gc; //高程值数组 double *P; //观测值的权 double *ATPA,*ATPL; //法方程系数矩阵与自由项 double *dX; //高程改正数、平差值 double *V; //残差 double m_mu; //单位权中误差 public: SZWPC(); ~SZWPC(); int ij(int i,int j);//对称矩阵下标计算函数 bool inverse(double a[],int n);//对称正定矩阵求逆(仅存下三角元素)(参考他人)

测绘程序设计实验八水准网平差程序设计报告完整版

测绘程序设计实验八水准网平差程序设计报告 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

《测绘程序设计》上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号: 04 姓名:代娅琴 2012年4月29日

实验八平差程序设计基础 一、实验目的 巩固过程的定义与调用 巩固类的创建与使用 巩固间接平差模型及平差计算 掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例:

近似高程计算: 3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权; (5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法

5.输入数据格式示例 实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void);

public: CString strName;trName=pstrData[0]; m_pKnownPoint[i].strID=pstrData[0]; m_pKnownPoint[i].H=_tstof(pstrData[1]); m_pKnownPoint[i].flag=1;trName=pstrData[i]; m_pUnknownPoint[i].strID=pstrData[i]; m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=Sea rchPointUsingID(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID) {return &m_pKnownPoint[i];} } return NULL; } trID==ID) {return &m_pUnknownPoint[i];} } return NULL; } LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID) { LevelControlPoint* cp; cp=SearchKnownPointUsingID(ID); if(cp==NULL) cp=SearchUnknownPointUsingID(ID); return cp; } void AdjustLevel::ApproHeignt(void)lag!=1) { pFrontObj->strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpBackObj->flag==1 ) { =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/ m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue; m_pUnknownPoint[i].flag=1; break; } } if(m_pUnknownPoint[i].flag!=1)pBackObj- >strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpFrontObj->flag==1 ) { =m_pDhObs[j].cpFrontObj->H-m_pDhObs[j].HObsValue;

水准路线平差计算程序

水准路线平差计算程序 一.基本概念 在施工过程中,水准测量贯穿着始终 水准测量一般分为三种类型 1.附合水准线路 从一高级水准点起,经过1、2、3…..n一系列测站测设到另一高级水准点 2.闭合水准线路 从一高级水准点起,经过1、2、3…..n一系列测站测设到原起点高级水准点 3.支水准线路 从一高级水准点起,经过1、2、3…..n一系列测站测设到另一未知水准点在施工过程中,我们一般常用到附合水准、闭合水准,因为这两种水准测量可以检验我们测量成果的精度和正确性。支水准则不然,所以不建议使用支水准。本程序重点考虑附合水准、闭合水准两种情况。 二.程序清单(主程序文件名:SZPC) 适用于CASIO fx-4850p A〝BMA〞:B〝BMB〞: C〝∑(NI,DI)〞: D〝∑(HAB)〞 A:〝fh=〞:E=D+A-B◢ Lbl 1 {FG}:F〝NN,DN〞:G〝hN〞 A:〝BMN〞:H=-EE÷C+G+A◢ A=H Goto 1 适用于CASIO fx-4800p A〝BMA〞:B〝BMB〞: C〝∑(NI,DI)〞: D〝∑(HAB)〞 E〝fh〞=D+A-B◢ Lbl 1 {FG}:F〝NN,DN〞:G〝hN〞 H〝BMN〞=-EE÷C+G+A◢ A=H Goto 1 三.程序算例及相关操作说明 1.程序算例(例一) 已知某附合水准路线的测量资料,见图一和表6-3,求各待定点的高程。 图一

2.操作步骤 程序文件名:SZPC 输入: BMA=56.345 BMB=59.039 ∑(NI,DI)=54 ∑(HAB)=2.741 出:fh=0.047 输入NN,DN=12,Hn=2.785;出:BMN=59.120 输入NN,DN=18,Hn=-4.369;出:BMN=54.735 输入NN,DN=13,Hn=1.980;出:BMN=56.704 输入NN,DN=11,Hn=2.345;出:BMN=59.039 3.程序算例(例二) 已知某闭合水准路线的测量资料,见图二和表6-4,求各待定点的高程。 图二

MATLAB水准网间接平差课程作业程序

条件平差 A=[1 -1 0 0 1 0 0;0 0 1 -1 1 0 0;0 0 1 0 0 1 1;0 1 0 -1 0 0 0]; Q=diag(s); W=zeros(4,1); W(1)=h(1)-h(2)+h(5); W(2)=h(3)-h(4)+h(5); W(3)=h(3)+h(6)+h(7); W(4)=h(2)-h(4)+H(1)-H(2); W=W.*1000; Naa=A*Q*(A'); K=-1.*inv(Naa)*W; V=Q*(A')*K; L=h'+V./1000; X=zeros(1,3); X(1)=H(1)+L(1); X(2)=H(1)+L(2); X(3)=H(2)-L(7); ZWC=sqrt(V'*inv(Q)*V/4); QLL=Q-Q*A'*inv(Naa)*A*Q; ZWC_h5=ZWC*sqrt(QLL(5,5)); 间接平差 h1=1.359; h2=2.009; h3=0.363; h4=1.012; h5=0.657; h6=0.238; h7=-0.595; H1=5.016 H2=6.016 h=[h1 h2 h3 h4 h5 h6 h7]' s=[1.1 1.7 2.3 2.7 2.4 1.4 2.6]' B=[1 0 0 ;0 1 0; 1 0 0;0 1 0 ; -1 1 0 ; -1 0 1 ;0 0 -1 ] p=diag(1./s) l=[0;0;4;3;7;2;0] W=B'*p*l Nbb=B'*p*B x=inv(Nbb)*W V=(B*x-l) H=h+V/1000 Q=inv(Nbb) n=7;

水准网平差c++代码

水准网平差 结果 #include #include #include #include #define max 50 class CMatrix { public: CMatrix(){row=0; column=0;}; // 默认构造函数 CMatrix(int i, int j){row=i;column=j;} // 构造函数一 CMatrix(const CMatrix& m); // 复制构造函数 ~CMatrix(void){/*cout<<"谢谢使用,矩阵所占空间以释放!"<

水准网的条件平差

目录 目录 (1) 观测误差 (2) 摘要: (2) 关键词: (2) 引言 (3) 1水准测量 (4) 1.1水准测量的原理 (4) 1.2水准网 (5) 2条件平差 (6) 2.1衡量精度的指标 (6) 2.2条件平差的原理 (8) 3水准网的平差 (14) 3.1必要观测与多余观测 (14) 3.2条件方程 (14) 3.3条件平差法方程式 (14) 3.4条件平差的精度评定 (15) 3.5水准网的条件平差 (18) 致谢 (20) 参考文献 (21)

观测误差 —由观测者、外界环境引起的偶然误差 学生: xxx 指导教师:xxx 摘要: 对一系列带有偶然误差的观测值,采用合理的的方法消除它们间的不符值,得出未知量的最可靠值;以及评定测量成果的精度。 关键词: 偶然误差;观测值;精度

引言 测量工作中,要确定地面点的空间位置,就必须进行高程测量,确定地面点的高程。几何水准测量是高程测量中最基本、最精密的一种方法。通过测量仪器,工具等任何手段获得的以数字形式表示的空间信息,即观测量。然而,测量是一个有变化的过程,受仪器、观测值、外界环境因素的影响,观测的结果与客观上存在的一个能反映其真正大小的数值,即真值(理论值),有一定的差异。可以说在测量中产生误差是不可避免的。所以,观测值不能准确得到,在测量上称这种差异为观测误差。根据其对观测结果影响的性质,可将误差分为系统误差和偶然误差两种。前者可以通过在观测过程中采取一定的措施和在观测结果中加入改正数,消除或减弱它的影响,使其达到忽略不计的程度。但是,观测结果中,不可避免地包含了后者,它是不可消除的,但可以选择较好的观测条件或采用适当的数据处理方法减弱它。现在我们要讨论的就是采用适当的数据处理方法来减弱其对水准测量中的影响。

水准网平差软件使用说明

电子水准仪数据处理及平差软件 用户操作手册 中铁二院工程集团有限责任公司 二零零九年

目录 1引言 (1) 1.1 编写目的 (1) 1.2 背景 (1) 2软件的功能和性能 (1) 2.1 软件功能和适用范围 (1) 2.1.1软件的主要功能有: (1) 2.1.2软件的主要输出内容包括: (1) 2.2 软件的性能 (2) 3运行环境 (2) 3.1 硬件设备 (2) 3.2 支持软件 (2) 3.3 数据存储 (2) 4软件安装说明 (3) 5“电子水准仪数据处理及平差软件”使用说明 (3) 5.1选择工作路径 (3) 5.2“电水数据处理”菜单 (4) 5.2.1设置转换参数 (4) 5.2.2生成高差文件 (5) 5.2.3生成平差文件 (6) 5.2.4输出观测手簿 (6) 5.3“高程平差处理”菜单 (6) 5.3.1选择平差文件 (7) 5.3.2闭合差计算 (7) 5.3.3网平差处理 (8) 5.4“结果显示”菜单 ........................................................................ 错误!未定义书签。6“电子水准仪数据处理与平差软件”文件说明 (8)

1引言 1.1编写目的 《“电子水准仪数据处理及平差软件”用户操作手册》是高速铁路沉降观测评估软件之一“电子水准仪数据处理及平差软件”的使用说明,能够指导测量技术人员正确使用“电子水准仪数据处理及平差软件”。 1.2背景 为了满足高速铁路线下沉降变形观测与评估的需要,适应铁路施工与评估单位对其数据处理的要求,中铁二院工程集团有限责任公司研制了自主版权的“电子水准仪数据处理及平差软件”。 2软件的功能和性能 2.1软件功能和适用范围 电子水准仪数据处理及平差软件,是专为我国高速铁路线下沉降观测评估而设计的电子水准仪数据处理与高程平差计算软件。 2.1.1软件的主要功能有: 1、根据需要选择工作路径; 2、根据设置生成高差文件; 3、生成平差文件; 4、输出观测手簿; 5、闭合环自动搜索与闭合差计算; 6、网平差处理与成果输出; 2.1.2软件的主要输出内容包括: 1、可输出高程控制网测段实测高差数据;

平差易软件数据输入实例

导线实例 这是一条符合导线的测量数据和简图,A、B、 C 和 D 是已知坐标点,2、3 和 4 是待测的控制点。 导线图如下: 导线图 在平差易软件中输入以上数据,如下图“数据输入”所示:

数据输入 在测站信息区中输入A、B、C、D、2、3和4号测站点,其中A、B、C、D 为已知坐标点,其属性为10,其坐标如“原始数据表”;2、3、4 点为待测点,其属性为00,其它信息为空。如果要考虑温度、气压对边长的影响,就需要在观测信息区中输入每条边的实际温度、气压值,然后通过概算来进行改正。 根据控制网的类型选择数据输入格式,此控制网为边角网,选择边角格式如下图“选择格式”所示: 选择格式 在观测信息区中输入每一个测站点的观测信息,为了节省空间只截取观测信息的部分表格示意图,如下表 B、D 作为定向点,它没有设站,所以无观测信息,但在测站信息区中必须输入它们的坐标。 以A为测站点,B为定向点时(定向点的方向值必须为零),照准2号点的数据输入如下图“测站A 的观测信息”所示: A 的观测信息 以C 为测站点,以4 号点为定向点时,照准D 点的数据输入如下图“测站C 的观测信息”所示: C 2 2 以3 号点为测站点,以2 号点为定向点时,照准4 号点的数据输入如下图“测站3 的观测信息”所示: 3 以4 号点为测站点,以3 号点为定向点时,照准C 点的数据输入如下图“测站4 的观测信息”所示:

测站 4 的观测信息 说明:①数据为空或前面已输入过时可以不输入(对向观测例外) ②在电子表格中输入数据时,所有零值可以省略不输。 以上数据输入完后,点击菜单“文件另存为”,将输入的数据保存为平差易数据格式文件(格式内容详见附录A ): [STATION] (测站信息) B,10,8345.870900,5216.602100 A,10,7396.252000,5530.009000 C, 10,4817.605000,9341.482000 D, 10,4467.524300,8404.762400 2,00 3,00 4,00 [OBSER] (观测信息) A,B,,1000.0000 A,2,85.302110,1474.4440 C,4 C,D,244.183000,1000.0000 2,A 2,3,254.323220,1424.7170 3,2 3,4,131.043330,1749.3220 4,3 4,C,272.202020,1950.4120 上面[STATION] (测站点)是测站信息区中的数据,[OBSER] (照准点)是观测信息区中的数据。 水准实例 这是一条符合水准的测量数据和简图,A和B是已知高程点,2、3和4是待测的

测绘程序设计—实验八 水准网平差程序设计报告

《测绘程序设计》 上机实验报告 (Visual C++.Net) 班级:测绘0901班 学号: 04 姓名:代娅琴 2012年4月29日 实验八平差程序设计基础 一、实验目的 巩固过程的定义与调用 巩固类的创建与使用 巩固间接平差模型及平差计算 掌握平差程序设计的基本技巧与步骤 二、实验内容 水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。 1.水准网间接平差模型: 2.计算示例: 近似高程计算: 3.水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权;

(5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值; (8)精度评定; (9)输出平差结果。 4.水准网高程近似值计算算法 5.输入数据格式示例 实验代码: #pragma once class LevelControlPoint { public: LevelControlPoint(void); ~LevelControlPoint(void); public: CString strName;trName=pstrData[0]; m_pKnownPoint[i].strID=pstrData[0]; m_pKnownPoint[i].H=_tstof(pstrData[1]); m_pKnownPoint[i].flag=1;trName=pstrData[i]; m_pUnknownPoint[i].strID=pstrData[i]; m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=SearchPointUsingI D(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID) {return &m_pKnownPoint[i];} } return NULL; } trID==ID) {return &m_pUnknownPoint[i];} } return NULL; } LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID) { LevelControlPoint* cp; cp=SearchKnownPointUsingID(ID); if(cp==NULL) cp=SearchUnknownPointUsingID(ID); return cp; } void AdjustLevel::ApproHeignt(void)lag!=1) { pFrontObj->strID==m_pUnknownPoint[i].strID) && m_pDhObs[j].cpBackObj->flag==1 ) { =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/ m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue; m_pUnknownPoint[i].flag=1;

水准网间接平差程序设计(C++)

水准网间接平差程序设 计(C++) -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

//////////////////////////////////////////////////// // visual C++ 编译通过 // //////////////////////////////////////////////////// /////////////////////////////////////////////////// // 参考资料 // // 部分网络资料 // // 宋力杰《测量平差程序设计》 // //姚连壁《基于matlab的控制网平差程序设计》 // /////////////////////////////////////////////////// #include #include #include <> #include<> #include using namespace std; //////////////////////////////////////////////////////////////////////////class class SZWPC { private: int gcz_zs; //高差总数 int szd_zs; //总点数 int yz_szd_zs; //已知点数 double m_pvv; //[pvv] int *qsd_dh; //高差起点号 int *zd_dh; //高差终点号 char **dm; //点名地址数组 double *gcz; //观测值数组 double *szd_gc; //高程值数组 double *P; //观测值的权 double *ATPA,*ATPL; //法方程系数矩阵与自由项 double *dX; //高程改正数、平差值 double *V; //残差 double m_mu; //单位权中误差 public: SZWPC(); ~SZWPC(); int ij(int i,int j);//对称矩阵下标计算函数

多功能测量平差软件

工程控制网平差软件介绍 工程控制网平差软件(Engineering Control Network Adjustment Software,简称:ECNAS)是一套针对常见工程控制网,带有多种数据处理功能并提供多种定权方案,能进行方差一致性检验以及具有较高运算效率的控制网数据处理软件,能实现常见工程施工控制测量和建(构)筑物变形监测数据的精准化、自动化处理。下文将从软件的主要架构与功能、软件的对比测试、软件的主要优势和与软件相关的学术论文等方便进行详细介绍。 1 主要架构和功能 ECNAS包括“项目设置”、“水准网数据处理”、“平面网数据处理”、“全站仪三维网数据处理”、“GPS网数据处理”、“坐标转换”和“工具”等七部分,其中四大类常见工程控制网(水准网、平面网、全站仪三维网和GPS网)的数据预处理和平差计算是本软件的核心内容。见下图1所示。 图1 ECNAS的核心架构 1.1 项目设置 (1)新建工程:根据用户指定位置新建工程集合,集合内部自动分成若干子集。 (2)打开工程:方便用户对上次建立的工程项目进行查看、修改和另存。

(3)参数设置:对控制网的验前精度、仪器的标称精度、控制网的等级、工程椭球、投影面、中央子午线和显著性水平等进行设置,如下图2所示。 图2 ECNAS参数设置对话框 1.2 水准网数据处理 (1)导入观测文件:读取主流电子水准仪(Trimble DINI型或Leica DNA 型)的各种观测形式(BF、aBF、BFFB和aBFFB)的原始文件,如图3所示。 图3 导入数据对话框 (2)生成高差文件:根据软件提示,自动执行用户指令,处理转点,生成高差文件(如下图4所示),并自动生成“按测站数定权”、“按距离定权”和“分类定权”这三种定权方法的高程网平差文件。

控制测量学水准网按条件平差算例

在图h 5 h 2 A P 2 h 1 P 1 h 6 h 7P 3 h 4 h 3 B 表9-1 观测号 观测高差(m ) 路线长度(km ) 观测号 观测高差(m ) 路线长D (km ) 已知高程(m ) 1 2 3 4 1 1 2 2 5 6 7 1 1 2 000.35=A H 000.36=H H 试求: (1)1P 、2P 及3P 点高程之最或然值; (2)1P 、2P 点间平差后高差的中误差。 解:(1)列条件方程式,不符值以“mm ”为单位。 已知3,7==t n ,故437=-=r ,其条件方程式为 ??? ? ? ?? =--+=-+--=-+--=++-01030707742643765521v v v v v v v v v v v v (2)列函数式: 555v h x F +== 故 15=f 0764321======f f f f f f (3)组成法方程式。 1)令每公里观测高差的权为1,按1/i i s p =,将条件方程系数及其与权倒数之乘积填于表9-2中。 2)由表9-2数字计算法方程系数,并组成法方程式:

????????????----------5221251021411013????????????d c b a k k k k +????? ???????---1377=0 表9-2 条件方程系数表 观测号 a b c d s s ' 1 1 1 1 2 -1 1 0 0 3 -1 -1 -1 4 -1 1 0 0 5 1 -1 0 1 1 6 -1 1 0 0 7 1 -1 0 0 ∑ 1 -1 -1 1 0 0 1 1 1 观测号 p 1 p a p b p c p d p s p f p s ' 1 1 1 1 1 2 1 -1 1 3 2 -2 -2 -2 4 2 -2 2 5 1 1 -1 1 1 6 1 -1 1 7 2 2 -2 ∑ 1 -3 1 -1 -1 1 0 0 (4)法方程式的解算。 1)解算法方程式在表9-3中进行。 2)[]pvv 计算之检核。 [][]wk pvv -= []467.35=-wk 由表9-3中解得[]47.35-=pvv ,两者完全一致,证明表中解算无误。 (5)计算观测值改正数及平差值见表9-4。 (6)计算321,,P P P 点高程最或然值。 359.3611=+=x H H A P m 012.3722=+=x H H A P m f

平差课程设计水准网,导线网解算解读

《测量平差课程设计》 设计报告 设计名称:测量平差课程设计 学院名称:矿业工程学院 专业班级:测绘12-2 学生姓名:雷蕾 学号: 2012020782 指导教师:张红华 测绘工程教研室 2014年8月

一.课程设计的目的 《测量平差》是一门理论与实践并重的课程,测量平差课程设计是测量数据处理理论学习的一个重要实践环节,是在学生学习了专业基础理论课《误差理论与测量平差基础》课程后进行的一门实践课程,其目的是增强学生对测量平差基础理论的理解,牢固掌握测量平差的基本原理和公式,熟悉测量数据处理的基本原理和方法,灵活准确地应用于解决各类数据处理的实际问题,并能用所学的计算机基础知识,编制简单的计算程序。 二.课程设计题目内容描述和要求 1.设计的任务 (1)该课的课程设计安排在理论学习结束之后进行的,主要是平面控制网和高程控制网严密平差,时间为一周。 (2)通过课程设计,培养学生运用本课程基本理论知识和技能,分析和解决本课程范围内的实际工程问题的能力,加深对课程理论的理解与应用。 (3)在指导老师的指导下,要求每个学生独立完成本课程设计的全部内容。 2.课程设计要求 2.1基本要求: 测量平差课程设计要求每一个学生必须遵守课程设计的具体项目的要求,独立完成设计内容,并上交设计报告。在学习知识、培养能力的过程中,树立严谨、求实、勤奋、进取的良好学风。 课程设计前学生应认真复习教材有关内容和《测量平差》课程设计指导书,务必弄清基本概念和本次课程设计的目的、要求及应注意的事项,以保证保质保量的按时完成设计任务。 2.2具体设计项目内容及要求: 2.2.1高程控制网严密平差及精度评定 总体思路:现有等级水准网的全部观测数据及网型、起算数据。要求对该水准网,分别用条件、间接两种方法进行严密平差,并检验。进行平差模型的正确性 水准网的条件平差: ①列条件平差值方程、改正数条件方程、法方程;

电子水准仪数据处理及平差软件说明

电子水准仪数据处理及平差软件用户手册

1引言 1.1编写目的 《“电子水准仪数据处理及平差软件”用户操作手册》是京沪高速铁路沉降观测评估软件之一“电子水准仪数据处理及平差软件”的使用说明,能够指导测量技术人员正确使用“电子水准仪数据处理及平差软件”。 1.2背景 为了满足京沪高速铁路线下沉降变形观测与评估的需要,适应铁路施工与评估单位对其数据处理的要求,中铁二院工程集团有限责任公司研制了自主版权的“电子水准仪数据处理及平差软件”。 2软件的功能和性能 2.1软件功能和适用范围 电子水准仪数据处理及平差软件,是专为我国京沪高速铁路线下沉降观测评估而设计的电子水准仪数据处理与高程平差计算软件。 2.1.1软件的主要功能有: 1、根据需要选择工作路径; 2、根据设置生成高差文件; 3、生成平差文件; 4、输出观测手簿; 5、闭合环自动搜索与闭合差计算; 6、网平差处理与成果输出; 2.1.2软件的主要输出内容包括: 1、可输出高程控制网测段实测高差数据; 2、可输出网点高程平差值及其精度; 3、可输出网点高差改正数、平差值及其精度; 4、可输出高程控制网平差后的验后单位权中误差; 5、可输出高程控制网外业观测手簿等。 2.2软件的性能 结合电子水准仪使用可实现外业数据采集和与内业数据处理的一体化和自动化。该软件具有功能全面、整体性能好、自动化程度高、通用性强等特点,能满足京沪高速铁路线下沉降观测数据处理的要求。 3运行环境

3.1硬件设备 “电子水准仪数据处理及平差软件”是基于WIN2000/XP/Vista操作系统开发的内业数据处理与平差计算软件,其要求硬件环境条件如下: ·内存≥256MB ·CPU主频≥1.0GHZ ·硬盘剩余容量≥1.0G 3.2支持软件 “电子水准仪数据处理及平差软件”在Windows 2000/XP 操作系统下运行,且要求首先安装Microsoft .Net Compact Framework 2.0;在Windows 2000/XP/Vista操作系统下,“电子水准仪数据处理及平差软件”的“输出观测手簿”功能均要求用户微机上安装Microsoft office Excel 2003软件或更高版本的Excel软件。 3.3数据存储 软件均在与原始观测文件相同的位置进行数据处理与保存,数据存储格式为文本格式。 4软件安装说明 略 5“电子水准仪数据处理及平差软件”使用说明 5.1选择工作路径 “电子水准仪数据处理及平差软件”是按Windows管理文件夹与文件的模式进行的,所有的操作是在所选定的文件夹中进行的。这样做的优点是方便用户使用,便于存档和调阅及工作路径的选择。“电子水准仪数据处理及平差软件”的项目会涉及到许多文档,根据一定的命名规则,系统会调用相应的文档进行处理。 使用“电子水准仪数据处理及平差软件”的第一步就是选择要进行操作的工作路径,并在此路径下进行数据处理操作。 用以下方法之一选择工作路径:(1)选择菜单打开/选择工作路径;(2)在选择作业工具栏中,选择作业路径/选择工作路径。选择此项,弹出如图5.1所示窗口。 选择工作路径步骤: 1)在浏览文件夹窗口中,选择要进行操作的文件夹。 2)点击确定。这样就把所选择的文件夹及所有子文件夹与文件全部以树形窗口显示在软件右侧的文件列表中,供用户进行管理与操作。 图5.1 选择工作路径窗口 5.2“电水数据处理”菜单

三四等水准测量平差软件V1.6使用说明

《三、四等水准测量平差计算程序 V1.6》使用说明本程序编写目的为本人的水准平差计算,升级到 V1.4后,有数年未有升级,于近日打算做最后一次升级,以后将不会再升级了。 由于本人编程能力有限,使用的国产编程语言编写的程序,均被360杀毒软件误报。若是介意,请不要下载使用。本人也没有能力去编写 病毒木马。为了安全期间,请从本人QQ(QQ:389505708 了李李-测量)空间提供的下载地址下载,若是从其他地方下载,本人不能保证程序中会不会被有心之人加入病毒木马之类。 本程序特点如下: 1.绿色版,无需安装,打开即用。 2.完全按照 测量 教材中的表格编写,计算方法也同书上一样,进位采用“四舍五入”、“单进双不进”进位方法。 3.计算完成后,方便 继续进行 平差易 报告的平差。 4.说明很是详细,可以教新手在不影响最终成果的原则下完成一些数据的修改,以达到规范要求。 一.使用步骤 1.起始数据填写。 打开软件后,会是这样的一个界面,这时需要填写起始数据。

例如:我的数据如下:线路共有 34站,起点点号为III-2,高程为33.048m,终点点号为III-3,高程为 16.798m,中间有 7 个加密水准点,按四等水准要求测量,起点后尺为 4687。 则填写如下:

起始红黑尺常数:选择为 4687. 起始水准点高程:起点III-2 的高程:33.048 设计水准闭合差:(终点III-3的高程(m) - 起点III-2的高程(m))*1000=(16.798-33.048)*1000= -16.250*1000= -16250mm 此次线路为附合水准线路,若是闭合水准线路,则设计水准闭合差:为 0. 总测站数:总共测了 34 站。 水准等级:此次按四等水准,所以先择四等水准。 然后点击确定。 2.测量数据填写

相关文档
相关文档 最新文档