\input texinfo @c -*-texinfo-*-
@c This will be for the printing version of the manual
@c @input config-local.texi
@c %**start of header
@setfilename gsl-ref.info
@settitle GNU Scientific Library -- Reference Manual
@finalout
@set frontcontents
@ifset publish
@setchapternewpage odd
@end ifset
@c %**end of header

@dircategory Scientific software
@direntry
* gsl-ref: (gsl-ref).                   GNU Scientific Library -- Reference
@end direntry

@c How to use the math macros
@c ==========================
@c 
@c For simple expressions, simply use the @math{} command, e.g.
@c
@c     @math{\exp(x)/(1+x^2)}
@c 
@c but if the expression includes characters that need to be 'escaped'
@c in texinfo, like '{' or '}', or needs different output for TeX and info,
@c then use the following form,
@c
@c     blah blah blah @c{$y^{1+b} \le \pi$}
@c     @math{y^@{1+b@} <= \pi}
@c
@c The first part using @c{} must appear at the end of a line (it reads
@c up to the line end -- as far as texinfo is concerned it's actually
@c a 'comment').  The comment command @c has been modified to capture
@c a TeX expression which is output by the next @math.
@c
@c For ordinary comments use the @comment command.

@tex
% Mathematical macros taken from the GNU Calc Manual
% ==================================================
%
% Some special kludges to make TeX formatting prettier.
% Because makeinfo.c exists, we can't just define new commands.
% So instead, we take over little-used existing commands.
%
% Redefine @cite{text} to act like $text$ in regular TeX.
% Info will typeset this same as @samp{text}.
\gdef\goodtex{\tex \let\rm\goodrm \let\t\ttfont \turnoffactive}
\gdef\goodrm{\fam0\tenrm}
\gdef\math{\goodtex$\mathxxx}
\gdef\mathxxx#1{#1$\endgroup}
\global\let\oldxrefX=\xrefX
\gdef\xrefX[#1]{\begingroup\let\math=\dfn\oldxrefX[#1]\endgroup}
%
% Redefine @i{text} to be equivalent to @cite{text}, i.e., to use math mode.
% This looks the same in TeX but omits the surrounding ` ' in Info.
%\global\let\i=\cite
%\global\let\math=\cite
%
% Redefine @c{tex-stuff} \n @whatever{info-stuff}.
\gdef\c{\futurelet\next\mycxxx}
\gdef\mycxxx{%
  \ifx\next\bgroup \goodtex\let\next\mycxxy
  \else\ifx\next\mindex \let\next\relax
  \else\ifx\next\kindex \let\next\relax
  \else\ifx\next\starindex \let\next\relax \else \let\next\comment
  \fi\fi\fi\fi \next
}
\gdef\mycxxy#1#2{#1\endgroup\mycxxz}
\gdef\mycxxz#1{}
%
% Define \Hat to take over from \hat as an accent
\gdef\Hat{\mathaccent "705E}
%
%\gdef\beforedisplay{\vskip-10pt}
%\gdef\afterdisplay{\vskip-5pt}
\gdef\beforedisplay{}
\gdef\afterdisplay{}
{\globaldefs = 1
\abovedisplayskip=7pt plus 2pt minus 1pt
\belowdisplayskip=7pt plus 2pt minus 1pt
\abovedisplayshortskip=7pt plus 2pt minus 1pt
\belowdisplayshortskip=7pt plus 2pt minus 1pt}
%\abovedisplayskip=12pt plus 3pt minus 3pt
%\belowdisplayskip=12pt plus 3pt minus 3pt
%\abovedisplayshortskip=7pt plus 1pt minus 1pt
%\belowdisplayshortskip=7pt plus 1pt minus 1pt
%\gdef\beforedisplayh{\vskip-25pt}
%\gdef\afterdisplayh{\vskip-10pt}
%
\gdef\arcsec{\hbox{\rm arcsec}}
\gdef\arccsc{\hbox{\rm arccsc}}
\gdef\arccot{\hbox{\rm arccot}}
\gdef\sech{\hbox{\rm sech}}
\gdef\csch{\hbox{\rm csch}}
\gdef\coth{\hbox{\rm coth}}
\gdef\arcsinh{\hbox{\rm arcsinh}}
\gdef\arccosh{\hbox{\rm arccosh}}
\gdef\arctanh{\hbox{\rm arctanh}}
\gdef\arcsech{\hbox{\rm arcsech}}
\gdef\arccsch{\hbox{\rm arccsch}}
\gdef\arccoth{\hbox{\rm arccoth}}
%
\gdef\Re{\hbox{\rm Re}}
\gdef\Im{\hbox{\rm Im}}
\gdef\Sin{\hbox{\rm Sin}}
\gdef\Cos{\hbox{\rm Cos}}
\gdef\Log{\hbox{\rm Log}}
%
\gdef\erf{\hbox{\rm erf}}
\gdef\erfc{\hbox{\rm erfc}}
\gdef\sinc{\hbox{\rm sinc}}
\gdef\sgn{\hbox{\rm sgn}}
\gdef\sign{\hbox{\rm sign}}
\gdef\det{\hbox{\rm det}}
\gdef\Var{\hbox{\rm Var}}
\gdef\arg{\hbox{\rm arg}} % avoid temporary clobbering of arg in texinfo-4.8
@end tex

@include version-ref.texi
@set GSL @i{GNU Scientific Library}

@copying
Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 The GSL Team.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``GNU General Public License'' and ``Free Software
Needs Free Documentation'', the Front-Cover text being ``A GNU Manual'',
and with the Back-Cover Text being (a) (see below).  A copy of the
license is included in the section entitled ``GNU Free Documentation
License''.

(a) The Back-Cover Text is: ``You have freedom to copy and modify this
GNU Manual, like GNU software.''
@end copying

@titlepage
@title GNU Scientific Library
@subtitle Reference Manual
@subtitle Edition @value{EDITION}, for GSL Version @value{VERSION}
@subtitle @value{UPDATED}

@author Mark Galassi 
Los Alamos National Laboratory
@comment @email{rosalia@@lanl.gov}
@sp 1

@author Jim Davies 
Department of Computer Science, Georgia Institute of Technology
@comment @email{jimmyd@@nis.lanl.gov}
@sp 1

@author James Theiler 
Astrophysics and Radiation Measurements Group, Los Alamos National Laboratory
@comment @email{jt@@nis.lanl.gov}
@sp 1

@author Brian Gough 
Network Theory Limited
@comment @email{bjg@@network-theory.co.uk}
@sp 1

@comment Asked to be moved to 'contributors' appendix
@comment @author Reid Priedhorsky 
@comment Mathematical Modeling and Analysis Group, Los Alamos National Laboratory
@comment @email{rp@@lanl.gov}
@comment @sp 1

@author Gerard Jungman 
Theoretical Astrophysics Group, Los Alamos National Laboratory
@comment @email{jungman@@lanl.gov}
@sp 1

@author Michael Booth
Department of Physics and Astronomy, The Johns Hopkins University
@comment @email{booth@@planck.pha.jhu.edu} or @email{booth@@debian.org}
@sp 1

@author Fabrice Rossi
University of Paris-Dauphine
@comment @email{rossi@@ufrmd.dauphine.fr}
@sp 1
@page
@vskip 0pt plus 1filll
@insertcopying
@ifclear publish
Printed copies of this manual can be purchased from Network Theory Ltd
at @uref{http://www.network-theory.co.uk/gsl/manual/}.

The money raised from sales of the manual helps support the
development of GSL.
@end ifclear
@end titlepage

@iftex
@ifset frontcontents
@contents
@end ifset
@end iftex

@ifnottex
@node Top, Introduction, (dir), (dir)
@top GSL

This file documents the @value{GSL} (GSL), a collection of numerical
routines for scientific computing.  It corresponds to release
@value{VERSION} of the library.  Please report any errors in this
manual to @email{bug-gsl@@gnu.org}.

More information about GSL can be found at the project homepage,
@uref{http://www.gnu.org/software/gsl/}.

Printed copies of this manual can be purchased from Network Theory Ltd
at @uref{http://www.network-theory.co.uk/gsl/manual/}. The money
raised from sales of the manual helps support the development of GSL.

A Japanese translation of this manual is available from the GSL
project homepage thanks to Daisuke Tominaga.

@insertcopying
@sp 1
@end ifnottex

@menu
* Introduction::                
* Using the library::           
* Error Handling::              
* Mathematical Functions::      
* Complex Numbers::             
* Polynomials::                 
* Special Functions::           
* Vectors and Matrices::        
* Permutations::                
* Combinations::                
* Sorting::                     
* BLAS Support::                
* Linear Algebra::              
* Eigensystems::                
* Fast Fourier Transforms::     
* Numerical Integration::       
* Random Number Generation::    
* Quasi-Random Sequences::      
* Random Number Distributions::  
* Statistics::                  
* Histograms::                  
* N-tuples::                    
* Monte Carlo Integration::     
* Simulated Annealing::         
* Ordinary Differential Equations::  
* Interpolation::               
* Numerical Differentiation::   
* Chebyshev Approximations::    
* Series Acceleration::         
* Wavelet Transforms::          
* Discrete Hankel Transforms::  
* One dimensional Root-Finding::  
* One dimensional Minimization::  
* Multidimensional Root-Finding::  
* Multidimensional Minimization::  
* Least-Squares Fitting::       
* Nonlinear Least-Squares Fitting::  
* Basis Splines::
* Physical Constants::          
* IEEE floating-point arithmetic::  
* Debugging Numerical Programs::  
* Contributors to GSL::         
* Autoconf Macros::             
* GSL CBLAS Library::           
* Free Software Needs Free Documentation::  
* GNU General Public License::  
* GNU Free Documentation License::  
* Function Index::              
* Variable Index::              
* Type Index::                  
* Concept Index::               
@end menu

@node  Introduction, Using the library, Top, Top
@chapter Introduction
@include intro.texi

@node Using the library, Error Handling, Introduction, Top
@chapter Using the library
@cindex usage, compiling application programs
@include usage.texi

@node Error Handling, Mathematical Functions, Using the library, Top
@chapter Error Handling
@cindex Errors
@include err.texi

@node  Mathematical Functions, Complex Numbers, Error Handling, Top
@chapter Mathematical Functions
@include math.texi

@node Complex Numbers, Polynomials, Mathematical Functions, Top
@chapter Complex Numbers
@include complex.texi

@node Polynomials, Special Functions, Complex Numbers, Top
@chapter Polynomials
@include poly.texi

@node Special Functions, Vectors and Matrices, Polynomials, Top
@chapter Special Functions
@include specfunc.texi

@node Vectors and Matrices, Permutations, Special Functions, Top
@chapter Vectors and Matrices
@include vectors.texi

@node   Permutations, Combinations, Vectors and Matrices, Top
@chapter Permutations
@include permutation.texi

@node   Combinations, Sorting, Permutations, Top
@chapter Combinations
@include combination.texi

@node  Sorting, BLAS Support, Combinations, Top
@chapter Sorting
@include sort.texi

@node BLAS Support, Linear Algebra, Sorting, Top
@chapter BLAS Support
@include blas.texi

@node Linear Algebra, Eigensystems, BLAS Support, Top
@chapter Linear Algebra
@include linalg.texi

@node Eigensystems, Fast Fourier Transforms, Linear Algebra, Top
@chapter Eigensystems
@include eigen.texi

@node Fast Fourier Transforms, Numerical Integration, Eigensystems, Top
@chapter Fast Fourier Transforms (FFTs)
@include fft.texi

@node Numerical Integration, Random Number Generation, Fast Fourier Transforms, Top
@chapter Numerical Integration
@include integration.texi

@node Random Number Generation, Quasi-Random Sequences, Numerical Integration, Top
@chapter Random Number Generation
@include rng.texi

@node Quasi-Random Sequences, Random Number Distributions, Random Number Generation, Top
@chapter Quasi-Random Sequences
@include qrng.texi

@node  Random Number Distributions, Statistics, Quasi-Random Sequences, Top
@chapter Random Number Distributions
@include randist.texi

@node Statistics, Histograms, Random Number Distributions, Top
@chapter Statistics
@include statistics.texi

@node Histograms, N-tuples, Statistics, Top
@chapter Histograms
@include histogram.texi

@node  N-tuples, Monte Carlo Integration, Histograms, Top
@chapter N-tuples
@include ntuple.texi

@node Monte Carlo Integration, Simulated Annealing, N-tuples, Top
@chapter Monte Carlo Integration
@include montecarlo.texi

@node Simulated Annealing, Ordinary Differential Equations, Monte Carlo Integration, Top
@chapter Simulated Annealing
@include siman.texi

@node Ordinary Differential Equations, Interpolation, Simulated Annealing, Top
@chapter Ordinary Differential Equations
@include ode-initval.texi

@node   Interpolation, Numerical Differentiation, Ordinary Differential Equations, Top
@chapter Interpolation
@include interp.texi

@node  Numerical Differentiation, Chebyshev Approximations, Interpolation, Top
@chapter Numerical Differentiation
@include diff.texi

@node  Chebyshev Approximations, Series Acceleration, Numerical Differentiation, Top
@chapter Chebyshev Approximations
@include cheb.texi

@node Series Acceleration, Wavelet Transforms, Chebyshev Approximations, Top
@chapter Series Acceleration
@include sum.texi

@node  Wavelet Transforms, Discrete Hankel Transforms, Series Acceleration, Top
@chapter Wavelet Transforms
@include dwt.texi

@node  Discrete Hankel Transforms, One dimensional Root-Finding, Wavelet Transforms, Top
@chapter Discrete Hankel Transforms
@include dht.texi

@node  One dimensional Root-Finding, One dimensional Minimization, Discrete Hankel Transforms, Top
@chapter One dimensional Root-Finding
@include roots.texi

@node   One dimensional Minimization, Multidimensional Root-Finding, One dimensional Root-Finding, Top
@chapter One dimensional Minimization
@include min.texi

@node  Multidimensional Root-Finding, Multidimensional Minimization, One dimensional Minimization, Top
@chapter Multidimensional Root-Finding
@include multiroots.texi

@node   Multidimensional Minimization, Least-Squares Fitting, Multidimensional Root-Finding, Top
@chapter Multidimensional Minimization
@include multimin.texi

@node Least-Squares Fitting, Nonlinear Least-Squares Fitting, Multidimensional Minimization, Top
@chapter Least-Squares Fitting
@include fitting.texi

@node Nonlinear Least-Squares Fitting, Basis Splines, Least-Squares Fitting, Top
@chapter Nonlinear Least-Squares Fitting
@include multifit.texi

@node Basis Splines, Physical Constants, Nonlinear Least-Squares Fitting, Top
@chapter Basis Splines
@include bspline.texi

@node  Physical Constants, IEEE floating-point arithmetic, Basis Splines, Top
@chapter Physical Constants
@include const.texi

@node IEEE floating-point arithmetic, Debugging Numerical Programs, Physical Constants, Top
@chapter IEEE floating-point arithmetic
@include ieee754.texi

@node Debugging Numerical Programs, Contributors to GSL, IEEE floating-point arithmetic, Top
@appendix Debugging Numerical Programs
@include debug.texi

@node Contributors to GSL, Autoconf Macros, Debugging Numerical Programs, Top
@appendix Contributors to GSL

(See the AUTHORS file in the distribution for up-to-date information.)

@table @strong
@item Mark Galassi
Conceived GSL (with James Theiler) and wrote the design document.  Wrote
the simulated annealing package and the relevant chapter in the manual.

@item James Theiler
Conceived GSL (with Mark Galassi).  Wrote the random number generators
and the relevant chapter in this manual.

@item Jim Davies
Wrote the statistical routines and the relevant chapter in this
manual.

@item Brian Gough
FFTs, numerical integration, random number generators and distributions,
root finding, minimization and fitting, polynomial solvers, complex
numbers, physical constants, permutations, vector and matrix functions,
histograms, statistics, ieee-utils, revised @sc{cblas} Level 2 & 3,
matrix decompositions, eigensystems, cumulative distribution functions,
testing, documentation and releases.

@item Reid Priedhorsky 
Wrote and documented the initial version of the root finding routines
while at Los Alamos National Laboratory, Mathematical Modeling and
Analysis Group.  
@comment email: reid@reidster.net

@item Gerard Jungman
Special Functions, Series acceleration, ODEs, BLAS, Linear Algebra,
Eigensystems, Hankel Transforms.

@item Mike Booth
Wrote the Monte Carlo library.

@item Jorma Olavi T@"ahtinen 
Wrote the initial complex arithmetic functions.

@item  Thomas Walter 
Wrote the initial heapsort routines and cholesky decomposition.

@item  Fabrice Rossi
Multidimensional minimization.

@item Carlo Perassi
Implementation of the random number generators in Knuth's
@cite{Seminumerical Algorithms}, 3rd Ed.

@item Szymon Jaroszewicz 
@comment <sj@cs.umb.edu>
Wrote the routines for generating combinations.

@item Nicolas Darnis
Wrote the initial routines for canonical permutations.

@item Jason H. Stover
@comment (jason@sakla.net) 
Wrote the major cumulative distribution functions.

@item Ivo Alxneit
Wrote the routines for wavelet transforms.

@item Tuomo Keskitalo
Improved the implementation of the ODE solvers.

@item Lowell Johnson
Implementation of the Mathieu functions.

@item Patrick Alken
Implementation of non-symmetric eigensystems and B-splines.

@end table

Thanks to Nigel Lowry for help in proofreading the manual.

The non-symmetric eigensystems routines contain code based on the
LAPACK linear algebra library.  LAPACK is distributed under the
following license:

@iftex
@smallerfonts @rm
@end iftex
@sp 1
@quotation
Copyright (c) 1992-2006 The University of Tennessee.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

@bullet{} Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer. 
  
@bullet{} Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer listed
in this license in the documentation and/or other materials
provided with the distribution.
  
@bullet{} Neither the name of the copyright holders nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
  
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
@end quotation

@iftex
@textfonts @rm
@end iftex



@node  Autoconf Macros, GSL CBLAS Library, Contributors to GSL, Top
@appendix Autoconf Macros
@include autoconf.texi

@node GSL CBLAS Library, Free Software Needs Free Documentation, Autoconf Macros, Top
@appendix GSL CBLAS Library
@include cblas.texi

@comment @node  Copyright, GNU General Public License, Contributors to GSL, Top
@comment @unnumbered Copyright
@comment @include science.texi

@node  Free Software Needs Free Documentation, GNU General Public License, GSL CBLAS Library, Top
@unnumbered Free Software Needs Free Documentation
@include freemanuals.texi

@node  GNU General Public License, GNU Free Documentation License, Free Software Needs Free Documentation, Top
@unnumbered GNU General Public License
@include gpl.texi

@node GNU Free Documentation License, Function Index, GNU General Public License, Top
@unnumbered GNU Free Documentation License
@include fdl.texi

@comment htmlhelp: @printindex fn
@comment htmlhelp: @printindex vr
@comment htmlhelp: @printindex tp
@comment htmlhelp: @printindex cp
@comment htmlhelp: @bye

@iftex
@normalbottom
@end iftex

@node Function Index, Variable Index, GNU Free Documentation License, Top
@unnumbered Function Index

@printindex fn

@node Variable Index, Type Index, Function Index, Top
@unnumbered Variable Index

@printindex vr

@node Type Index, Concept Index, Variable Index, Top
@unnumbered Type Index

@printindex tp

@node Concept Index,  , Type Index, Top
@unnumbered Concept Index

@printindex cp

@ifclear frontcontents
@comment Use @setchapternewpage odd to ensure that the contents starts 
@comment on an odd page so that it can always be moved to the front when 
@comment printing two-up.
@setchapternewpage odd
@contents
@end ifclear

@ifset extrablankpages
@comment final page must be blank for printed version
@page
@headings off
@*
@page
@*
@comment @page
@comment @*
@comment @page
@comment @*
@end ifset
@bye
