//! returns the correlation Matrix public Matrix correlation() { Matrix correlation = covariance(); Vector variances = correlation.diagonal(); for (int i = 0; i < dimension_; i++) { for (int j = 0; j < dimension_; j++) { if (i == j) { if (variances[i].IsEqual(0.0)) { correlation[i, j] = 1.0; } else { correlation[i, j] *= 1.0 / Math.Sqrt(variances[i] * variances[j]); } } else { if (variances[i].IsEqual(0.0) && variances[j].IsEqual(0.0)) { correlation[i, j] = 1.0; } else if (variances[i].IsEqual(0.0) || variances[j].IsEqual(0.0)) { correlation[i, j] = 0.0; } else { correlation[i, j] *= 1.0 / Math.Sqrt(variances[i] * variances[j]); } } } // j for } // i for return(correlation); }