src/FitnessLandscape/LinearAlgebra.h
fd073de1
 /*
 	All functions needed for Linear Algrebra
 	This is especially used for Least Square Estimates
 */
 
 
 #ifndef __LINEAR_ALGEBRA__
 #define __LINEAR_ALGEBRA__
 
 struct matrix {
 	int r; 
 	int c;
 	double **val;
 };
 
 /*
 	Memory functions
 */
 
 struct matrix MemMat( int m, int n );
 void IdentMat(struct matrix *M);
 void FreeMat( struct matrix *M );
 
 /*
 	Output a matrix
 */
 void PrintMat( struct matrix *M, char *name );
 
 /*
 	Basic matrix operators
 	when opt_free is set to 1, it also free the entry matrix
 */
 
 // :: WHAT ABOUT MEMORY HERE?:: WOULD IT BE BETTER TO MAKE ALL THESE FUNCTIONS VOID AND PASS THE MATRIX AS REFERENCE?:: //
 
 struct matrix MatrixProduct(struct matrix *M_left, struct matrix *M_right, char opt_free);
 void MatrixProductRef(struct matrix *M_left, struct matrix *M_right, struct matrix *Prod, char opt_free);
 
 struct matrix MatrixSum(struct matrix *M1, struct matrix *M2, char opt_free);
 void MatrixSumRef(struct matrix *M1, struct matrix *M2, struct matrix *Sum, char opt_free);
 
 struct matrix MatrixDiff(struct matrix *M1, struct matrix *M2, char opt_free);
 void MatrixDiffRef(struct matrix *M1, struct matrix *M2, struct matrix *Diff, char opt_free);
 
 
 struct matrix MatrixTranspose( struct matrix *M, char opt_free );
 struct matrix Invert_MatrixDiag(struct matrix *D, char opt_free );
 struct matrix MatrixHadarmardProduct(struct matrix *M1, struct matrix *M2, char opt_free);
 void MatrixHadarmardProductRef(struct matrix *M1, struct matrix *M2, struct matrix *HadarmardProduct, char opt_free);
 struct matrix scaleMatrix(struct matrix *M1, float scale, char opt_free);
 void scaleMatrixRef(struct matrix *M1, 	struct matrix *M2, float scale, char opt_free);
 void inverseMatrix(struct matrix *M1, struct matrix *inverseM);
 
 /*
 	From a vector, create a Diag Matrix
 */
 struct matrix CreateMatrixDiag( struct matrix *Vector, char opt_free );
 
 /*
 	From a Matrix, create a Diag Matrix
  */
 struct matrix CreateMatrixDiagMatrix( struct matrix *M1, char opt_free );
 
 /*
 	Return a vector [n,1] from a matrix X [m,n] and a vector Y[m,1]
 	m i the number of observation
 	n is the number of parameter to estimate
 */
 struct matrix LeastSquare( struct matrix *X, struct matrix *Y );
 
 #endif