/// <summary> /// Calculation of covariance matrix and return Matrix type /// </summary> /// <param name="Xi">arbitrary number of vectors </param> /// <returns></returns> public static double[,] CovMatrix(IList <double[]> Xi) { if (Xi == null || Xi.Count < 2) { throw new Exception("'data' cannot be null or less than 4 elements!"); } // double[,] matrix = new double[Xi.Count, Xi.Count]; // for (int i = 0; i < Xi.Count; i++) { for (int j = 0; j < Xi.Count; j++) { if (i > j) { matrix[i, j] = matrix[j, i]; } else if (i == j) { matrix[i, j] = VarianceOfS(Xi[i]); } else { matrix[i, j] = Covariance(Xi[i], Xi[j]); } } } //inverse matrix try { var covMat = matrix.Invert(); return(covMat); } catch { return(MatrixEx.Identity(Xi.Count, Xi.Count)); } }