测量平差之附有限制条件的条件平差(概括平差模型)

接下来要写的可看成是对前面讲过的四种经典平差方法的概括模型。
从四种基本平差算法的函数模型来看,主要包括如下两种类型的条件方程: { 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 cr+us个一般条件方程,如此就形成了如下的函数模型: 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+us,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=σ02nnP1在大多数情况下,参数之间是等价的,不需要加权,这时候 P P P是单位矩阵。
上面提到过,该模型是四种平差模型的综合:

  1. 系数阵中的 B = 0 , C = 0 B=0,C=0 B=0,C=0时,它就变成了条件平差法的函数模型。
  2. 系数阵中的 C = 0 C=0 C=0,它就变成了附有参数的条件平差的函数模型。
  3. 系数阵中的 A = − I A=-I A=I C = 0 C=0 C=0时,它就变成了间接平差法的函数模型。
  4. 系数阵中的 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}) ϕ=VTPV2KT(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Φ=2VTP2KTA=0x^Φ=2KTB2KsTC=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=NAA1(W+Bx^)BTNAA1Bx^CTK+BTNAA1W=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=BTNAA1B,We=BTNAA1W可进一步化简得
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^=NBB1(CTKsWe)将上式代入 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 NCCKsCNBB1We+Wx=0
其中 N C C = C N B B − 1 C T N_{CC}=CN_{BB}^{-1}C^{T} NCC=CNBB1CT。解出 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=NCC1(WxCNBB1We)经整理即得: 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^=(NBB1NBB1CTNCC1CNBB1)WeNBB1CTNCC1Wx
下面是具体的代码实现,其中基本的矩阵运算没有在下面给出,在矩阵算法相关代码,如有需要可以下载。

// <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=cu+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^=NBB1NBB1CTNCC1CNBB1则平差值函数的中误差很容易得到,在这里不想写的太详细了,前面几篇文章详细讨论过。

参考资料:
[1] 误差理论与测量平差基础 武汉大学测绘学院测量平差学科组编著
[2] 变分学讲义 张恭庆著

转载请注明出处:http://blog.csdn.net/fourierFeng/article/details/76862227

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值