00001 // (C) B. Meister 12/2003-2005 00002 // LSIIT -ICPS 00003 // UMR 7005 CNRS 00004 // Louis Pasteur University (ULP), Strasbourg, France 00005 00006 #ifndef __BM_COMPRESS_PARMS_H__ 00007 #define __BM_COMPRESS_PARMS_H__ 00008 00009 #include "matrix_addon.h" 00010 #include "matrix_permutations.h" 00011 #include <assert.h> 00012 00013 00014 // given a full-row-rank nxm matrix M(made of row-vectors), 00015 // computes the basis K (made of n-m column-vectors) of the integer kernel of M 00016 // so we have: M.K = 0 00017 Matrix * int_ker(Matrix * M); 00018 00019 // Compute the overall period of the variables I for (MI) mod |d|, 00020 // where M is a matrix and |d| a vector 00021 // Produce a diagonal matrix S = (s_k) where s_k is the overall period of i_k 00022 Matrix * affine_periods(Matrix * M, Matrix * d); 00023 00024 // given a matrix B' with m rows and m-vectors C' and d, computes the 00025 // basis of the integer solutions to (B'N+C') mod d = 0. 00026 // returns NULL if there is no integer solution 00027 Matrix * int_mod_basis(Matrix * Bp, Matrix * Cp, Matrix * d); 00028 00029 // given a parameterized constraints matrix with m equalities, computes the compression matrix 00030 // C such that there is an integer solution in the variables space for each value of N', with 00031 // N = Cmp N' (N are the original parameters) 00032 Matrix * compress_parms(Matrix * E, int nb_parms); 00033 00034 // given a matrix of m parameterized equations, compress the parameters and transform the variable space into a n-m space. 00035 Matrix * full_dimensionize(Matrix const * M, int nb_parms, Matrix ** Validity_Lattice); 00036 00037 #endif // __BM_COMPRESS_PARMS_H__