/// <summary> /// Gets process-noise matrix [6 x 3] where the location is affected by (dt * dt) / 2 and velocity with the factor of dt - integrals of dt. /// Factor 'dt' represents time interval. /// </summary> /// <param name="accelerationNoise">Acceleration noise.</param> /// <param name="timeInterval">Time interval.</param> /// <returns>Process noise matrix.</returns> public static double[,] GetProcessNoise(double accelerationNoise, double timeInterval = 1.0) { double[,] array = new double[6, 3]; array[0, 0] = timeInterval * timeInterval / 2.0; array[1, 0] = timeInterval; array[2, 1] = timeInterval * timeInterval / 2.0; array[3, 1] = timeInterval; array[4, 2] = timeInterval * timeInterval / 2.0; array[5, 2] = timeInterval; double[,] array2 = array; double[,] array3 = Matrix.Diagonal <double>(MatrixExtensions.ColumnCount <double>(array2), accelerationNoise); return(Matrix.Multiply(Matrix.Multiply(array2, array3), Matrix.Transpose <double>(array2))); }