在阿帕奇的卡尔曼滤波器代码中的KalmanFilter.java中,我发现了我无法解释的这一行:
} else if (measNoise.getRowDimension() != this.measurementMatrix.getRowDimension() || measNoise.getColumnDimension() != 1) {
throw new MatrixDimensionMismatchException(measNoise.getRowDimension(), measNoise.getColumnDimension(), this.measurementMatrix.getRowDimension(), 1);
}显然,测量噪声应该是N x 1矩阵,measurementMatrix应该是N x ?大小矩阵,但是,我也发现:
RealMatrix s = this.measurementMatrix.multiply(this.errorCovariance).multiply(this.measurementMatrixT).add(this.measurementModel.getMeasurementNoise());因此,this.measurementMatrix.multiply(this.errorCovariance).multiply(this.measurementMatrixT)部分将产生N x N矩阵,该矩阵不能添加到N x 1矩阵中。我哪里错了?
发布于 2018-06-28 15:12:29
事实证明,这是Apache的卡尔曼滤波器库(org.apache.commons:commons-math3)以前版本中的一个错误。升级到最新版本(3.6.1)解决了此问题。
https://stackoverflow.com/questions/50794792
复制相似问题