/// <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 }; }
/// <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)); }