コード例 #1
0
ファイル: SimpleKalmanFilter.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 预报
        /// </summary>
        /// <param name="TransferMatrix"></param>
        /// <param name="InverseWeightOfTransfer"></param>
        private void Predict(IMatrix TransferMatrix, IMatrix InverseWeightOfTransfer)
        {
            //  int stateRow = AprioriParam.RowCount;
            //这两个矩阵的作用是什么???? 2014.12.14,czs, namu shaungliao,
            //IMatrix controlMatrix = new Matrix(stateRow, 1, 0.0);
            //IMatrix controlInputVector = new Matrix(1, 1, 0.0);

            // Compute the a priori state vector
            IMatrix PredictParam = TransferMatrix.Multiply(AprioriParam);//.Plus(controlMatrix.Multiply(controlInputVector));

            //IMatrix tranposOfTranfer = TransferMatrix.Transposition;
            // Compute the a priori estimate error covariance matrix
            //  IMatrix CovaOfPredictParam1 = TransferMatrix.Multiply(CovaOfAprioriParam).Multiply(tranposOfTranfer).Plus(InverseWeightOfTransfer);
            //此处解算结果完全一致,但是 CovaOfPredictParam1 计算的是 对角阵,BQBT 计算的是三角阵。BQBT该判断是否对角阵后计算,更能体现优势。
            //应该进一步测试比较内存消耗和执行效率,最后决定采用方法。??? 2016.10.21, czs noted.
            IMatrix CovaOfPredictParam1 = AdjustmentUtil.BQBT(TransferMatrix, CovaOfAprioriParam).Plus(InverseWeightOfTransfer);

            //IMatrix q = CovaOfPredictParam1.Minus(CovaOfPredictParam);
            this.Predicted = new Geo.Algorithm.Adjust.WeightedVector(PredictParam, CovaOfPredictParam1)
            {
                ParamNames = ObsMatrix.ParamNames
            };
        }
コード例 #2
0
 /// <summary>
 /// 实用方法,Q为对称阵,速度较慢?摘抄自 宋力杰测量平差程序设计 P11
 /// </summary>
 /// <param name="B"></param>
 /// <param name="Q">可能非对称</param>
 /// <returns></returns>
 public static IMatrix BQBT(IMatrix B, IMatrix Q)
 {
     return(AdjustmentUtil.BQBT(B, Q));
 }