]> git.donarmstrong.com Git - mothur.git/blob - linearalgebra.h
7453f4ebd8b86ed20f530c2e1ba7989808361fb2
[mothur.git] / linearalgebra.h
1 #ifndef LINEARALGEBRA
2 #define LINEARALGEBRA
3
4 /*
5  *  linearalgebra.h
6  *  mothur
7  *
8  *  Created by westcott on 1/7/11.
9  *  Copyright 2011 Schloss Lab. All rights reserved.
10  *
11  */
12
13 #include "mothurout.h"
14
15
16 class LinearAlgebra {
17         
18 public:
19         LinearAlgebra() { m = MothurOut::getInstance(); }
20         ~LinearAlgebra() {}
21         
22         vector<vector<double> > matrix_mult(vector<vector<double> >, vector<vector<double> >);
23     vector<vector<double> >transpose(vector<vector<double> >);
24         void recenter(double, vector<vector<double> >, vector<vector<double> >&);
25         //eigenvectors
26     int tred2(vector<vector<double> >&, vector<double>&, vector<double>&);
27         int qtli(vector<double>&, vector<double>&, vector<vector<double> >&);
28     
29         vector< vector<double> > calculateEuclidianDistance(vector<vector<double> >&, int); //pass in axes and number of dimensions
30         vector< vector<double> > calculateEuclidianDistance(vector<vector<double> >&); //pass in axes
31         vector<vector<double> > getObservedEuclideanDistance(vector<vector<double> >&);
32         double calcPearson(vector<vector<double> >&, vector<vector<double> >&);
33         double calcSpearman(vector<vector<double> >&, vector<vector<double> >&);
34         double calcKendall(vector<vector<double> >&, vector<vector<double> >&);
35     double calcKruskalWallis(vector<spearmanRank>&, double&);
36     double calcWilcoxon(vector<double>&, vector<double>&, double&);
37         
38         double calcPearson(vector<double>&, vector<double>&, double&);
39         double calcSpearman(vector<double>&, vector<double>&, double&);
40         double calcKendall(vector<double>&, vector<double>&, double&);
41     
42         double calcSpearmanSig(double, double, double, double); //length, f^3 - f where f is the number of ties in x, f^3 - f where f is the number of ties in y, sum of squared diffs in ranks. - designed to find the sif of one score.
43     double calcPearsonSig(double, double); //length, coeff.
44     double calcKendallSig(double, double); //length, coeff.
45     
46     vector<double> solveEquations(vector<vector<double> >, vector<double>);
47     vector<float> solveEquations(vector<vector<float> >, vector<float>);
48     vector<vector<double> > getInverse(vector<vector<double> >);
49     double choose(double, double);
50     double normalvariate(double mu, double sigma);
51     vector< vector<double> > lda(vector< vector<double> >& a, vector<string> groups, vector< vector<double> >& means, bool&); //Linear discriminant analysis - a is [features][valuesFromGroups] groups indicates which group each sampling comes from. For example if groups = early, late, mid, early, early. a[0][0] = value for feature0 from groupEarly.
52     int svd(vector< vector<double> >& a, vector<double>& w, vector< vector<double> >& v); //Singular value decomposition
53 private:
54         MothurOut* m;
55         
56         double pythag(double, double);
57     double betacf(const double, const double, const double);
58     double betai(const double, const double, const double);
59     double gammln(const double);
60     double gammq(const double, const double);
61     double gser(double&, const double, const double, double&);
62     double gcf(double&, const double, const double, double&);
63     double erfcc(double);
64     double gammp(const double, const double);
65     double pnorm(double x);
66     
67     double ran0(int&); //for testing 
68     double ran1(int&); //for testing
69     double ran2(int&); //for testing
70     double ran3(int&); //for testing
71     double ran4(int&); //for testing
72     void psdes(unsigned long &, unsigned long &); //for testing
73     
74     void ludcmp(vector<vector<double> >&, vector<int>&, double&);
75     void lubksb(vector<vector<double> >&, vector<int>&, vector<double>&);
76     
77     void ludcmp(vector<vector<float> >&, vector<int>&, float&);
78     void lubksb(vector<vector<float> >&, vector<int>&, vector<float>&);
79     
80 };
81
82 #endif
83