File: NormalForms_8h.html

package info (click to toggle)
polylib 5.22.5-4%2Bdfsg
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, trixie
  • size: 14,428 kB
  • sloc: ansic: 16,342; sh: 10,134; makefile: 506
file content (135 lines) | stat: -rw-r--r-- 9,742 bytes parent folder | download | duplicates (4)
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&nbsp;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&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;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&nbsp;</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">&nbsp;</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&nbsp;</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">&nbsp;</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> *&nbsp;</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> **&nbsp;</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> **&nbsp;</td>
          <td class="paramname"> <em>U</em></td><td>&nbsp;</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> *&nbsp;</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> **&nbsp;</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> **&nbsp;</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> **&nbsp;</td>
          <td class="paramname"> <em>Product</em></td><td>&nbsp;</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&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>