在Apache的卡尔曼滤波器代码的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
矩阵中。我哪里出错了?
答案 0 :(得分:0)
事实证明,这是Apache的Kalman过滤器库(org.apache.commons:commons-math3
的先前版本中的错误。升级到最新版本(3.6.1)即可解决此问题。