X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Fcorrelation.c;h=bac81e4349360ef902a7e99b63768c0cafed42af;hb=bc5c6c1953ada1737620e27e6a968392a38d8c8f;hp=f5bba52379fb0d686e833ce7a87e04991de8c2c2;hpb=6e097c89af440da90b43ce90864394c4d0c843d5;p=pspp diff --git a/src/math/correlation.c b/src/math/correlation.c index f5bba52379..bac81e4349 100644 --- a/src/math/correlation.c +++ b/src/math/correlation.c @@ -16,6 +16,7 @@ #include +#include #include "math/correlation.h" #include @@ -68,3 +69,28 @@ correlation_from_covariance (const gsl_matrix *cv, const gsl_matrix *v) return corr; } + +gsl_matrix * +covariance_from_correlation (const gsl_matrix *corr, const gsl_matrix *v) +{ + size_t i, j; + assert (corr->size1 == corr->size2); + + gsl_matrix *output = gsl_matrix_calloc (corr->size1, corr->size2); + + for (i = 0 ; i < corr->size1; ++i) + { + for (j = 0 ; j < corr->size2; ++j) + { + double r = gsl_matrix_get (corr, i, j); + + r *= sqrt (gsl_matrix_get (v, i, j)) + * + sqrt (gsl_matrix_get (v, j, i)); + + gsl_matrix_set (output, i, j, r); + } + } + + return output; +}