#ifndef ___MATRIX_UTIL_H #define ___MATRIX_UTIL_H #include "definitions.h" #include "logFile.h" #include "errorMsg.h" #include #include #include #include class sequenceContainer; using namespace std; void printMatrix(const VVdouble &mat, ostream &out); void printMatrix(const VVint &mat, ostream &out) ; void readMatrixFromFile(VVdouble &mat,string fileName); Vdouble getDiagonalFromMatrix(VVdouble &mat); Vdouble getSubDiagonalFromMatrix(VVdouble &mat); //get the first norm sum{abs(Mij)} MDOUBLE getMatrixNorm(const VVdouble &mat); // Same for vector of Matrices MDOUBLE getVMatrixNorm(const VVVdouble &mat); //get the specific coordinates sum from vector of Matrices MDOUBLE getVMatrixJK(const VVVdouble &mat, const int j, const int k); template void resizeMatrix(vector > &mat, int rows, int columns){ mat.resize(rows); for (int i=0; i void unitMatrix(vector > &m, int n){ resizeMatrix(m,n,n); for (int i=0; i void zeroMatrix(vector > &m){ for (int i=0; i < m.size(); i++) for (int j=0; j void oneMatrix(vector > &m){ for (int i=0; i < m.size(); i++) for (int j=0; j vector > multiplyMatrixes(vector > &mat1, vector > &mat2){ vector > mat; if ((mat1.size()==0) || (mat2.size() ==0)) errorMsg::reportError("Error in multiplyMatrixes, one of the matrices inputted is of size 0");; int numColumns=mat1[0].size(); int numRows = mat2.size(); resizeMatrix(mat,numColumns,numRows); for (int i=0; i vector > multiplyMatrixByScalar(const vector > &mat, MDOUBLE scalar) { vector > mat_copy = mat; for (int i=0; i vector > add(const vector > &mat1,const vector > &mat2){ if (mat1.size()!=mat2.size()) errorMsg::reportError("different sized matrices in matrixUtils::add"); vector > newMat(mat1.size()); for (int i=0;i void printVec(vector< _T> &vec,ostream &out=cout,bool printVertical=true) { for (int i=0; i &vec1, const vector &vec2); void appendVectors(Vint &vec1, const Vint &vec2); void appendVectors(VVdouble &vec1, const VVdouble &vec2); Vint complementBinaryVec(vector &bufferVec) ; // returns complementary binary vector void readDoubleVecFromFile(Vdouble &vec,string fileName); //reads a vertical vector (separated by \n) void normalize(Vdouble &vec); void scaleByAverage(Vdouble &vec); //solve nxn linear equations of the form Ax=b; return x; Vdouble solveLinearEquations(VVdouble A,Vdouble b); // functions from numerical recipes that solve nxn linear equations void lubksb(VVdouble &a, Vdouble &indx, Vdouble &b); void ludcmp(VVdouble &a, Vdouble &indx, MDOUBLE &d); void resize_VVVV(int dim1, int dim2, int dim3, int dim4, VVVVdouble& vetor); void resize_VVV(int dim1, int dim2, int dim3, VVVdouble& vetor); #endif