SSL chap5.html
Sprache: HTML
|
|
| products/Sources/formale Sprachen/GAP/pkg/cvec/doc/chap5.html |
 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (cvec) - Chapter 5: Matrices</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap5" onload="jscontent()">
<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a> <a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chapInd.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap4.html">[Previous Chapter]</a> <a href="chap6.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap5_mj.html">[MathJax on]</a></p>
<p><a id="X812CCAB278643A59" name="X812CCAB278643A59"></a></p>
<div class="ChapSects"><a href="chap5.html#X812CCAB278643A59">5 <span class="Heading">Matrices</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X788B78DE82579F3D">5.1 <span class="Heading">Creation</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X85E5342B7E2C0E83">5.1-1 CMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X83220C57790E002F">5.1-2 CMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7BAB2E0A7D00D552">5.1-3 CMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X815BE0D27A5110FD">5.1-4 CMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7CB106397A3F21BE">5.1-5 CVEC_ZeroMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8045240986D4EF22">5.1-6 CVEC_IdentityMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X849B5B9B7BD65AA2">5.1-7 CVEC_RandomMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X78BD0AD885D4C2FF">5.1-8 MutableCopyMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X879384D479EB1D82">5.1-9 Matrix</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X7C9F7D327BAECA5E">5.2 <span class="Heading">Matrices as lists</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X795EC9D67E34DAB0">5.2-1 Add</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7E98B11B79BA9167">5.2-2 Remove</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X80ED7496817F0E16">5.2-3 ELM_LIST</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X80748BB47CB7FA59">5.2-4 ASS_LIST</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X83C78ABB810BBF5B">5.2-5 ELMS_LIST</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X79E164537CC34B14">5.2-6 ASSS_LIST</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7E22E27979A2DD7C">5.2-7 Length</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X846BC7107C352031">5.2-8 ShallowCopy</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7ECE9056792F28BA">5.2-9 Collected</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8727F2928467C2F9">5.2-10 DuplicateFreeList</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X79E31DB27C82D6E1">5.2-11 Append</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C86D7F7795125F0">5.2-12 Filtered</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X82AACD43853C24D1">5.2-13 Unbind</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X79862FF37B75BF48">5.3 <span class="Heading">Arithmetic</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X819B1A8A7DE1EE88"><code>5.3-1 \+</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X814AFD8E8377D4DB"><code>5.3-2 \-</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X82AFC3A987140922">5.3-3 AdditiveInverseSameMutability</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8548396F7D4CAC21">5.3-4 AdditiveInverseMutable</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X848404F57FBFFE7A"><code>5.3-5 \*</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7DAFB0227C5529C6"><code>5.3-6 \*</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8255927C7923A294"><code>5.3-7 \^</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7F673C397A919D81"><code>5.3-8 \*</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X781AD339797C0625">5.3-9 ZeroSameMutability</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X796D9B2C83C0667B">5.3-10 ZeroMutable</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7ED3BC7D8198EE2E">5.3-11 OneSameMutability</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7FBD3ABF80EB659C">5.3-12 OneMutable</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X78F9A4028122E39B">5.3-13 InverseMutable</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8593B0F886BBD8A7">5.3-14 InverseSameMutability</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X87F304F3826A7063">5.3-15 TransposedMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8634C79E7DB22934">5.3-16 KroneckerProduct</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X845009E07A011131">5.4 <span class="Heading">Comparison of matrices and other information</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7E2074A77AFF518A">5.4-1 =</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7AA30F9B7CA1A376">5.4-2 LT</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X86A0FAA57E4C26FC">5.4-3 IsZero</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X814D78347858EC13">5.4-4 IsOne</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7FF01BF686AD0623">5.4-5 IsDiagonalMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7ECFBD9F8664982B">5.4-6 IsUpperTriangularMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X81671CFD7CFE4819">5.4-7 IsLowerTriangularMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X875B076C8559CAF0">5.4-8 CVEC_HashFunctionForCMats</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7D5E6AF77B09AB35">5.4-9 ChooseHashFunction</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X7B54DF167CFC6C0F">5.5 <span class="Heading">Slicing and submatrices</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X838B45F7790E9FDF">5.5-1 ExtractSubMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7ED9E5D4809E3B50">5.5-2 CopySubMatrix</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X805F24017D4348E2">5.6 <span class="Heading">Information about matrices</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7B5FF52186205C5E">5.6-1 BaseField</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7EC55E298313BCB1">5.6-2 Characteristic</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7E9F7B7E7BEDA69E">5.6-3 DegreeFFE</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C6624AF7CEAA74D">5.6-4 DefaultField</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X78DA04477DDD0ACE">5.7 <span class="Heading">Input and output</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7DF1D51F7924429A">5.7-1 CVEC_WriteMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X794D936C7E99F805">5.7-2 CVEC_WriteMatToFile</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X78F898D17D9E522C">5.7-3 CVEC_WriteMatsToFile</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X79E47CB5831D48CC">5.7-4 CVEC_ReadMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X824FA01878D60EE1">5.7-5 CVEC_ReadMatFromFile</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X79397B1D78E0746A">5.7-6 CVEC_ReadMatsFromFile</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X7DA0D38A7D5DBDFF">5.8 <span class="Heading">Grease</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7DF5A56F8747DD45">5.8-1 GreaseMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7E8A9C7E7E014FC7">5.8-2 UnGreaseMat</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X7A0D26B180BEDE37">5.9 <span class="Heading">Everything else</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7B97048782F7EE43">5.9-1 Randomize</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8114198F7D6486CB">5.9-2 OverviewMat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X84AAF220841589D9">5.9-3 Unpack</a></span>
</div></div>
</div>
<h3>5 <span class="Heading">Matrices</span></h3>
<p>A compressed matrix (a <code class="code">cmat</code>) behaves very much like a list of <code class="code">cvec</code>s. However, it insists on having only <code class="code">cvec</code>s of the same length and over the same base field as its elements, and it insists on being a list without holes. Apart from these restrictions, you can use all the standard list operations with <code class="code">cmat</code>s (see Section <a href="chap5.html#X7C9F7D327BAECA5E"><span class="RefLink">5.2</span></a>.</p>
<p>In the rest of this chapter, we document all methods for matrices for the sake of completeness. If they behave exactly as is to be expected by the already defined operation no further explanation is given.</p>
<p><a id="X788B78DE82579F3D" name="X788B78DE82579F3D"></a></p>
<h4>5.1 <span class="Heading">Creation</span></h4>
<p>The basic operation to create new <code class="code">cmat</code>s is <code class="file">CMat</code>, for which a variety of methods is available:</p>
<p><a id="X85E5342B7E2C0E83" name="X85E5342B7E2C0E83"></a></p>
<h5>5.1-1 CMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CMat</code>( <var class="Arg">l</var>, <var class="Arg">cl</var>[, <var class="Arg">dochecks</var>] )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a new <code class="code">cmat</code></p>
<p>A new <code class="code">cmat</code> is created with rows being in the <code class="code">cvecclass</code> <var class="Arg">cl</var>. All elements of the list <var class="Arg">l</var> must be <code class="code">cvec</code>s in that class. The boolean flag <var class="Arg">dochecks</var> indicates, whether this should be checked or not. If the flag is omitted, checks are performed. Note that <var class="Arg">l</var> may be the empty list.</p>
<p><a id="X83220C57790E002F" name="X83220C57790E002F"></a></p>
<h5>5.1-2 CMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CMat</code>( <var class="Arg">l</var>[, <var class="Arg">dochecks</var>] )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a new <code class="code">cmat</code></p>
<p>A new <code class="code">cmat</code> is created with rows being in the <code class="code">cvecclass</code> of the vectors in <var class="Arg">l</var>. All elements of the list <var class="Arg">l</var> must be <code class="code">cvec</code>s in the same class. The boolean flag <var class="Arg">dochecks</var> indicates, whether this should be checked or not. If the flag is omitted, checks are performed. Note that <var class="Arg">l</var> may not be the empty list.</p>
<p><a id="X7BAB2E0A7D00D552" name="X7BAB2E0A7D00D552"></a></p>
<h5>5.1-3 CMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CMat</code>( <var class="Arg">l</var>, <var class="Arg">v</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a new <code class="code">cmat</code></p>
<p>A new <code class="code">cmat</code> is created with rows being in the <code class="code">cvecclass</code> of the <code class="code">cvec</code> <var class="Arg">v</var>. All elements of the list <var class="Arg">l</var> must be <code class="code">cvec</code>s in the that same class. This is checked. Note that <var class="Arg">l</var> may be the empty list.</p>
<p><a id="X815BE0D27A5110FD" name="X815BE0D27A5110FD"></a></p>
<h5>5.1-4 CMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CMat</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a new <code class="code">cmat</code></p>
<p>Creates a new <code class="code">cmat</code> which is equal to <var class="Arg">m</var>, which must be a compressed matrix in the filter <code class="file">IsGF2MatrixRep</code> or the filter <code class="file">Is8BitMatrixRep</code>.</p>
<p>There are some methods to create <code class="code">cmat</code>s of special form:</p>
<p><a id="X7CB106397A3F21BE" name="X7CB106397A3F21BE"></a></p>
<h5>5.1-5 CVEC_ZeroMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CVEC_ZeroMat</code>( <var class="Arg">rows</var>, <var class="Arg">cl</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CVEC_ZeroMat</code>( <var class="Arg">rows</var>, <var class="Arg">cols</var>, <var class="Arg">p</var>, <var class="Arg">d</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a new <code class="code">cmat</code></p>
<p>Creates a zero matrix with <var class="Arg">rows</var> rows and <var class="Arg">cols</var> columns over the field <code class="code">GF(<var class="Arg">p</var>,<var class="Arg">d</var>)</code>. If a <code class="code">cvecclass</code> <var class="Arg">cl</var> is given, the number of columns and the field follow from that.</p>
<p><a id="X8045240986D4EF22" name="X8045240986D4EF22"></a></p>
<h5>5.1-6 CVEC_IdentityMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CVEC_IdentityMat</code>( <var class="Arg">cl</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CVEC_IdentityMat</code>( <var class="Arg">n</var>, <var class="Arg">p</var>, <var class="Arg">d</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a new <code class="code">cmat</code></p>
<p>Creates an identity matrix with <var class="Arg">n</var> rows and columns over the field <code class="code">GF(<var class="Arg">p</var>,<var class="Arg">d</var>)</code>. If a <code class="code">cvecclass</code> <var class="Arg">cl</var> is given, the number of columns and the field follow from that.</p>
<p><a id="X849B5B9B7BD65AA2" name="X849B5B9B7BD65AA2"></a></p>
<h5>5.1-7 CVEC_RandomMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CVEC_RandomMat</code>( <var class="Arg">rows</var>, <var class="Arg">cl</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CVEC_RandomMat</code>( <var class="Arg">rows</var>, <var class="Arg">cols</var>, <var class="Arg">p</var>, <var class="Arg">d</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a new <code class="code">cmat</code></p>
<p>Creates a random matrix with <var class="Arg">rows</var> rows and <var class="Arg">cols</var> columns over the field <code class="code">GF(<var class="Arg">p</var>,<var class="Arg">d</var>)</code>. If a <code class="code">cvecclass</code> <var class="Arg">cl</var> is given, the number of columns and the field follow from that. Note that this is not particularly efficient.</p>
<p><a id="X78BD0AD885D4C2FF" name="X78BD0AD885D4C2FF"></a></p>
<h5>5.1-8 MutableCopyMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MutableCopyMat</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a mutable copy of <var class="Arg">m</var></p>
<p>Creates a mutable copy of the <code class="code">cmat</code> <var class="Arg">m</var>.</p>
<p><a id="X879384D479EB1D82" name="X879384D479EB1D82"></a></p>
<h5>5.1-9 Matrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Matrix</code>( <var class="Arg">vectorlist</var>, <var class="Arg">vector</var> )</td><td class="tdright">( method )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MatrixNC</code>( <var class="Arg">vectorlist</var>, <var class="Arg">vector</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a new mutable <code class="code">cmat</code></p>
<p>Returns a new <code class="code">cmat</code> containing the vectors in <var class="Arg">vectorlist</var> as rows. The elements in <var class="Arg">vectorlist</var> must be vectors of the same length as the sample vector <var class="Arg">vector</var> and must live over the same base field. The sample vector is always necessary to be able to use the method selection. The <var class="Arg">vectorlist</var> may be empty. The NC method does not check the inputs.</p>
<p><a id="X7C9F7D327BAECA5E" name="X7C9F7D327BAECA5E"></a></p>
<h4>5.2 <span class="Heading">Matrices as lists</span></h4>
<p>In this section, arguments named <var class="Arg">m</var> and <var class="Arg">n</var> are <code class="code">cmat</code>s and <var class="Arg">v</var> and <var class="Arg">w</var> are <code class="code">cvec</code>s that fit into the corresponding matrices. <var class="Arg">pos</var> is an integer between <span class="SimpleMath">1</span> and <code class="code">Length(m)</code> if it applies to the matrix <var class="Arg">m</var>.</p>
<p><a id="X795EC9D67E34DAB0" name="X795EC9D67E34DAB0"></a></p>
<h5>5.2-1 Add</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Add</code>( <var class="Arg">m</var>, <var class="Arg">v</var>[, <var class="Arg">pos</var>] )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: nothing</p>
<p>Behaves exactly as expected. Note that one can only add <code class="code">cvec</code>s of the right length and over the right field.</p>
<p><a id="X7E98B11B79BA9167" name="X7E98B11B79BA9167"></a></p>
<h5>5.2-2 Remove</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Remove</code>( <var class="Arg">m</var>[, <var class="Arg">pos</var>] )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <code class="code">cvec</code></p>
<p>Behaves exactly as expected. No holes can be made.</p>
<p><a id="X80ED7496817F0E16" name="X80ED7496817F0E16"></a></p>
<h5>5.2-3 ELM_LIST</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ELM_LIST</code>( <var class="Arg">m</var>, <var class="Arg">pos</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a <code class="code">cvec</code></p>
<p>Behaves exactly as expected. Note that this method is triggered when one uses the (reading) syntax <q><code class="code">m[pos]</code></q>.</p>
<p><a id="X80748BB47CB7FA59" name="X80748BB47CB7FA59"></a></p>
<h5>5.2-4 ASS_LIST</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ASS_LIST</code>( <var class="Arg">m</var>, <var class="Arg">pos</var>, <var class="Arg">v</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: nothing</p>
<p>Behaves exactly as expected. Note that one can only assign to positions such that the resulting matrix has no holes. This method is triggered when one uses the (assignment) syntax <q><code class="code">m[pos] := </code></q>.</p>
<p><a id="X83C78ABB810BBF5B" name="X83C78ABB810BBF5B"></a></p>
<h5>5.2-5 ELMS_LIST</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ELMS_LIST</code>( <var class="Arg">m</var>, <var class="Arg">poss</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a sub <code class="code">cmat</code></p>
<p>Behaves exactly as expected: A new matrix containing a subset of the rows is returned. Note that the row vectors are the same <strong class="pkg">GAP</strong> objects as the corresponding rows of <var class="Arg">m</var>. This operation is triggered by the expression <var class="Arg">m</var><code class="code">{<var class="Arg">poss</var>}</code>.</p>
<p><a id="X79E164537CC34B14" name="X79E164537CC34B14"></a></p>
<h5>5.2-6 ASSS_LIST</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ASSS_LIST</code>( <var class="Arg">m</var>, <var class="Arg">poss</var>, <var class="Arg">vals</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: nothing</p>
<p>Behaves exactly as expected. Of course all values in <var class="Arg">vals</var> must be <code class="code">cvec</code>s over the correct field and the <code class="code">cmat</code> <var class="Arg">m</var> must be a dense list afterwards. This operation is triggered by the statement <var class="Arg">m</var><code class="code">{<var class="Arg">poss</var>} := <var class="Arg">vals</var></code>.</p>
<p><a id="X7E22E27979A2DD7C" name="X7E22E27979A2DD7C"></a></p>
<h5>5.2-7 Length</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Length</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the number of rows of the <code class="code">cmat</code> <var class="Arg">m</var></p>
<p>Behaves exactly as expected.</p>
<p><a id="X846BC7107C352031" name="X846BC7107C352031"></a></p>
<h5>5.2-8 ShallowCopy</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ShallowCopy</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a new matrix containing the same rows than the <code class="code">cmat</code> <var class="Arg">m</var></p>
<p>Behaves exactly as expected. Note that the rows of the result are the very same <strong class="pkg">GAP</strong> objects than the rows of the <code class="code">cmat</code> <var class="Arg">m</var>.</p>
<p><a id="X7ECE9056792F28BA" name="X7ECE9056792F28BA"></a></p>
<h5>5.2-9 Collected</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Collected</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the same as the collected list of the rows of <var class="Arg">m</var></p>
<p>Behaves exactly as expected. Just uses the standard <code class="func">Collected</code> (<a href="../../../doc/ref/chap21_mj.html#X7ECE9056792F28BA"><span class="RefLink">Reference: Collected</span></a>) on the list of rows.</p>
<p><a id="X8727F2928467C2F9" name="X8727F2928467C2F9"></a></p>
<h5>5.2-10 DuplicateFreeList</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DuplicateFreeList</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a new mutable <code class="code">cmat</code> containing the rows of <var class="Arg">m</var> with duplicates removed</p>
<p>Behaves exactly as expected. Just uses the standard <code class="func">DuplicateFreeList</code> (<a href="../../../doc/ref/chap21_mj.html#X8727F2928467C2F9"><span class="RefLink">Reference: DuplicateFreeList</span></a>) on the list of rows.</p>
<p><a id="X79E31DB27C82D6E1" name="X79E31DB27C82D6E1"></a></p>
<h5>5.2-11 Append</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Append</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: nothing</p>
<p>Behaves exactly as expected. Of course, the <code class="code">cmat</code>s <var class="Arg">m</var> and <var class="Arg">n</var> must be over the same field and have the same number of columns. Note that the rows of <var class="Arg">n</var> themselves (and no copies) will be put into the matrix <var class="Arg">m</var>.</p>
<p><a id="X7C86D7F7795125F0" name="X7C86D7F7795125F0"></a></p>
<h5>5.2-12 Filtered</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Filtered</code>( <var class="Arg">m</var>, <var class="Arg">f</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a new <code class="code">cmat</code> containing some of the rows of <var class="Arg">m</var></p>
<p>Behaves exactly as expected. The function <var class="Arg">f</var> will be called for each row of <var class="Arg">m</var>.</p>
<p><a id="X82AACD43853C24D1" name="X82AACD43853C24D1"></a></p>
<h5>5.2-13 Unbind</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Unbind</code>( <var class="Arg">m</var>, <var class="Arg">f</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: nothing</p>
<p>Behaves exactly as expected. Of course, only the last bound row may be unbound.</p>
<p><a id="X79862FF37B75BF48" name="X79862FF37B75BF48"></a></p>
<h4>5.3 <span class="Heading">Arithmetic</span></h4>
<p>Of course, the standard arithmetic infix operations <span class="SimpleMath">+</span>, <span class="SimpleMath">-</span> and <span class="SimpleMath">*</span> (for vectors and scalars) work as expected by using the methods below. The comments on the usage of scalars in arithmetic operations involving vectors from Subsection <a href="chap4.html#X788A3D6482290F7D"><span class="RefLink">4.2-1</span></a> apply analogously.</p>
<p><a id="X819B1A8A7DE1EE88" name="X819B1A8A7DE1EE88"></a></p>
<h5><code>5.3-1 \+</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \+</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the sum <span class="SimpleMath"><var class="Arg">m</var>+<var class="Arg">n</var></span> as a new <code class="code">cmat</code></p>
<p>For two <code class="code">cmat</code>s <var class="Arg">m</var> and <var class="Arg">n</var>. Works as expected.</p>
<p><a id="X814AFD8E8377D4DB" name="X814AFD8E8377D4DB"></a></p>
<h5><code>5.3-2 \-</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \-</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the difference <span class="SimpleMath"><var class="Arg">m</var>-<var class="Arg">n</var></span> as a new <code class="code">cmat</code></p>
<p>For two <code class="code">cmat</code>s <var class="Arg">m</var> and <var class="Arg">n</var>. Works as expected.</p>
<p><a id="X82AFC3A987140922" name="X82AFC3A987140922"></a></p>
<h5>5.3-3 AdditiveInverseSameMutability</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AdditiveInverseSameMutability</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \-</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the additive inverse of <var class="Arg">m</var> as a new <code class="code">cmat</code></p>
<p>For a <code class="code">cmat</code> <var class="Arg">m</var>. Works as expected.</p>
<p><a id="X8548396F7D4CAC21" name="X8548396F7D4CAC21"></a></p>
<h5>5.3-4 AdditiveInverseMutable</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AdditiveInverseMutable</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the additive inverse of <var class="Arg">m</var> as a new mutable <code class="code">cmat</code></p>
<p>For a <code class="code">cmat</code> <var class="Arg">m</var>. Works as expected.</p>
<p><a id="X848404F57FBFFE7A" name="X848404F57FBFFE7A"></a></p>
<h5><code>5.3-5 \*</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">m</var>, <var class="Arg">s</var> )</td><td class="tdright">( method )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">s</var>, <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the scalar multiple <var class="Arg">s</var><span class="SimpleMath">⋅</span><var class="Arg">m</var></p>
<p>For a <code class="code">cmat</code> <var class="Arg">m</var> and a scalar <var class="Arg">s</var>. For the format of the scalar see <a href="chap4.html#X788A3D6482290F7D"><span class="RefLink">4.2-1</span></a>. Works as expected.</p>
<p><a id="X7DAFB0227C5529C6" name="X7DAFB0227C5529C6"></a></p>
<h5><code>5.3-6 \*</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">v</var>, <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the product <var class="Arg">v</var><span class="SimpleMath">⋅</span><var class="Arg">m</var></p>
<p>For a <code class="code">cmat</code> <var class="Arg">m</var> and a <code class="code">cvec</code> <var class="Arg">s</var> with the same length as the number of rows of <var class="Arg">m</var>. Works as expected. Note that there is a very fast method for the case that <var class="Arg">m</var> is pre-greased (see <a href="chap5.html#X7DA0D38A7D5DBDFF"><span class="RefLink">5.8</span></a>).</p>
<p><a id="X8255927C7923A294" name="X8255927C7923A294"></a></p>
<h5><code>5.3-7 \^</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \^</code>( <var class="Arg">v</var>, <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the product <var class="Arg">v</var><span class="SimpleMath">⋅</span><var class="Arg">m</var></p>
<p>For a <code class="code">cmat</code> <var class="Arg">m</var> and a <code class="code">cvec</code> <var class="Arg">s</var> with the same length as the number of rows of <var class="Arg">m</var>. Works as expected. Note that there is a very fast method for the case that <var class="Arg">m</var> is pre-greased (see <a href="chap5.html#X7DA0D38A7D5DBDFF"><span class="RefLink">5.8</span></a>).</p>
<p><a id="X7F673C397A919D81" name="X7F673C397A919D81"></a></p>
<h5><code>5.3-8 \*</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the product <var class="Arg">m</var><span class="SimpleMath">⋅</span><var class="Arg">n</var></p>
<p>Of course, the <code class="code">cmat</code> <var class="Arg">m</var> must have as many columns as the <code class="code">cmat</code> <var class="Arg">n</var> has rows. Works as expected. Note that there is a very fast method for the case that <var class="Arg">n</var> is pre-greased (see <a href="chap5.html#X7DA0D38A7D5DBDFF"><span class="RefLink">5.8</span></a>).</p>
<p><a id="X781AD339797C0625" name="X781AD339797C0625"></a></p>
<h5>5.3-9 ZeroSameMutability</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ZeroSameMutability</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the zero <code class="code">cmat</code> over the same field and with the same dimensions as <var class="Arg">m</var></p>
<p><var class="Arg">m</var> must be a <code class="code">cmat</code>.</p>
<p><a id="X796D9B2C83C0667B" name="X796D9B2C83C0667B"></a></p>
<h5>5.3-10 ZeroMutable</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ZeroMutable</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a mutable copy of the zero <code class="code">cmat</code> over the same field and with the same dimensions as <var class="Arg">m</var></p>
<p><var class="Arg">m</var> must be a <code class="code">cmat</code>.</p>
<p><a id="X7ED3BC7D8198EE2E" name="X7ED3BC7D8198EE2E"></a></p>
<h5>5.3-11 OneSameMutability</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OneSameMutability</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the identity <code class="code">cmat</code> over the same field and with the same dimensions as <var class="Arg">m</var></p>
<p><var class="Arg">m</var> must be a square <code class="code">cmat</code>.</p>
<p><a id="X7FBD3ABF80EB659C" name="X7FBD3ABF80EB659C"></a></p>
<h5>5.3-12 OneMutable</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OneMutable</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a mutable copy of the identity <code class="code">cmat</code> over the same field and with the same dimensions as <var class="Arg">m</var></p>
<p><var class="Arg">m</var> must be a square <code class="code">cmat</code>.</p>
<p><a id="X78F9A4028122E39B" name="X78F9A4028122E39B"></a></p>
<h5>5.3-13 InverseMutable</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ InverseMutable</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the multiplicative inverse of <var class="Arg">m</var></p>
<p>If the <code class="code">cmat</code> is not square or not invertible then <code class="code">fail</code> is returned. Behaves exactly as expected.</p>
<p><a id="X8593B0F886BBD8A7" name="X8593B0F886BBD8A7"></a></p>
<h5>5.3-14 InverseSameMutability</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ InverseSameMutability</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the multiplicative inverse of <var class="Arg">m</var></p>
<p>If the <code class="code">cmat</code> is not square or not invertible then <code class="code">fail</code> is returned. Behaves exactly as expected.</p>
<p><a id="X87F304F3826A7063" name="X87F304F3826A7063"></a></p>
<h5>5.3-15 TransposedMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TransposedMat</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the transpose of <var class="Arg">m</var></p>
<p>Behaves exactly as expected.</p>
<p><a id="X8634C79E7DB22934" name="X8634C79E7DB22934"></a></p>
<h5>5.3-16 KroneckerProduct</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ KroneckerProduct</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the Kronecker product of <var class="Arg">m</var> and <var class="Arg">n</var></p>
<p>Behaves exactly as expected.</p>
<p><a id="X845009E07A011131" name="X845009E07A011131"></a></p>
<h4>5.4 <span class="Heading">Comparison of matrices and other information</span></h4>
<p><a id="X7E2074A77AFF518A" name="X7E2074A77AFF518A"></a></p>
<h5>5.4-1 =</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ =</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Returns <code class="code">true</code> if the <code class="code">cmat</code>s <var class="Arg">m</var> and <var class="Arg">n</var> are equal. The matrices must be over the same field and must have equal dimensions.</p>
<p><a id="X7AA30F9B7CA1A376" name="X7AA30F9B7CA1A376"></a></p>
<h5>5.4-2 LT</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LT</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Returns <code class="code">true</code> if the <code class="code">cmat</code> <var class="Arg">m</var> is smaller than <var class="Arg">n</var>. The matrices must be over the same field and must have equal dimensions. The method implements the lexicographic order and uses <code class="func">LT</code> (<a href="chap4.html#X790D69A88340E510"><span class="RefLink">4.4-2</span></a>) for the ordering of vectors. Note that the operation <code class="code">LT</code> is the same as <code class="code">\<</code>.</p>
<p><a id="X86A0FAA57E4C26FC" name="X86A0FAA57E4C26FC"></a></p>
<h5>5.4-3 IsZero</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsZero</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Returns <code class="code">true</code> if the <code class="code">cmat</code> <var class="Arg">m</var> is equal to zero, meaning that all entries are equal to zero.</p>
<p><a id="X814D78347858EC13" name="X814D78347858EC13"></a></p>
<h5>5.4-4 IsOne</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsOne</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Returns <code class="code">true</code> iff the <code class="code">cmat</code> <var class="Arg">m</var> is equal to the identity matrix.</p>
<p><a id="X7FF01BF686AD0623" name="X7FF01BF686AD0623"></a></p>
<h5>5.4-5 IsDiagonalMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDiagonalMat</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Returns <code class="code">true</code> iff the <code class="code">cmat</code> <var class="Arg">m</var> is a diagonal matrix.</p>
<p><a id="X7ECFBD9F8664982B" name="X7ECFBD9F8664982B"></a></p>
<h5>5.4-6 IsUpperTriangularMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsUpperTriangularMat</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Returns <code class="code">true</code> iff the <code class="code">cmat</code> <var class="Arg">m</var> is an upper triangular matrix.</p>
<p><a id="X81671CFD7CFE4819" name="X81671CFD7CFE4819"></a></p>
<h5>5.4-7 IsLowerTriangularMat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLowerTriangularMat</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: <code class="code">true</code> or <code class="code">false</code></p>
<p>Returns <code class="code">true</code> iff the <code class="code">cmat</code> <var class="Arg">m</var> is a lower triangular matrix.</p>
<p><a id="X875B076C8559CAF0" name="X875B076C8559CAF0"></a></p>
<h5>5.4-8 CVEC_HashFunctionForCMats</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CVEC_HashFunctionForCMats</code>( <var class="Arg">m</var>, <var class="Arg">data</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: an integer hash value</p>
<p>This is a hash function usable for the <code class="func">ChooseHashFunction</code> (<a href="../../../pkg/orb/doc/chap4_mj.html#X7ACED4FB7C971A5A"><span class="RefLink">orb: ChooseHashFunction</span></a>) framework. It takes as arguments a <code class="code">cmat</code> <var class="Arg">m</var> and a list <var class="Arg">data</var> of length <span class="SimpleMath">2</span>. The first entry of <var class="Arg">data</var> is the length of the hash table used and the second entry is the number of bytes looked at in the <code class="code">cvec</code>s in the matrices.</p>
<p><a id="X7D5E6AF77B09AB35" name="X7D5E6AF77B09AB35"></a></p>
<h5>5.4-9 ChooseHashFunction</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ChooseHashFunction</code>( <var class="Arg">m</var>, <var class="Arg">l</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: a record with entries <code class="code">func</code> and <code class="code">data</code>.</p>
<p>Chooses a hash function to be used for <code class="code">cmat</code>s like <var class="Arg">m</var> (that is, over the same field with the same number of columns) and for hash tables of length <var class="Arg">l</var>. The hash function itself is stored in the <code class="code">func</code> component of the resulting record. The hash function has to be called with two arguments: the first must be a matrix like <var class="Arg">m</var> and the second must be the value of the <code class="code">data</code> component of the resulting record.</p>
<p><a id="X7B54DF167CFC6C0F" name="X7B54DF167CFC6C0F"></a></p>
<h4>5.5 <span class="Heading">Slicing and submatrices</span></h4>
<p>As described in Section <a href="chap5.html#X7C9F7D327BAECA5E"><span class="RefLink">5.2</span></a> you can use the slicing operator <code class="code">\{\}</code> for read and write access of a subset of the rows of a <code class="code">cmat</code>. However, the double slicing operator is not supported. The reason for this is twofold: First there is a technical issue that the double slicing operator cannot easily be overloaded in the <strong class="pkg">GAP</strong> system. The second is, that very often the double slicing operator is used to copy a part of one matrix to another part of another matrix using double slicing on both sides of an assignment. This is quite inefficient because it creates an intermediate object, namely the submatrix which is extracted.</p>
<p>Therefore we have chosen to support submatrix access through two operations <code class="func">ExtractSubMatrix</code> (<a href="chap5.html#X838B45F7790E9FDF"><span class="RefLink">5.5-1</span></a>) and <code class="func">CopySubMatrix</code> (<a href="chap5.html#X7ED9E5D4809E3B50"><span class="RefLink">5.5-2</span></a>) described below.</p>
<p><a id="X838B45F7790E9FDF" name="X838B45F7790E9FDF"></a></p>
<h5>5.5-1 ExtractSubMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ExtractSubMatrix</code>( <var class="Arg">m</var>, <var class="Arg">rows</var>, <var class="Arg">cols</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a submatrix of <var class="Arg">m</var></p>
<p>This operation extracts the submatrix of the matrix <var class="Arg">m</var> consisting of the rows described by the integer list (or range) <var class="Arg">rows</var> and of the columns described by the integer list (or range) <var class="Arg">cols</var>. This is thus equivalent to the usage <var class="Arg">m</var><code class="code">{</code><var class="Arg">rows</var><code class="code">}{</code><var class="Arg">cols</var><code class="code">}</code>. Note that the latter does not work for <code class="code">cmat</code>s, whereas a quite efficient method for <code class="func">ExtractSubMatrix</code> is available for <code class="code">cmat</code>s.</p>
<p><a id="X7ED9E5D4809E3B50" name="X7ED9E5D4809E3B50"></a></p>
<h5>5.5-2 CopySubMatrix</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CopySubMatrix</code>( <var class="Arg">src</var>, <var class="Arg">dst</var>, <var class="Arg">srows</var>, <var class="Arg">drows</var>, <var class="Arg">scols</var>, <var class="Arg">dcols</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: nothing</p>
<p>This operation extracts the submatrix of the matrix <var class="Arg">src</var> consisting of the rows described by the integer list (or range) <var class="Arg">srows</var> and of the columns described by the integer list (or range) <var class="Arg">scols</var> and copies it into the submatrix of <var class="Arg">dst</var> described by the integer lists (or ranges) <var class="Arg">drows</var> and <var class="Arg">dcols</var>. No intermediate object is created. This is thus equivalent to the usage <var class="Arg">dst</var><code class="code">{</code><var class="Arg">drows</var><code class="code">}{</code><var class="Arg">dcols</var><code class="code">} := </code><var class="Arg">src</var><code class="code">{</code><var class="Arg">srows</var><code class="code">}{</code><var class="Arg">scols</var><code class="code">}</code>. Note that the latter does not work for <code class="code">cmat</code>s, whereas a quite efficient method for <code class="func">CopySubMatrix</code> is available for <code class="code">cmat</code>s.</p>
<p><a id="X805F24017D4348E2" name="X805F24017D4348E2"></a></p>
<h4>5.6 <span class="Heading">Information about matrices</span></h4>
<p><a id="X7B5FF52186205C5E" name="X7B5FF52186205C5E"></a></p>
<h5>5.6-1 BaseField</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BaseField</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the base field of <var class="Arg">m</var></p>
<p>For a <code class="code">cmat</code> <var class="Arg">m</var> this returns the <strong class="pkg">GAP</strong> object <code class="code">GF(p,d)</code> corresponding to the base field of <var class="Arg">m</var>. Note that this is a relatively fast lookup.</p>
<p><a id="X7EC55E298313BCB1" name="X7EC55E298313BCB1"></a></p>
<h5>5.6-2 Characteristic</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Characteristic</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the characteristic of the base field of <var class="Arg">m</var></p>
<p>Returns the characteristic of the base field of <var class="Arg">m</var> (see <code class="func">BaseField</code> (<a href="chap5.html#X7B5FF52186205C5E"><span class="RefLink">5.6-1</span></a>)).</p>
<p><a id="X7E9F7B7E7BEDA69E" name="X7E9F7B7E7BEDA69E"></a></p>
<h5>5.6-3 DegreeFFE</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DegreeFFE</code>( <var class="Arg">m</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns: the degree of the base field of <var class="Arg">m</var> over its prime field</p>
<p>Returns the degree of the base field of <var class="Arg">m</var> over its prime field (see <code class="func">BaseField</code> (<a href="chap5.html#X7B5FF52186205C5E"><span class="RefLink">5.6-1</ | |