1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>polylib: matrix_addon.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<h1>matrix_addon.h</h1><a href="matrix__addon_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/** </span>
<a name="l00002"></a>00002 <span class="comment"> * Polylib matrix addons</span>
<a name="l00003"></a>00003 <span class="comment"> * Mainly, deals with polyhedra represented in implicit form (set of</span>
<a name="l00004"></a>00004 <span class="comment"> * constraints).</span>
<a name="l00005"></a>00005 <span class="comment"> * @author Benoit Meister </span>
<a name="l00006"></a>00006 <span class="comment"> */</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="preprocessor">#ifndef __BM_MATRIX_ADDON_H__</span>
<a name="l00009"></a>00009 <span class="preprocessor"></span><span class="preprocessor">#define __BM_MATRIX_ADDON_H__</span>
<a name="l00010"></a>00010 <span class="preprocessor"></span>
<a name="l00011"></a>00011 <span class="preprocessor">#include<<a class="code" href="polylib_8h.html">polylib/polylib.h</a>></span>
<a name="l00012"></a>00012 <span class="preprocessor">#include<<a class="code" href="assert_8h.html">assert.h</a>></span>
<a name="l00013"></a>00013 <span class="comment"></span>
<a name="l00014"></a>00014 <span class="comment">/** Shortcut for Matrix_Print */</span>
<a name="l00015"></a><a class="code" href="matrix__addon_8h.html#11468159c7fa7d75fadfa10e2e929fee">00015</a> <span class="preprocessor">#define show_matrix(M) { printf(#M"= \n"); \</span>
<a name="l00016"></a>00016 <span class="preprocessor"> if (M!=NULL) { \</span>
<a name="l00017"></a>00017 <span class="preprocessor"> Matrix_Print(stderr,P_VALUE_FMT,(M));} \</span>
<a name="l00018"></a>00018 <span class="preprocessor"> else {printf("<NULL>\n");} \</span>
<a name="l00019"></a>00019 <span class="preprocessor"> } </span>
<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">/** </span>
<a name="l00022"></a>00022 <span class="comment"> * Allocates a matrix if it is null, or else asserts that it has at least a</span>
<a name="l00023"></a>00023 <span class="comment"> * certain size */</span>
<a name="l00024"></a><a class="code" href="matrix__addon_8h.html#4f34dad95751e0142b7b9404fc44d0f0">00024</a> <span class="preprocessor">#define ensureMatrix(M, r, c) { if (M==NULL) M = Matrix_Alloc(r,c); \</span>
<a name="l00025"></a>00025 <span class="preprocessor"> else assert (M->NbRows>=r && M->NbColumns>=c); \</span>
<a name="l00026"></a>00026 <span class="preprocessor"> } </span>
<a name="l00027"></a>00027 <span class="preprocessor"></span>
<a name="l00028"></a>00028 <span class="comment">/* Creates a view of the constraints of a polyhedron as a Matrix * */</span>
<a name="l00029"></a>00029 <a class="code" href="structmatrix.html">Matrix</a> * <a class="code" href="matrix__addon_8c.html#495de3cced5c0eecf74aef91b05502dd" title="Idmatrix_addon.c,v 1.17 2007/03/18 18:49:08 skimo Exp ">constraintsView</a>(<a class="code" href="structpolyhedron.html">Polyhedron</a> * P);
<a name="l00030"></a>00030
<a name="l00031"></a>00031 <span class="comment">/* "Frees" a view of the constraints of a polyhedron */</span>
<a name="l00032"></a>00032 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#a0cc9da9320a0f253db72e78f4f6e56b" title="&quot;Frees&quot; a view of the constraints of a polyhedron">constraintsView_Free</a>(<a class="code" href="structmatrix.html">Matrix</a> * M);
<a name="l00033"></a>00033
<a name="l00034"></a>00034 <span class="comment">/* splits a matrix of constraints M into a matrix of equalities Eqs and a</span>
<a name="l00035"></a>00035 <span class="comment"> matrix of inequalities Ineqs allocs the new matrices. */</span>
<a name="l00036"></a>00036 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#288db1ffeb5425aada82cabf5c824bc4" title="splits a matrix of constraints M into a matrix of equalities Eqs and a matrix of...">split_constraints</a>(<a class="code" href="structmatrix.html">Matrix</a> <span class="keyword">const</span> * M, <a class="code" href="structmatrix.html">Matrix</a> ** Eqs, <a class="code" href="structmatrix.html">Matrix</a> **Ineqs);
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="comment">/* returns the dim-dimensional identity matrix */</span>
<a name="l00039"></a>00039 <a class="code" href="structmatrix.html">Matrix</a> * <a class="code" href="matrix__addon_8c.html#33f64eb039ac943c1bddbafc3be3ece6">Identity_Matrix</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim);
<a name="l00040"></a>00040
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#db1631ef2ddb3b386742b881b30f8ce6" title="returns the dim-dimensional identity matrix.">Matrix_identity</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim, <a class="code" href="structmatrix.html">Matrix</a> **I);
<a name="l00042"></a>00042
<a name="l00043"></a>00043 <span class="comment">/* given a n x n integer transformation matrix transf, compute its inverse M/g,</span>
<a name="l00044"></a>00044 <span class="comment"> where M is a nxn integer matrix. g is a common denominator for elements of</span>
<a name="l00045"></a>00045 <span class="comment"> (transf^{-1})*/</span>
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#b736f7ec39f7b625397e965e8b612ad2" title="given a n x n integer transformation matrix transf, compute its inverse M/g, where...">mtransformation_inverse</a>(<a class="code" href="structmatrix.html">Matrix</a> * transf, <a class="code" href="structmatrix.html">Matrix</a> ** inv, Value * g);
<a name="l00047"></a>00047
<a name="l00048"></a>00048 <span class="comment">/* simplifies a matrix seen as a polyhedron, by dividing its rows by the gcd of</span>
<a name="l00049"></a>00049 <span class="comment">their elements. */</span>
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#ce44097b2d9d40d05934971b9716af89" title="simplify a matrix seen as a polyhedron, by dividing its rows by the gcd of their...">mpolyhedron_simplify</a>(<a class="code" href="structmatrix.html">Matrix</a> * polyh);
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="comment">/* inflates a polyhedron (represented as a matrix) P, so that the apx of its</span>
<a name="l00053"></a>00053 <span class="comment"> Ehrhart Polynomial is an upper bound of the Ehrhart polynomial of P WARNING:</span>
<a name="l00054"></a>00054 <span class="comment"> this inflation is supposed to be applied on full-dimensional polyhedra. */</span>
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#c4b68d480196756e0deffafb3d99ecc7" title="inflates a polyhedron (represented as a matrix) P, so that the apx of its Ehrhart...">mpolyhedron_inflate</a>(<a class="code" href="structmatrix.html">Matrix</a> * polyh, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nb_parms);
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <span class="comment">/* deflates a polyhedron (represented as a matrix) P, so that the apx of its</span>
<a name="l00058"></a>00058 <span class="comment"> Ehrhart Polynomial is a lower bound of the Ehrhart polynomial of P WARNING:</span>
<a name="l00059"></a>00059 <span class="comment"> this deflation is supposed to be applied on full-dimensional polyhedra. */</span>
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#0f0ba73176f5316a02e849b8c210204a" title="deflates a polyhedron (represented as a matrix) P, so that the apx of its Ehrhart...">mpolyhedron_deflate</a>(<a class="code" href="structmatrix.html">Matrix</a> * polyh, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nb_parms);
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="comment">/* use an eliminator row to eliminate a variable in a victim row (without</span>
<a name="l00063"></a>00063 <span class="comment">changing the sign of the victim row -> important if it is an inequality). */</span>
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#79d19aa329285819b31bc7a602241842" title="use an eliminator row to eliminate a variable in a victim row (without changing the...">eliminate_var_with_constr</a>(<a class="code" href="structmatrix.html">Matrix</a> * Eliminator,
<a name="l00065"></a>00065 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> eliminator_row, <a class="code" href="structmatrix.html">Matrix</a> * Victim,
<a name="l00066"></a>00066 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> victim_row,
<a name="l00067"></a>00067 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> var_to_elim);
<a name="l00068"></a>00068
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <span class="comment">/* ----- PARTIAL MAPPINGS ----- */</span>
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="comment">/* compresses the last vars/pars of the polyhedron M expressed as a polylib</span>
<a name="l00073"></a>00073 <span class="comment"> matrix</span>
<a name="l00074"></a>00074 <span class="comment"> - adresses the full-rank compressions only</span>
<a name="l00075"></a>00075 <span class="comment"> - modfies M */</span>
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#44f487e1b38f0f47c115d2115087a017" title="compress the last vars/pars of the polyhedron M expressed as a polylib matrixadresses...">mpolyhedron_compress_last_vars</a>(<a class="code" href="structmatrix.html">Matrix</a> * M, <a class="code" href="structmatrix.html">Matrix</a> * compression);
<a name="l00077"></a><a class="code" href="matrix__addon_8h.html#9af03fc1d2667573752d7e593d8a50c3">00077</a> <span class="preprocessor">#define Constraints_compressLastVars(a, b) mpolyhedron_compress_last_vars(a, b)</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span>
<a name="l00079"></a>00079 <span class="comment">/* uses a set of m equalities Eqs to eliminate m variables in the polyhedron.</span>
<a name="l00080"></a>00080 <span class="comment"> Ineqs represented as a matrix eliminates the m first variables </span>
<a name="l00081"></a>00081 <span class="comment">- assumes that Eqs allows to eliminate the m equalities </span>
<a name="l00082"></a>00082 <span class="comment">- modifies Ineqs */</span>
<a name="l00083"></a>00083 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="matrix__addon_8c.html#649c9050ca9d6229d5b48e966da1f35c" title="use a set of m equalities Eqs to eliminate m variables in the polyhedron Ineqs represented...">mpolyhedron_eliminate_first_variables</a>(<a class="code" href="structmatrix.html">Matrix</a> * Eqs,
<a name="l00084"></a>00084 <a class="code" href="structmatrix.html">Matrix</a> * Ineqs);
<a name="l00085"></a><a class="code" href="matrix__addon_8h.html#f4e227a2b50484a6befcc1e33933eb3a">00085</a> <span class="preprocessor">#define Constraints_eliminateFirstVars(a,b) mpolyhedron_eliminate_first_variables(a,b)</span>
<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00087"></a>00087 <span class="comment">/** returns a contiguous submatrix of a matrix. */</span>
<a name="l00088"></a>00088 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#33fec91bb879b7b4dda814ad9d33f41b" title="returns a contiguous submatrix of a matrix.">Matrix_subMatrix</a>(<a class="code" href="structmatrix.html">Matrix</a> * M, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sr, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sc,
<a name="l00089"></a>00089 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbR, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbC, <a class="code" href="structmatrix.html">Matrix</a> ** sub);<span class="comment"></span>
<a name="l00090"></a>00090 <span class="comment">/**</span>
<a name="l00091"></a>00091 <span class="comment"> * Cloning function. Similar to Matrix_Copy() but allocates the target matrix</span>
<a name="l00092"></a>00092 <span class="comment"> * if it is set to NULL.</span>
<a name="l00093"></a>00093 <span class="comment"> */</span>
<a name="l00094"></a>00094 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#8269bc80b6beba6d58a4c5b029f04bbf" title="Cloning function.">Matrix_clone</a>(<a class="code" href="structmatrix.html">Matrix</a> * M, <a class="code" href="structmatrix.html">Matrix</a> ** Cl);
<a name="l00095"></a>00095 <span class="comment"></span>
<a name="l00096"></a>00096 <span class="comment">/**</span>
<a name="l00097"></a>00097 <span class="comment"> * Copies a contiguous submatrix of M1 into M2, at the indicated position.</span>
<a name="l00098"></a>00098 <span class="comment"> * M1 and M2 are assumed t be allocated already.</span>
<a name="l00099"></a>00099 <span class="comment"> */</span>
<a name="l00100"></a>00100 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#cb90cceb8e7a674a3d5796a1402f0c9e" title="Copies a contiguous submatrix of M1 into M2, at the indicated position.">Matrix_copySubMatrix</a>(<a class="code" href="structmatrix.html">Matrix</a> *M1,
<a name="l00101"></a>00101 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sr1, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sc1,
<a name="l00102"></a>00102 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbR, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbC,
<a name="l00103"></a>00103 <a class="code" href="structmatrix.html">Matrix</a> * M2,
<a name="l00104"></a>00104 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sr2, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sc2);
<a name="l00105"></a>00105 <span class="comment"></span>
<a name="l00106"></a>00106 <span class="comment">/** </span>
<a name="l00107"></a>00107 <span class="comment"> * given a matrix M into -M</span>
<a name="l00108"></a>00108 <span class="comment"> */</span>
<a name="l00109"></a>00109 <span class="keywordtype">void</span> <a class="code" href="matrix__addon_8c.html#cbbded0c02e89b1a7b6b08ee3f396986" title="transforms a matrix M into -M">Matrix_oppose</a>(<a class="code" href="structmatrix.html">Matrix</a> * M);
<a name="l00110"></a>00110
<a name="l00111"></a>00111 <span class="preprocessor">#endif </span><span class="comment">/* __BM_MATRIX_ADDON_H__ */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Sep 15 18:33:59 2009 for polylib by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>
|