如何理解条件平差

为什么要平差,我们知道是因为我们测量的数据(在有多余观测的条件下)产生了矛盾。比如我们测一个三角形,如果只测了两个角,我们知道第三个角一定是180度减前两个角的和。但是如果我们测了三个角,但三个角加起来不等于180度,那就说明测得有误差,我们就需要用一些手段进行平差,消除这些误差
平差最主要的两种是间接平差和条件平差,它们的区别可以参考这里,间接平差使用的比条件平差多得多。简单的说条件平差就是以公理为条件构造条件方程,条件平差不含有独立参数,表示为观测量的隐函数形式,再使用最小二乘即可。但是方程的公理性质不容易找齐,而且这些公理之间必须是互相独立的,要保证列出的方程组无关,所以使用起来比较不容易列齐条件方程。而间接平差是先建立近似的模型,然后来找到真正的模型与近似模型间的改正数,使其平方和最小即可
还是以一个题来说,这是学校平差课的实验题,现在看着当年写的报告,不知道写的什么**玩意儿,只能重新思考了

如题(就看第一个问就行了)
在这里插入图片描述

我们看题中要求得 P 1 P_{1} P1 P 2 P_{2} P2 P 3 P_{3} P3的高,必要观测只需要3条边的高差观测值,比如由 P 1 = H A + h 1 P_{1}=H_{A}+h_{1} P1=HA+h1 P 2 = H A + h 2 P_{2}=H_{A}+h_{2} P2=HA+h2 P 3 = H B + h 4 P_{3}=H_{B}+h_{4} P3=HB+h4只要事实上我们测了 h 1 h_{1} h1 h 2 h_{2} h2 h 3 h_{3} h3就行了,但是我们一共测了7条边,所以这里我们的必要观测数 t = 3 t=3 t=3,总的观测数 n = 7 n=7 n=7,所以我们多余观测数为 r = n − t = 4 r=n-t=4 r=nt=4。在条件平差中,有多少的多余观测,就需要多少的条件方程,所以这里我们需要4个条件方程
现在我们来看图找公理。最容易想到的是,从一个点出去转一圈回来,高程不变嘛,所以根据此我们应该可以得到下面几个公式是正确的(注意,这些公式要是无关的),但是我们测的数据加起来却不是这样的
h 1 − h 2 + h 5 = 0 h 5 + h 6 − h 7 = 0 h 3 − h 6 − h 4 = 0 h 1 − h 3 + H A − H B = 0 h_{1}-h_{2}+h_{5}=0\\ h_{5}+h_{6}-h_{7}=0\\ h_{3}-h_{6}-h_{4}=0\\ h_{1}-h_{3}+H_{A}-H_{B}=0 h1h2+h5=0h5+h6h7=0h3h6h4=0h1h3+HAHB=0
这里我们根据下面两个公式化简一下。这里的第一个公式就是我们上面的条件方程,只是上面是理论的,没有写上加上 A 0 A0 A0才为零;下面的式子中 L ^ \hat{L} L^表示改正后的值, V V V是改正数,也就是真实值等于测量值加上改正值
A L ^ + A 0 = 0 L ^ = L + V A\hat{L}+A^{0}=0\\ \hat{L}=L+V AL^+A0=0L^=L+V
得到了 A V + W = 0 AV+W=0 AV+W=0,此即为条件平差的函数模型, W W W是之前我们算出的闭合差(也就是走一圈回到原点的高程差,这里让改正数和等于闭合差可以看成这样,比如第一个公式,我们需要 h 1 + v 1 − ( h 2 + v 2 ) + h 5 + v 5 = 0 h_{1}+v_{1}-(h_{2}+v_{2})+h_{5}+v_{5}=0 h1+v1(h2+v2)+h5+v5=0,推出 v 1 − v 2 + v 5 + ( h 1 − h 2 + h 5 ) = 0 v_{1}-v_{2}+v_{5}+(h_{1}-h_{2}+h_{5})=0 v1v2+v5+(h1h2+h5)=0,我们计算可以得到 W 1 = h 1 − h 2 + h 5 = 7 W_{1}=h_{1}-h_{2}+h_{5}=7 W1=h1h2+h5=7,其他类似),现在我们按照这个形式列出条件方程(注意,单位是毫米mm)
v 1 − v 2 + v 5 + 7 = 0 v 5 + v 6 − v 7 + 7 = 0 v 3 − v 6 − v 4 + 3 = 0 v 1 − v 3 + H A − H B − 4 = 0 v_{1}-v_{2}+v_{5}+7=0\\ v_{5}+v_{6}-v_{7}+7=0\\ v_{3}-v_{6}-v_{4}+3=0\\ v_{1}-v_{3}+H_{A}-H_{B}-4=0 v1v2+v5+7=0v5+v6v7+7=0v3v6v4+3=0v1v3+HAHB4=0
这下我们就可以开始算了,先把知道的矩阵列出来,首先是 A A A W W W阵,还可以把权阵 P P P列出来,根据对应路线的长度,设2km为单位权,得到
A = [ 1 − 1 0 0 1 0 0 0 0 0 0 1 1 − 1 0 0 1 − 1 0 − 1 0 1 0 − 1 0 0 0 0 ] W = [ 7 7 3 4 ] P = [ 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 ] A= \left[ \begin{matrix} 1 & -1 & 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 1 & 1 & -1\\ 0 & 0 & 1 & -1 & 0 & -1 & 0\\ 1 & 0 & -1 & 0 & 0 & 0 & 0 \end{matrix} \right] W= \left[ \begin{matrix} 7\\ 7\\ 3\\ 4 \end{matrix} \right] \\P= \left[ \begin{matrix} 2 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 2 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 2 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 2 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 1 \end{matrix} \right] A=1001100000110010110001100100W=7734P=2000000020000000100000001000000020000000200000001
现在我们的目标依旧没变,使得 V T P V = m i n V^{T}PV=min VTPV=min,因为我们使用了条件方程,就像附有条件的间接平差,代价函数 V T P V V^{T}PV VTPV限制在了条件之中,所以这里要用到拉格朗日乘子法,得到的新的代价为 Φ = V T P V − 2 K T ( A V + W ) \Phi=V^{T}PV−2K^{T}(AV+W) Φ=VTPV2KT(AV+W),同样的我们要将 Φ \Phi Φ V V V求导,并等于零,即
∂ ( Φ ) ∂ ( V ) = 2 V T P − 2 K T A = 0 V = − P − 1 A T ( A P − 1 A T ) − 1 W \frac{\partial(\Phi)}{\partial(V)}=2V^{T}P−2K^{T}A=0\\ V=-P^{-1}A^{T}(AP^{-1}A^{T})^{-1}W (V)(Φ)=2VTP2KTA=0V=P1AT(AP1AT)1W
推导的过程可以参考这里,现在我们就可以计算一下了,先输入数据,查看一下数据的维度

A = np.array([[1,-1,0,0,1,0,0],
              [0,0,0,0,1,1,-1],
              [0,0,1,-1,0,-1,0],
              [1,0,-1,0,0,0,0]])
W = np.array([7,7,3,-4]).T.reshape(4,1)
P = np.array([[2,0,0,0,0,0,0],
              [0,2,0,0,0,0,0],
              [0,0,1,0,0,0,0],
              [0,0,0,1,0,0,0],
              [0,0,0,0,2,0,0],
              [0,0,0,0,0,2,0],
              [0,0,0,0,0,0,1]])

print(A.shape)
print(W.shape)
print(P.shape)

这里输出为

(4, 7)
(4, 1)
(7, 7)

好,现在开始写方程计算

Q = np.linalg.inv(P)
Naa = np.dot(np.dot(A, Q), A.T)
K = np.dot(np.linalg.inv(Naa), W)
V = -np.dot(np.dot(Q, A.T), K)
print(V)

得到结果,这里从上到下分别对应 v 1 v_{1} v1 v 7 v_{7} v7

[[-0.42696629]
 [ 2.7752809 ]
 [-4.42696629]
 [-0.26966292]
 [-3.79775281]
 [-1.15730337]
 [ 2.04494382]]

现在我们改成一下 h 1 h1 h1 h 2 h2 h2 h 5 h5 h5,然后再算一下 h 1 − h 2 + h 5 = 0 h1-h2+h5=0 h1h2+h5=0是否成立 h 1 ^ = h 1 + v 1 = 1.358573034 h 2 ^ = h 2 + v 2 = 2.011775281 h 5 ^ = h 5 + v h = 0.653202247 \hat{h_{1}}=h_{1}+v_{1}=1.358573034\\ \hat{h_{2}}=h_{2}+v_{2}=2.011775281\\ \hat{h_{5}}=h_{5}+v_{h}=0.653202247 h1^=h1+v1=1.358573034h2^=h2+v2=2.011775281h5^=h5+vh=0.653202247
现在计算得到 h 1 − h 2 + h 5 = 0 h1-h2+h5=0 h1h2+h5=0,对了完毕收工。现在再把这道题的答案算了
P 1 = H A + h 1 + v 1 = 457.596573 P 2 = H A + h 2 + v 2 = 458.2497753 P 3 = H B + h 4 + v 4 = 456.5977303 P_{1}=H_{A}+h_{1}+v_{1}=457.596573\\ P_{2}=H_{A}+h_{2}+v_{2}=458.2497753\\ P_{3}=H_{B}+h_{4}+v_{4}=456.5977303 P1=HA+h1+v1=457.596573P2=HA+h2+v2=458.2497753P3=HB+h4+v4=456.5977303

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值