接下来要写的可看成是对前面讲过的四种经典平差方法的概括模型。
从四种基本平差算法的函数模型来看,主要包括如下两种类型的条件方程:
{
F
(
L
^
,
X
^
)
=
0
ϕ
(
X
^
)
=
0
\left\{\begin{matrix} F(\hat{L},\hat{X})=0\\ \phi (\hat{X})=0 \end{matrix}\right.
{F(L^,X^)=0ϕ(X^)=0
第一种方程中同时含有观测值和未知参数,称为一般条件方程;第二种方程则只含有未知参数而无观测值,称为限制条件方程。
一般而言,对于任何一个平差问题,设想观测值个数为
n
n
n,必要观测数为
t
t
t,则多余观测数
r
=
n
+
t
r=n+t
r=n+t。若增选了
u
u
u个参数,不论
u
<
t
,
u
=
t
u<t,u=t
u<t,u=t或
u
>
t
u>t
u>t,也不论参数是否独立,每增加一个参数则相应的多产生一个方程,故总共应列出
r
+
u
r+u
r+u个方程。如果在
u
u
u个参数中有
s
s
s个是不独立的,或者说,在这
u
u
u个参数之间存在着
s
s
s个函数关系式,则应列出
s
s
s个限制条件方程,此外,还应列出
c
−
r
+
u
−
s
c-r+u-s
c−r+u−s个一般条件方程,如此就形成了如下的函数模型:
F
c
1
(
L
^
,
X
^
)
=
0
ϕ
s
1
(
X
^
)
=
0
\begin{matrix} \underset{c\,1 }{F}(\hat{L},\hat{X})=0\\ \underset{s\, 1}{\phi}(\hat{X})=0 \end{matrix}
c1F(L^,X^)=0s1ϕ(X^)=0这就是附有限制条件的条件平差函数模型。其线性形式可概括如下:
A
c
n
V
n
1
+
B
c
u
x
^
u
1
+
W
c
1
=
0
C
s
u
x
^
u
1
+
W
x
s
1
=
0
\begin{matrix} \underset{c\,n }{A}\underset{n\,1 }{V}+\underset{c\,u }{B}\underset{u\,1}{\hat{x}}+\underset{c\,1}{W}=0\\ \underset{s\,u}{C}\underset{u\,1}{\hat{x}}+\underset{s\,1}{W_{x}}=0 \end{matrix}
cnAn1V+cuBu1x^+c1W=0suCu1x^+s1Wx=0式中
W
=
F
(
L
,
X
0
)
,
W
x
=
ϕ
(
X
0
)
W=F(L,X^{0}),W_{x}=\phi(X^{0})
W=F(L,X0),Wx=ϕ(X0)其中,
X
0
X^{0}
X0是未知参数的初始值,一般选择在收敛值的某个开邻域
U
U
U里,使得
U
U
U必须和3维欧式空间
R
3
R^{3}
R3中的一个开子集是同胚的。
且
c
=
r
+
u
−
s
,
c
>
r
,
s
<
u
c=r+u-s,c>r,s<u
c=r+u−s,c>r,s<u,系数矩阵的秩分别为
R
(
A
)
=
c
,
R
(
B
)
=
u
,
R
(
C
)
=
s
R(A)=c,R(B)=u,R(C)=s
R(A)=c,R(B)=u,R(C)=s随机模型为
D
n
n
=
σ
0
2
Q
n
n
=
σ
0
2
P
n
n
−
1
\underset{n\, n}{D}=\sigma _{0}^{2} \underset{n\, n}{Q}=\sigma _{0}^{2} \underset{n\, n}{P}^{-1}
nnD=σ02nnQ=σ02nnP−1在大多数情况下,参数之间是等价的,不需要加权,这时候
P
P
P是单位矩阵。
上面提到过,该模型是四种平差模型的综合:
- 系数阵中的 B = 0 , C = 0 B=0,C=0 B=0,C=0时,它就变成了条件平差法的函数模型。
- 系数阵中的 C = 0 C=0 C=0,它就变成了附有参数的条件平差的函数模型。
- 系数阵中的 A = − I A=-I A=−I和 C = 0 C=0 C=0时,它就变成了间接平差法的函数模型。
- 系数阵中的 A = − I A=-I A=−I时,就变成了附有限制条件的间接平差法的函数模型。
由此,也称之为“概括平差模型”。
回到正题来简化数学模型,上面的线性模型用拉格朗日乘子进行复合,组成函数如下:
ϕ
=
V
T
P
V
−
2
K
T
(
A
V
+
B
x
^
+
W
)
−
2
K
s
T
(
C
x
^
+
W
x
)
\phi=V^{T}PV-2K^{T}(AV+B\hat{x}+W)-2K_{s}^{T}(C\hat{x}+W_{x})
ϕ=VTPV−2KT(AV+Bx^+W)−2KsT(Cx^+Wx)
注意,这里有两个拉格朗日乘子,对于拉格朗日乘子,可参看我的另外一篇文章:拉格朗日乘子法的由来。
由凸优化理论,要计算该极值,需对
V
V
V,
x
^
\hat{x}
x^,
K
K
K,
K
s
K_{s}
Ks分别取极值,即是求偏导并令其为零,得
∂
Φ
∂
V
=
2
V
T
P
−
2
K
T
A
=
0
∂
Φ
∂
x
^
=
−
2
K
T
B
−
2
K
s
T
C
=
0
A
V
+
B
x
^
+
W
=
0
C
x
^
+
W
x
=
0
\begin{matrix} \frac{\partial \Phi }{\partial V}=2V^{T}P-2K^{T}A=0\\ \frac{\partial \Phi }{\partial \hat{x}}=-2K^{T}B-2K_{s}^{T}C=0\\ AV+B\hat{x}+W=0\\ C\hat{x}+W_{x}=0 \end{matrix}
∂V∂Φ=2VTP−2KTA=0∂x^∂Φ=−2KTB−2KsTC=0AV+Bx^+W=0Cx^+Wx=0
上面四式包含
n
n
n个改正数,
u
u
u个参数,
c
c
c个对应于一般条件方程的联系数以及
s
s
s个对应于限制条件方程的联系数,而方程个数为
c
+
s
+
n
+
u
c+s+n+u
c+s+n+u,即方程个数等于未知数个数,故有唯一解。以上四式成为附有限制条件的条件平差法的基础方程。
解此基础方程,令
N
A
A
=
A
Q
A
T
N_{AA}=AQA^{T}
NAA=AQAT得
N
A
A
K
+
B
x
^
+
W
=
0
B
T
K
+
C
T
K
s
=
0
C
x
^
+
W
x
=
0
\begin{matrix} N_{AA}K+B\hat{x}+W=0\\ B^{T}K+C^{T}K_{s}=0\\ C\hat{x}+W_{x}=0 \end{matrix}
NAAK+Bx^+W=0BTK+CTKs=0Cx^+Wx=0
以上三式称为附有限制条件的条件平差的法方程。
由法方程得
K
=
−
N
A
A
−
1
(
W
+
B
x
^
)
B
T
N
A
A
−
1
B
x
^
−
C
T
K
+
B
T
N
A
A
−
1
W
=
0
\begin{matrix} K=-N_{AA}^{-1}(W+B\hat{x})\\ \\ B^{T}N_{AA}^{-1}B\hat{x}-C^{T}K+B^{T}N_{AA}^{-1}W=0 \end{matrix}
K=−NAA−1(W+Bx^)BTNAA−1Bx^−CTK+BTNAA−1W=0若令
N
B
B
=
B
T
N
A
A
−
1
B
,
W
e
=
B
T
N
A
A
−
1
W
N_{BB}=B^{T}N_{AA}^{-1}B,W_{e}=B^{T}N_{AA}^{-1}W
NBB=BTNAA−1B,We=BTNAA−1W可进一步化简得
N
B
B
x
^
−
C
T
K
s
+
W
e
=
0
N_{BB}\hat{x}-C^{T}K_{s}+W_{e}=0
NBBx^−CTKs+We=0解出
x
^
\hat{x}
x^,得
x
^
=
N
B
B
−
1
(
C
T
K
s
−
W
e
)
\hat{x}=N_{BB}^{-1}(C^{T}K_{s}-W_{e})
x^=NBB−1(CTKs−We)将上式代入
C
x
^
+
W
x
=
0
C\hat{x}+W_{x}=0
Cx^+Wx=0,得
N
C
C
K
s
−
C
N
B
B
−
1
W
e
+
W
x
=
0
N_{CC}K_{s}-CN_{BB}^{-1}W_{e}+W_{x}=0
NCCKs−CNBB−1We+Wx=0
其中
N
C
C
=
C
N
B
B
−
1
C
T
N_{CC}=CN_{BB}^{-1}C^{T}
NCC=CNBB−1CT。解出
K
s
K_{s}
Ks得
K
s
=
−
N
C
C
−
1
(
W
x
−
C
N
B
B
−
1
W
e
)
K_{s}=-N_{CC}^{-1}(W_{x}-CN_{BB}^{-1}W_{e})
Ks=−NCC−1(Wx−CNBB−1We)经整理即得:
x
^
=
−
(
N
B
B
−
1
−
N
B
B
−
1
C
T
N
C
C
−
1
C
N
B
B
−
1
)
W
e
−
N
B
B
−
1
C
T
N
C
C
−
1
W
x
\hat{x}=-(N_{BB}^{-1}-N_{BB}^{-1}C^{T}N_{CC}^{-1}CN_{BB}^{-1})W_{e}-N_{BB}^{-1}C^{T}N_{CC}^{-1}W_{x}
x^=−(NBB−1−NBB−1CTNCC−1CNBB−1)We−NBB−1CTNCC−1Wx
下面是具体的代码实现,其中基本的矩阵运算没有在下面给出,在矩阵算法相关代码,如有需要可以下载。
// <summary>
/// 附有限制条件的条件平差
/// </summary>
/// <param name="correction">返回的改正数</param>
/// <param name="MatrixA"></param>
/// <param name="MatrixB"></param>
/// <param name="MatrixC"></param>
/// <param name="W"></param>
/// <param name="Wx"></param>
/// <param name="C"></param>
/// <param name="N"></param>
/// <param name="U"></param>
/// <param name="S"></param>
//
template<class T>
void GetConditionCorrectionWithCondition(T correction[],const T matrixA[],const T matrixB[],const T matrixC[],const T W[],const T Wx[],int C,int N,int U,int S)
{
T *transposedA=new T[N*C];
T *transposedB=new T[U*C];
T *transposedC=new T[U*S];
T *Naa=new T[C*C];
T *inverseForNaa=new T[C*C];
T *Nbb=new T[U*U];
T *inverseForNbb=new T[U*U];
T *Ncc=new T[S*S];
T *inverseForNcc=new T[S*S];
T *We=new T[U];
T *x=new T[U];
MatrixTranspose(matrixA,transposedA,C,N);
MultMatrix(matrixA,transposedA,Naa,C,N,C);
MatrixAnti(Naa,inverseForNaa,C);
MatrixTranspose(matrixB,transposedB,C,U);
T *transit1=new T[U*C];
MultMatrix(transposedB,inverseForNaa,transit1,U,C,C);
MultMatrix(transit1,matrixB,Nbb,U,C,U);
MatrixAnti(Nbb,inverseForNbb,U);
T *transit2=new T[U*C];
MultMatrix(transposedB,inverseForNaa,transit2,U,C,C);
MultMatrix(transit2,W,We,U,C,1);
T *transit3=new T[S*U];
MultMatrix(matrixC,inverseForNbb,transit3,S,U,U);
MatrixTranspose(matrixC,transposedC,S,U);
MultMatrix(transit3,transposedC,Ncc,S,U,S);
MatrixAnti(Ncc,inverseForNcc,S);
T *transit4=new T[U*S];
MultMatrix(inverseForNbb,transposedC,transit4,U,U,S);
T *transit5=new T[U*S];
MultMatrix(transit4,inverseForNcc,transit5,U,S,S);
T *transit6=new T[U*U];
MultMatrix(transit5,matrixC,transit6,U,S,U);
T *transit7=new T[U*U];
MultMatrix(transit6,inverseForNbb,transit7,U,U);
MatrixMinus(inverseForNbb,transit7,transit7,U,U);
T *transit8=new T[U];
MultMatrix(transit7,We,transit8,U,U,1);
T *transit9=new T[U];
MultMatrix(transit5,Wx,transit9,U,S,1);
MatrixMinus(transit9,transit9,correction,U,1);
MatrixMinus(correction,transit8,correction,U,1);
MatrixMinus(correction,transit9,correction,U,1);
delete [] transposedA;
delete [] transposedB;
delete [] transposedC;
delete [] Naa;
delete [] inverseForNaa;
delete [] Nbb;
delete [] inverseForNbb;
delete [] Ncc;
delete [] inverseForNcc;
delete [] We;
delete [] x;
delete [] transit1;
delete [] transit2;
delete [] transit3;
delete [] transit4;
delete [] transit5;
delete [] transit6;
delete [] transit7;
delete [] transit8;
delete [] transit9;
}
下面进行精度评定,附有限制条件的条件平差的单位权方差估值也是
V
T
P
V
V^{T}PV
VTPV除以它的自由度,即
σ
^
0
2
=
V
T
P
V
r
=
V
T
P
V
c
−
u
+
s
\hat{\sigma }_{0}^{2}=\frac{V^{T}PV}{r}=\frac{V^{T}PV}{c-u+s}
σ^02=rVTPV=c−u+sVTPV
另外,应用协因数传播率,可得
Q
x
^
x
^
=
N
B
B
−
1
−
N
B
B
−
1
C
T
N
C
C
−
1
C
N
B
B
−
1
Q_{\hat{x}\hat{x}}=N_{BB}^{-1}-N_{BB}^{-1}C^{T}N_{CC}^{-1}CN_{BB}^{-1}
Qx^x^=NBB−1−NBB−1CTNCC−1CNBB−1则平差值函数的中误差很容易得到,在这里不想写的太详细了,前面几篇文章详细讨论过。
参考资料:
[1] 误差理论与测量平差基础 武汉大学测绘学院测量平差学科组编著
[2] 变分学讲义 张恭庆著
转载请注明出处:http://blog.csdn.net/fourierFeng/article/details/76862227