//! 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);
}