Exemplo n.º 1
0
        /// <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));
            }
        }