GPS原理与应用实验题目:GPS单点定位专业:测绘工程班级:12-01学号:***********名:**指导教师:***时间:2014.11目录一、实验目的 (3)二、实验原理 (3)三、实验内容 (3)四、实验效果图 (9)五、实验总结 (9)一.实验目的1.深入了解单点定位的计算过程;2.加强单点定位基本公式和误差方程式,法线方程式的记忆;3.通过上机调试程序加强动手能力的培养。
二.实验原理一个接收机接受三个火三个以上卫星信号,得出卫星坐标和伪距,利用间接平差计算接收机的坐标。
三.实验内容1.程序流程图2、实验数据3、实验程序代码Private Sub Command1_Click()CommonDialog1.Filter = "TXT files|*.txt|" CommonDialog1.FilterIndex = 1CommonDialog1.ShowOpenOpen monDialog1.FileName For Input As #1 Do While Not EOF(1)Line Input #1, Texttextbuff = textbuff + Text + vbCrLfLoopClose #1kk = MSFlexGrid1.Rows - 1Dim aReDim a(kk - 1)a = Split(textbuff, vbCrLf)For j = 1 To kkFor i = 1 To 5MSFlexGrid1.TextMatrix(j, i) = a(j - 1 + 5 * (i - 1)) Next iNext jFor k = 1 To kkMSFlexGrid1.TextMatrix(k, 0) = "第" & k & "个点" Next kMSFlexGrid1.TextMatrix(0, 1) = "X"MSFlexGrid1.TextMatrix(0, 2) = "Y"MSFlexGrid1.TextMatrix(0, 3) = "Z"MSFlexGrid1.TextMatrix(0, 4) = "伪距" MSFlexGrid1.TextMatrix(0, 5) = "钟差"End SubPrivate Sub Command2_Click()kk = MSFlexGrid1.Rows - 1X0 = 0: Y0 = 0: Z0 = 0c = 299792458Dim a()ReDim a(kk - 1, 3)Dim ll()ReDim ll(kk - 1, 0)For ii = 1 To 100For i = 1 To kkl = (MSFlexGrid1.TextMatrix(i, 1) - X0) / Sqr((MSFlexGrid1.TextMatrix(i, 1) - X0) ^ 2 + (MSFlexGrid1.TextMatrix(i, 2) - Y0) ^ 2 + (MSFlexGrid1.TextMatrix(i, 3) - Z0) ^ 2)m = (MSFlexGrid1.TextMatrix(i, 2) - Y0) / Sqr((MSFlexGrid1.TextMatrix(i, 1) - X0) ^ 2 + (MSFlexGrid1.TextMatrix(i, 2) - Y0) ^ 2 + (MSFlexGrid1.TextMatrix(i, 3) - Z0) ^ 2)n = (MSFlexGrid1.TextMatrix(i, 3) - Z0) / Sqr((MSFlexGrid1.TextMatrix(i, 1) - X0) ^ 2 + (MSFlexGrid1.TextMatrix(i, 2) - Y0) ^ 2 + (MSFlexGrid1.TextMatrix(i, 3) - Z0) ^ 2)a(i - 1, 0) = la(i - 1, 1) = ma(i - 1, 2) = na(i - 1, 3) = -1lk = MSFlexGrid1.TextMatrix(i, 4) - Sqr((MSFlexGrid1.TextMatrix(i, 1) - X0) ^ 2 + (MSFlexGrid1.TextMatrix(i, 2) - Y0) ^ 2 + (MSFlexGrid1.TextMatrix(i, 3) - Z0) ^ 2) + c * MSFlexGrid1.TextMatrix(i, 5)ll(i - 1, 0) = lkNext igzs = xc(qiuni(xc(zz(a), a)), xc(zz(a), ll))X0 = X0 - gzs(0, 0)Y0 = Y0 - gzs(1, 0)Z0 = Z0 - gzs(2, 0)j = j + 1Next iiText2.Text = "X=" & X0 & vbCrLf & vbCrLf & "Y=" & Y0 & vbCrLf & vbCrLf & "Z=" & Z0V = jian(ll, xc(a, gzs))zjl = xc(zz(V), V)σ0 = Sqr(zjl(0, 0)) / (kk - 3)Qx = qiuni(xc(zz(a), a))Text3.Text = "σX=" & σ0 * Sqr(Qx(0, 0)) & vbCrLf & vbCrLf & "σY=" & σ0 * Sqr(Qx(1, 1)) & vbCrLf & vbCrLf & "σZ=" & σ0 * Sqr(Qx(2, 2))End SubPrivate Sub Form_Load()MSFlexGrid1.ColWidth(1) = 1300MSFlexGrid1.ColWidth(2) = 1300MSFlexGrid1.ColWidth(3) = 1300MSFlexGrid1.ColWidth(4) = 1300Text2.Text = ""Text3.Text = ""End Sub'矩阵相减Public Function jian(m, n)Dim i, j As IntegerIf UBound(m, 1) <> UBound(n, 1) Or UBound(m, 2) <> UBound(n, 2) Then MsgBox ("请确认输入数组是否可以相减!")ElseDim c()ReDim c(UBound(m, 1), UBound(n, 2))For i = 0 To UBound(c, 1)For j = 0 To UBound(c, 2)c(i, j) = m(i, j) - n(i, j)Next jNext ijian = cEnd IfEnd Function'矩阵的转置Public Function zz(a)Dim i As Integer, j As Integer, t As Integer, b()If UBound(a, 1) = UBound(a, 2) ThenFor i = 0 To UBound(a, 1)For j = 0 To UBound(a, 2)If i < j Thent = a(i, j)a(i, j) = a(j, i)a(j, i) = tEnd IfNext jNext izz = aElseReDim b(UBound(a, 2), UBound(a, 1))For i = 0 To UBound(a, 2)For j = 0 To UBound(a, 1)b(i, j) = a(j, i)Next jzz = bEnd IfEnd Function'两矩阵相乘Public Function xc(a, b)Dim i As Integer, j As Integer, k As Integer If UBound(a, 2) <> UBound(b, 1) Then MsgBox ("这两个矩阵不能够相乘") Exit FunctionEnd IfReDim sd(UBound(a, 1), UBound(b, 2)) For i = 0 To UBound(a, 1)For j = 0 To UBound(b, 2)For k = 0 To UBound(b, 1)sd(i, j) = sd(i, j) + a(i, k) * b(k, j)Next kNext jNext ixc = sdEnd FunctionPublic Function qiuni(a)Dim c, m%, n%, p#, l%, i%, j%, ab#m = UBound(a, 1)n = UBound(a, 2)If m <> n ThenMsgBox ("该矩阵不可逆!!!")Exit FunctionEnd IfReDim c(m, 2 * n + 1)For i = 0 To mFor j = 0 To nc(i, j) = a(i, j)Next jNext iFor i = 0 To mFor j = m + 1 To 2 * m + 1c(i, j) = 0Next jNext ii = 0For j = m + 1 To 2 * m + 1c(i, j) = 1i = i + 1For k = 0 To nIf c(k, k) = 0 ThenFor i = k + 1 To nIf c(i, k) <> 0 ThenGoTo thisEnd IfNext iIf i = n + 1 ThenMsgBox ("该矩阵不可逆") Exit FunctionEnd Ifthis:For j = 0 To 2 * m + 1p = c(k, j)c(k, j) = c(i, j)c(i, j) = pNext jEnd Ifab = 1# / c(k, k)For j = 0 To 2 * m + 1c(k, j) = c(k, j) * abNext jFor i = 0 To nIf i <> k ThenFor j = 0 To 2 * m + 1If j <> k Thenc(i, j) = c(i, j) - c(i, k) * c(k, j)End IfNext jc(i, k) = 0End IfNext iNext kFor i = 0 To mFor j = 0 To ma(i, j) = c(i, j + n + 1)a(i, j) = Round(a(i, j), 4)Next jNext iqiuni = aEnd Function四.实验结果图五.实验总结此次实验让我深入了解单点定位的计算过程,加强了对单点定位基本公式和误差方程式,法线方程式的记忆。