<!-- 
  LINBOXING - intro.xml
  Introduction documentation section 
  Paul Smith
  
  Copyright (C)  2007-2008
  Paul Smith
  National University of Ireland Galway
  
  This file is part of the linboxing GAP package. 
  
  The linboxing package is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by the 
  Free Software Foundation; either version 2 of the License, or (at your 
  option) any later version.
  
  The linboxing package is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
  more details.
  
  You should have received a copy of the GNU General Public License along with 
  this program.  If not, see <http://www.gnu.org/licenses/>.
  
  $Id: intro.xml 92 2008-01-30 15:34:25Z pas $
  -->
  
<!-- ********************************************************** -->
<Chapter> 
  <Heading>Introduction</Heading>

    The LinBox C++ library (<URL>http://www.linalg.org</URL>) performs exact 
    linear algebra and provides a
    set of routines for the solution of linear algebra problems such as 
    rank, determinant, and the solution of linear systems. It provides 
    representations for both sparse and dense matrices over integers and
    finite fields. It has a particular emphasis on black-box matrix methods
    (which are very efficient over sparse matrices), but increasingly also 
    provides elimination-based routines for dense matrices using the 
    industry-standard BLAS numeric routines.
    <P/>
    &GAP; (<URL>http://www.gap-system.org</URL>) is a system for computational 
    discrete algebra, with particular emphasis on Computational Group Theory.
    It provides good implementations of exact linear algebra routines on dense 
    matrices over all common fields and the integers. Typically, &GAP;'s 
    versions are faster than LinBox for small finite fields (i.e. order less 
    than 256), but LinBox is much faster for larger finite fields and the 
    integers.
    <P/>
    The &linboxing; (LinBox-in-GAP) package provides an interface to the LinBox 
    C++ library from &GAP;. It provides alternative versions of &GAP; linear 
    algebra routines which are mapped through to the equivalent LinBox library 
    routines at the &GAP; kernel level. The result is linear algebra routines in 
    &GAP; that are, in the majority of cases, considerably faster than the 
    native &GAP; versions, and which scale better with matrix size. 
    See the &linboxing; website at <URL>http://www.maths.nuigalway.ie/~pas/CHA/linboxing/index.shtml</URL>
    for timing examples and speedup estimates.
    As is typical, this speed is at the expense of 
    memory, since the &GAP; matrices and vector must be copied into a memory 
    format that LinBox can use.
    <P/>
    The functions provided by the &linboxing; package are named the same as the
    &GAP; equivalents, but are all contained within the <C>LinBox</C> record, 
    and so are prefixed with `<C>LinBox.</C>'. The functions provided are
    <List>
      <Item><Ref Func="LinBox.Determinant"/></Item>
      <Item><Ref Func="LinBox.Rank"/></Item>
      <Item><Ref Func="LinBox.Trace"/></Item>
      <Item><Ref Func="LinBox.SolutionMat"/></Item>
    </List>
    over the integers and prime fields.
        

</Chapter>
  
