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 133 134 135
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>polylib: NormalForms.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<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>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File List</span></a></li>
<li><a href="globals.html"><span>File Members</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>NormalForms.h File Reference</h1>
<p><a href="NormalForms_8h_source.html">Go to the source code of this file.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="NormalForms_8h.html#a1d5c5fdbd71ebc1eb2ce3f11ce9fbd5f">Smith</a> (<a class="el" href="structmatrix.html">Matrix</a> *A, <a class="el" href="structmatrix.html">Matrix</a> **U, <a class="el" href="structmatrix.html">Matrix</a> **V, <a class="el" href="structmatrix.html">Matrix</a> **Product)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Smith : This function takes a Matrix A of dim n * l as its input and returns the three matrices U, V and Product such that A = U * Product * V, where U is an unimodular <a class="el" href="structmatrix.html">matrix</a> of dimension n * n and V is an unimodular <a class="el" href="structmatrix.html">matrix</a> of dimension l * l. <a href="#a1d5c5fdbd71ebc1eb2ce3f11ce9fbd5f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="NormalForms_8h.html#acd4e00bd353920b83e3f27a76909b2ed">Hermite</a> (<a class="el" href="structmatrix.html">Matrix</a> *A, <a class="el" href="structmatrix.html">Matrix</a> **H, <a class="el" href="structmatrix.html">Matrix</a> **U)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Hermite : This function takes a Matrix as its input and finds its HNF ( Left form ). <a href="#acd4e00bd353920b83e3f27a76909b2ed"></a><br/></td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="acd4e00bd353920b83e3f27a76909b2ed"></a><!-- doxytag: member="NormalForms.h::Hermite" ref="acd4e00bd353920b83e3f27a76909b2ed" args="(Matrix *A, Matrix **H, Matrix **U)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Hermite </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structmatrix.html">Matrix</a> * </td>
<td class="paramname"> <em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structmatrix.html">Matrix</a> ** </td>
<td class="paramname"> <em>H</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structmatrix.html">Matrix</a> ** </td>
<td class="paramname"> <em>U</em></td><td> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Hermite : This function takes a Matrix as its input and finds its HNF ( Left form ). </p>
<p>Input : A Matrix A (The Matrix A is not necessarily a Polylib <a class="el" href="structmatrix.html">matrix</a>. It is just a <a class="el" href="structmatrix.html">matrix</a> as far as Hermite is concerned. It does not even check if the <a class="el" href="structmatrix.html">matrix</a> is a Polylib <a class="el" href="structmatrix.html">matrix</a> or not) Output : The Hnf <a class="el" href="structmatrix.html">matrix</a> H and the Unimodular <a class="el" href="structmatrix.html">matrix</a> U such that A = H * U.</p>
<p>We use Alan Darte's implementation of Hermite to compute the HNF. Alan Darte's implementation computes the Upper Triangular HNF. So We work on the fact that if A = H * U then A (transpose) = U(transpose) * H (transpose) There are a set of interface functions written in Interface.c which convert a <a class="el" href="structmatrix.html">matrix</a> from Polylib representationt to that of Alan Darte's and vice versa.</p>
<p>This Function Does the Following Step 1 : Given the <a class="el" href="structmatrix.html">matrix</a> A it finds its Transpose. Step 2 : Finds the HNF (Right Form) using Alan Darte's Algorithm. Step 3 : The H1 and U1 obtained in Step2 are both Transposed to get the actual H and U such that A = HU. </p>
<p>Definition at line <a class="el" href="NormalForms_8c_source.html#l00670">670</a> of file <a class="el" href="NormalForms_8c_source.html">NormalForms.c</a>.</p>
<p>References <a class="el" href="NormalForms_8c_source.html#l00604">ConvertDarMattoPolMat()</a>, <a class="el" href="NormalForms_8c_source.html#l00580">ConvertPolMattoDarMat()</a>, <a class="el" href="NormalForms_8c_source.html#l00492">hermite()</a>, <a class="el" href="NormalForms_8c_source.html#l00272">identite()</a>, <a class="el" href="Matop_8c_source.html#l00118">Matrix_Copy()</a>, <a class="el" href="matrix_8c_source.html#l00092">Matrix_Free()</a>, <a class="el" href="types_8h_source.html#l00092">matrix::NbColumns</a>, <a class="el" href="types_8h_source.html#l00092">matrix::NbRows</a>, <a class="el" href="Matop_8c_source.html#l00103">Transpose()</a>, <a class="el" href="NormalForms_8c_source.html#l00297">transpose()</a>, <a class="el" href="source_2arith_2arithmetique_8h_source.html#l00462">value_clear</a>, and <a class="el" href="source_2arith_2arithmetique_8h_source.html#l00458">value_init</a>.</p>
<p>Referenced by <a class="el" href="Lattice_8c_source.html#l00176">AffineHermite()</a>, <a class="el" href="Matop_8c_source.html#l00361">findHermiteBasis()</a>, <a class="el" href="Lattice_8c_source.html#l01267">isfulldim()</a>, <a class="el" href="SolveDio_8c_source.html#l00248">RearrangeMatforSolveDio()</a>, and <a class="el" href="SolveDio_8c_source.html#l00081">SolveDiophantine()</a>.</p>
</div>
</div>
<a class="anchor" id="a1d5c5fdbd71ebc1eb2ce3f11ce9fbd5f"></a><!-- doxytag: member="NormalForms.h::Smith" ref="a1d5c5fdbd71ebc1eb2ce3f11ce9fbd5f" args="(Matrix *A, Matrix **U, Matrix **V, Matrix **Product)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void Smith </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structmatrix.html">Matrix</a> * </td>
<td class="paramname"> <em>A</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structmatrix.html">Matrix</a> ** </td>
<td class="paramname"> <em>U</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structmatrix.html">Matrix</a> ** </td>
<td class="paramname"> <em>V</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structmatrix.html">Matrix</a> ** </td>
<td class="paramname"> <em>Product</em></td><td> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Smith : This function takes a Matrix A of dim n * l as its input and returns the three matrices U, V and Product such that A = U * Product * V, where U is an unimodular <a class="el" href="structmatrix.html">matrix</a> of dimension n * n and V is an unimodular <a class="el" href="structmatrix.html">matrix</a> of dimension l * l. </p>
<p>Product is a diagonal <a class="el" href="structmatrix.html">matrix</a> of dimension n * l.</p>
<p>We use Alan Darte's implementation of Smith for computing the Smith Normal Form </p>
<p>Definition at line <a class="el" href="NormalForms_8c_source.html#l00627">627</a> of file <a class="el" href="NormalForms_8c_source.html">NormalForms.c</a>.</p>
<p>References <a class="el" href="Matop_8c_source.html#l00058">Identity()</a>, <a class="el" href="Matop_8c_source.html#l00118">Matrix_Copy()</a>, <a class="el" href="matrix_8c_source.html#l00092">Matrix_Free()</a>, <a class="el" href="types_8h_source.html#l00092">matrix::NbColumns</a>, <a class="el" href="types_8h_source.html#l00092">matrix::NbRows</a>, <a class="el" href="types_8h_source.html#l00094">matrix::p_Init</a>, and <a class="el" href="NormalForms_8c_source.html#l00383">smith()</a>.</p>
<p>Referenced by <a class="el" href="Lattice_8c_source.html#l00221">AffineSmith()</a>, and <a class="el" href="Lattice_8c_source.html#l00674">Lattice2LatticeUnion()</a>.</p>
</div>
</div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on Wed Nov 25 17:45:27 2009 for polylib by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>
|