1 /*
2  *  jensen_shannon.h
3  *  cufflinks
4  *
5  *  Created by Cole Trapnell on 8/30/10.
6  *  Copyright 2010 Cole Trapnell. All rights reserved.
7  *
8  */
9 
10 #include <boost/numeric/ublas/matrix.hpp>
11 #include <boost/numeric/ublas/matrix_proxy.hpp>
12 #include <boost/numeric/ublas/vector.hpp>
13 #include <boost/numeric/ublas/vector_proxy.hpp>
14 #include <boost/numeric/ublas/io.hpp>
15 
16 #include <vector>
17 #include <Eigen/Dense>
18 
19 namespace ublas = boost::numeric::ublas;
20 
21 double entropy(const ublas::vector<double>& p);
22 
23 double jensen_shannon_distance(std::vector<Eigen::VectorXd>& sample_kappas);
24 
25 void jensen_shannon_gradient(std::vector<Eigen::VectorXd>& sample_kappas,
26 							 double js,
27 							 ublas::vector<double>& gradient);
28 
29 void make_js_covariance_matrix(std::vector<ublas::matrix<double> >& kappa_covariances,
30 							   ublas::matrix<double>& js_covariance);
31