如何理解间接平差

对于线性回归问题,我们说明了利用梯度下降和正规方程进行处理的原理,其中最重要的就是最小二乘的原理,而在测绘科学中,测量平差的法方程就对应着线性回归的正规方程。平差利用最小二乘,却也有自己的不同,下面我们通过一道水准网间接平差例题来理解间接平差,间接平差就是在一个平差问题中,独立参数个数等于必要观测数 t t t时,将每个观测值表达成这t个参数的函数,组成观测方程的平差方法

如题在这里插入图片描述

如果没有学过平差,我们很容易从图中看出, h P 1 = h A + h 1 h_{P1}=h_A+h_1 hP1=hA+h1 h P 2 = h C + h 3 h_{P2}=h_C+h_3 hP2=hC+h3,那不就太简单了嘛, P 1 P_1 P1就等于 12.003 12.003 12.003m, P 2 P_2 P2就等于 12.511 12.511 12.511m。真这么简单就好了,由于观测的误差,答案肯定是接近于此但是不为此,我们可以看到根据图形和观测值,得到三个‘正确’的公式: h P 1 = h A + h 1 = 12.003 h_{P1}=h_A+h_1=12.003 hP1=hA+h1=12.003m, h P 1 = h B + h 4 = 12.005 h_{P1}=h_B+h_4=12.005 hP1=hB+h4=12.005m, h P 1 = h C + h 3 − h 2 = 12.010 h_{P1}=h_C+h_3-h_2=12.010 hP1=hC+h3h2=12.010m。同一个 P 1 P_1 P1的高度通过三个方向计算却不同,如何确定 P 1 P_1 P1最‘正确’的高度,这就需要平差来解决了。不过至少我们能得到这样一个答案,这里至少需要两次观测才能求出 P 1 P_1 P1 P 2 P_2 P2,即要测得 h 3 h_3 h3 h 1 h_1 h1或者 h 3 h_3 h3 h 4 h_4 h4。那我们就可以得到这道题的必要观测数 t = 2 t=2 t=2。我们设 P 1 P_1 P1 P 2 P_2 P2的真实高度为 X 1 ^ \hat{X_1} X1^ X 2 ^ \hat{X_2} X2^,前面我们也算得了P1和P2的近似高度,我们就设近似高度为 X 1 X_1 X1 X 2 X_2 X2。下面我们设每一条边的改正数设为 v v v,观测值为 L L L,真实值 L ^ = L + v \hat{L}=L+v L^=L+v,而对于线性表达式, L ^ = B h ^ + d ( y = a x + b ) \hat{L}=B\hat{h}+d(y=ax+b) L^=Bh^+dy=ax+b。这里我们就可以得到 L + v = B X ^ + d L+v=B\hat{X}+d L+v=BX^+d,结合 X ^ = X + x ^ \hat{X}=X+\hat{x} X^=X+x^ l = L ^ − L = L − ( B X + d ) l=\hat{L}-L=L-(BX+d) l=L^L=L(BX+d)我们就可以得到误差方程

L + v = B X ^ + d B X + d + l + v = B X + B x ^ + d v = B x ^ − ( L ^ − L ) v = B x ^ − l \begin{aligned} L + v &= B\hat{X} + d\\ BX + d + l + v& = BX + B\hat{x} + d\\ v &= B\hat{x} - (\hat{L} - L) \\ v &= B\hat{x} - l \end{aligned} L+vBX+d+l+vvv=BX^+d=BX+Bx^+d=Bx^(L^L)=Bx^l
现在我们列出误差方程

v 1 = x 1 ^ − ( h 1 − ( X 1 − h A ) ) v 2 = − x 1 ^ + x 2 ^ − ( h 2 − ( X 2 − X 1 ) ) v 3 = x 2 ^ − ( h 3 − ( X 2 − h C ) ) v 4 = x 1 ^ − ( h 4 − ( X 1 − h B ) ) \begin{aligned} &v_1 = \hat{x_1} - (h_1 - (X_1 - h_A))\\ &v_2 = -\hat{x_1} + \hat{x_2} - (h_2 - (X_2 - X_1))\\ &v_3 = \hat{x_2} - (h_3 - (X_2 - h_C))\\ &v_4 = \hat{x_1} - (h_4 - (X_1 - h_B)) \end{aligned} v1=x1^(h1(X1hA))v2=x1^+x2^(h2(X2X1))v3=x2^(h3(X2hC))v4=x1^(h4(X1hB))

把数字带进去,化简,就得到如下的式子(这里的l的单位是毫米)

v 1 = x 1 ^ − 0 v 2 = − x 1 ^ + x 2 ^ − ( − 7 ) v 3 = x 2 ^ − 0 v 4 = x 1 ^ − 2 \begin{aligned} &v_1 = \hat{x_1} - 0\\ &v_2 = -\hat{x_1} + \hat{x_2} - (-7)\\ &v_3 = \hat{x_2} - 0\\ &v_4 = \hat{x_1} - 2\\ \end{aligned} v1=x1^0v2=x1^+x2^(7)v3=x2^0v4=x1^2

对比 v = B x ^ − l v = B\hat{x} - l v=Bx^l的形式,我们可以写出 B B B l l l矩阵,根据题目的边长的长度,我们以最长的 2 2 2km为单位权,就可以列出权重的矩阵 P P P

B = [ 1 0 − 1 1 0 1 1 0 ] l = [ 0 − 7 0 2 ] P = [ 2 0 0 0 0 1 0 0 0 0 1 0 0 0 0 2 ] B= \left[ \begin{matrix} 1 & 0\\ -1 & 1\\ 0 & 1\\ 1& 0 \end{matrix} \right] l= \left[ \begin{matrix} 0\\ -7\\ 0\\ 2 \end{matrix} \right] P= \left[ \begin{matrix} 2 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 2 \end{matrix} \right] B=11010110l=0702P=2000010000100002

平差中的准则是要是 V T P V = m i n V^TPV=min VTPV=min(也就是 [ v v ] = ∑ v 2 [vv]=∑v^2 [vv]=v2要最小),这是进行最小二乘平差计算的一个基本原则,是求解不定线性方程组的一个附加条件。当VTPV越小,平差的效果越好。其中我们也得到了 v = B x ^ − l v = B\hat{x} - l v=Bx^l。现在就可以按列正规方程的方法( V T P V V^TPV VTPV关于 x ^ \hat{x} x^求导,当导数为零时, V T P V V^TPV VTPV最小),求得 x ^ = ( B T P B ) − 1 B T P l \hat{x}=(B^TPB)^{-1}B^TPl x^=(BTPB)1BTPl,下面是推导

d ( V T P V ) / d ( x ^ ) = 0 2 V T P ( d ( V ) / d ( x ^ ) ) = 0 2 V T P ( d ( B x ^ − l ) / d ( x ^ ) ) = 0 V T P B = 0 B T P V = 0 B T P ( B x ^ − l ) = 0 B T P B x ^ − B T P l = 0 x ^ = ( B T P B ) − 1 B T P l \begin{aligned} d(V^TPV) / d(\hat{x})& = 0\\ 2V^TP(d(V) / d(\hat{x}))& = 0 \\ 2V^TP(d(B\hat{x} - l) / d(\hat{x}))& = 0\\ V^TPB& = 0\\ B^TPV& = 0\\ B^TP(B\hat{x} - l)& = 0 \\ B^TPB\hat{x} - B^TPl& = 0\\ \hat{x}& = (B^TPB)^{-1}B^TPl \end{aligned} d(VTPV)/d(x^)2VTP(d(V)/d(x^))2VTP(d(Bx^l)/d(x^))VTPBBTPVBTP(Bx^l)BTPBx^BTPlx^=0=0=0=0=0=0=0=(BTPB)1BTPl
现在就可以很方便地计算了,我们用python-numpy计算一下

import numpy as np

B = np.array([[1,0],[-1,1],[0,1],[1,0]])
l = np.array([[0],[-7],[0],[2]])
P = np.array([[2,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,2]])
print(B.shape)
print(l.shape)
print(P.shape)

输出 B B B l l l P P P矩阵的维度

(4, 2)
(4, 1)
(4, 4)

现在计算,在python-numpy中,np.dot()是矩阵相乘,np.linalg.inv()是求逆矩阵,现在输出看看

x_h = np.zeros((2,1))

x_h = np.dot(np.dot(np.dot(np.linalg.inv(np.dot(np.dot(B.T,P),B)),B.T),P),l)
print(x_h)

结果是这样的,这里的单位是毫米(mm)

[[ 1.66666667]
 [-2.66666667]]

所以P1和P2点的高程平差值应该为 X ^ = X + x ^ \hat{X}=X+\hat{x} X^=X+x^,即 P 1 P_1 P1的高为 12.0047 12.0047 12.0047m和 P 2 P_2 P2的高为 12.5083 12.5083 12.5083m。这个时候吧 x ^ \hat{x} x^代回去也可以得到所有的 v v v的值,就可以求出所有观测量的平差值。我们可以算一下此时的所有观测量的平差值

h 1 ^ = h 1 + x 1 ^ − 0 = 1.0047 h 2 ^ = h 2 + − x 1 ^ + x 2 ^ − ( − 7 ) = 0.5037 h 3 ^ = h 3 + x 2 ^ − 0 = 0.5003 h 4 ^ = h 4 + x 1 ^ − 2 = 0.5047 \begin{aligned} &\hat{h_1} = h_1 + \hat{x_1} - 0 = 1.0047\\ &\hat{h_2} = h_2 + -\hat{x_1} + \hat{x_2} - (-7) = 0.5037\\ &\hat{h_3} = h_3 + \hat{x_2} - 0 = 0.5003\\ &\hat{h_4} = h_4 + \hat{x_1} - 2 = 0.5047 \end{aligned} h1^=h1+x1^0=1.0047h2^=h2+x1^+x2^(7)=0.5037h3^=h3+x2^0=0.5003h4^=h4+x1^2=0.5047

这里我们再算一下 h P 1 h_{P1} hP1,就发现三个方向算的答案都基本可以对的上了
h P 1 = h A + h 1 ^ = 12.0047 h_{P1}=h_A+\hat{h_1}=12.0047 hP1=hA+h1^=12.0047m, h P 1 = h B + h 4 ^ = 12.0047 h_{P1}=h_B+\hat{h_4}=12.0047 hP1=hB+h4^=12.0047m, h P 1 = h C + h 3 ^ − h 2 ^ = 12.0046 h_{P1}=h_C+\hat{h_3 }-\hat{h_2}=12.0046 hP1=hC+h3^h2^=12.0046m
结果里面有省略一些地小数,所以没有完全的相等

  • 22
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值