New function covariance_from_correlation
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 4 May 2017 15:27:31 +0000 (17:27 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 4 May 2017 15:27:31 +0000 (17:27 +0200)
src/math/correlation.c
src/math/correlation.h

index f5bba52379fb0d686e833ce7a87e04991de8c2c2..bac81e4349360ef902a7e99b63768c0cafed42af 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <config.h>
 
+#include <assert.h>
 #include "math/correlation.h"
 
 #include <gsl/gsl_matrix.h>
@@ -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;
+}
index 27621c47c9c3219a63fdb71b3a9ad0e275074585..5771f43e71bda48b1a130e51a0f531321be2853e 100644 (file)
@@ -20,7 +20,9 @@
 
 #include <gsl/gsl_matrix.h>
 
-gsl_matrix * correlation_from_covariance (const gsl_matrix *cv, const gsl_matrix *v);
+gsl_matrix *correlation_from_covariance (const gsl_matrix *cv, const gsl_matrix *v);
+
+gsl_matrix *covariance_from_correlation (const gsl_matrix *corr, const gsl_matrix *v);
 
 double significance_of_correlation (double rho, double w);