Commit 8eee57af authored by Liam M. Healy's avatar Liam M. Healy
Browse files

Copy over files from GSLL repository, and update flysheet

parent eeccd102
Pipeline #634 failed with stage
in 1 second
pages:
stage: deploy
script: mv src public
artifacts:
paths:
- public
tags:
- site-gen
only:
- master
<!-- -*- mode: HTML; time-stamp-line-limit: -18; -*- -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title>GSLL, the GNU Scientific Library for Lisp
</title>
<meta name="generator" content="muse.el">
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<link rev="made" href="mailto:lhealy@common-lisp.net">
<link rel="stylesheet" type="text/css" href="site.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-25052371-1']);
_gaq.push(['_setDomainName', 'none']);
_gaq.push(['_setAllowLinker', true]);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div id="banner">
<h1>GNU Scientific Library for Lisp</h1>
<h2><a href="index.html">GSLL</a> &nbsp;
</div>
<div id="sidebar">
<ul>
<li><a href="#about">About</a></li>
<li><a href="#examples">Examples</a></li>
<li><a href="#require">Requirements</a></li>
<li><a href="#getit">Download</a></li>
<li><a href="#documentation">Documentation</a></li>
<li><a href="#status">Status</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
<!-- Insertion Mark -->
</div>
<div id="content">
<!-- Page published by Emacs Muse begins here -->
<h2>About</h2>
<a name="about"/>
<p class="first">
<p>The GNU Scientific Library for Lisp (GSLL) allows you to use
the <a href="http://www.gnu.org/software/gsl/">GNU Scientific Library
(GSL)</a> from <a href="http://www.lisp.org">Common Lisp</a>. This
library provides a full range of common mathematical operations useful
to scientific and engineering applications. The design of the GSLL
interface is such that access to most of the GSL library is possible
in a Lisp-natural way; the intent is that the user not be hampered by
the restrictions of the C language in which GSL has been written.
GSLL thus provides interactive use of GSL for getting quick answers,
even for someone not intending to program in Lisp.
</p>
<p>Topics include: polynomials, special functions, vectors and
matrices, permutations, sorting, linear algebra including BLAS,
eigensystems, fast Fourier transforms (FFT), quadrature, random numbers,
quasi-random sequences, random distributions, statistics, histograms,
N-tuples, Monte Carlo integration, simulated annealing, ordinary
differential equations, interpolation, numerical integration,
numerical differentiation, Chebyshev approximation, series
acceleration, discrete Hankel transforms, root-finding, minimization,
least-squares fitting, IEEE floating-point, discrete wavelet
transforms, basis splines, physical constants. See
<a href="missing-features.text">missing-features.text</a>
on the status of some incomplete topics.
</p>
<h2>Examples</h2>
<a name="examples"/>
<p>The <a href="http://www.gnu.org/software/gsl/manual/html_node/Elliptic-Functions-_0028Jacobi_0029.html">Jacobian elliptic functions</a> <i>sn</i>, <i>cn</i>, and
<i>dn</i> are special functions (Chapter 7):</p>
<pre>
(jacobian-elliptic-functions 0.2d0 0.81d0)
0.19762082367187703d0
0.9802785369736752d0
0.9840560289645665d0
</pre>
<p>which returns as multiple values the three function values. The
functions are defined only if the second argument <i>m</i> is not
greater than 1, so an error is signalled if this parameter is out of
range:
<pre>
(jacobian-elliptic-functions 0.61802d0 1.5d0)
Input domain error |m| > 1.0 in elljac.c at line 46
[Condition of type INPUT-DOMAIN]
</pre>
<p>This is an ordinary Lisp error which may be handled with standard
definitions available in Lisp. To take the
<a href="file:///usr/share/doc/gsl-ref-html/Level-1-GSL-BLAS-Interface.html">
complex conjugate scalar product</a> of two complex vectors of length 3:
<pre>
(cdot #2m(#c(-34.5d0 8.24d0) #c(3.29d0 -8.93d0) #c(34.12d0 -6.15d0))
#2m(#c(49.27d0 -13.49d0) #c(32.5d0 42.73d0) #c(-17.24d0 43.31d0)))
#C(-2940.2118d0 1861.9380999999998d0)
</pre>
<p>There are over 1500 examples available from within GSLL with the
function <code>examples</code>. There is also a suite of over
4000 tests; many of the examples also serve as tests, and most others
are ported from GSL's tests.
<h2>Download and Install</h2>
<h3>Download</h3>
<p>Use <a href="http://www.quicklisp.org/">quicklisp</a> and follow the
instructions. You will need to make sure that the libraries and
header files associated with <a href="http://www.gnu.org/software/gsl/">GNU Scientific Library
(GSL)</a> and <a href="http://sourceware.org/libffi/">libffi</a> are
installed; your distribution may name these <code>libgsl0-dev</code>
and <code>libffi-dev</code>. Once they are installed and you have
loaded the quicklisp file:
<pre>
(ql:quickload "gsll")</pre>
<p>To test your installation:
<pre>
(asdf:test-system :gsll)</pre>
<p>The result should look something like:
<pre>
Unit Test Summary
| 3997 assertions total
| 3992 passed
| 5 failed
| 6 execution errors
| 0 missing tests
</pre>
<p>You may see more failures; if you are not on a 64 bit platform you will see fewer assertions.
<h3>License</h3>
<p>
This software is distributed under
the <a href="http://www.gnu.org/licenses/gpl.html">GPL</a>
<!--and <a href="http://www.gnu.org/copyleft/fdl.html">FDL</a>
-->
; see
the file COPYING. There is absolutely no warranty.</p>
<h2>Documentation</h2>
<a name="documentation"/>
<h3>General Advice</h3>
<p>The following techniques for using the API are advised:</p>
<ul>
<li>Find the appropriate function(s) in the <a
href="http://www.gnu.org/software/gsl/manual/">GSL
documentation</a>.</li>
<li>Use the GSLL function <code>gsl-lookup</code>
to find the equivalent GSLL function, for example
<pre>
(gsl-lookup "gsl_sf_elljac_e")
JACOBIAN-ELLIPTIC-FUNCTIONS
T
</pre>
<p>
to find that the Lisp function name is <code>#'jacobian-elliptic-functions</code>.
</li>
<li>Look at the documentation for that Lisp function, e.g.
<pre>(documentation #'jacobian-elliptic-functions 'function)
"The Jacobian elliptic functions sn(u|m),
cn(u|m), dn(u|m) computed by descending Landen transformations."
</pre>
<p>
to get an explanation of the arguments etc.
</li>
<li>Use the function <code>(examples)</code> without an argument to
get a list of example categories. Then use the function with a
category name as the argument to get a list of examples under that
category, for example
<code>(examples 'higher-moments)</code>. The result will be a list
of forms, each providing an example of usage in the relevant topic.
If the
<a href="http://www.gnu.org/software/gsl/manual/">GSL
documentation</a> provides an example, there will usually be the same
or similar example provided in GSLL. <i>Note:</i> Some of the
examples are intentionally designed to signal an error, because the
examples also serve as a regression (unit) test suite for GSLL.</li>
</ul>
<p>
Some examples are not yet present in, or are too complicated for, the
function <code>#'examples</code>. In this case, you need to look in
the relevant source file; they are in either a separate file of
examples, or at the end of the file of definitions.
It is advisable to look at the examples first for calculations that
require more complex setup (generally, the later chapters in the GSL
manual).
<h3>Arrays</h3>
<p>
GSLL has many functions that work on vectors (one-dimensional arrays)
and matrices (two-dimensional arrays). Foreign arrays are defined and
manipulated using
the <a href="http://www.common-lisp.net/project/antik/">Antik</a>
which defines generic operations on array-like objects; see the Antik
documentation for more information. GSLL supports all array element
types that are supported by CFFI, the CL implementation, GSL, and the
platform. This list is available in the
variable <code>grid:*array-element-types*</code>.
<p>
<h3>Passing functions</h3>
<p>
Functions that are passed to GSL functions (known as <i>callbacks</i>
in C) are specified with a
<a href="http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_f.htm#function_designator">function
designator</a> for the CL function, that is, either the function
object itself or a symbol denoting the function.
There is usually an option <code>scalarsp</code> for functions
that take or return arrays that, if true, will
send the user function the argument element by element, and expect
the return values to be the individual elements.
</p>
<h3>GSL objects</h3>
<p>
There are a number of GSL objects other than arrays that can be
created:
<pre>
acceleration interpolation levin levin-truncated spline
nonlinear-ffit nonlinear-fdffit
one-dimensional-root-solver-f one-dimensional-root-solver-fdf
multi-dimensional-minimizer-f multi-dimensional-minimizer-fdf
fit-workspace one-dimensional-minimizer
multi-dimensional-root-solver-f multi-dimensional-root-solver-fdf
histogram histogram2d histogram-pdf histogram2d-pdf
basis-spline chebyshev hankel wavelet wavelet-workspace
random-number-generator quasi-random-number-generator discrete-random
polynomial-complex-workspace integration-workspace
qaws-table qawo-table
eigen-symm eigen-symmv eigen-herm eigen-hermv
eigen-nonsymm eigen-nonsymmv eigen-gensymm eigen-gensymmv
eigen-gen eigen-genv
monte-carlo-plain monte-carlo-miser monte-carlo-vegas
ode-stepper ode-evolution standard-control y-control
yp-control scaled-control
fft-real-wavetable-double-float fft-real-wavetable-single-float
fft-real-workspace-double-float fft-real-workspace-single-float
fft-complex-wavetable-double-float fft-complex-wavetable-single-float
fft-complex-workspace-double-float fft-complex-workspace-single-float
fft-half-complex-wavetable-double-float fft-half-complex-wavetable-single-float
</pre>
<p>
An instance may be created with a function whose name is "make-"
followed by the class name, e.g. <code>make-histogram</code>. The
arguments that the function takes depends on the class.
</p>
<h3>Additional definitions</h3>
<p>
Some definitions are provided because of their usefulness, even though
GSL doesn't have them.
<ul>
<li><code>invert-matrix</code> finds the inverse of a matrix and uses
GSL's LU decomposition functions.</li>
<li>IEEE floating point number analysis.</li>
<li><code>fft-frequency-vector</code> returns a vector where the sample
frequencies are contained. If you perform an FFT on a vector of a given size
and :sample-size, this vector will contain the sample frequencies in order.
If the :shifted keyword is T, then the frequencies are ordered in ascending
order.</li>
<li><code>fft-shift</code> returns a copy of a vector where the zero
frequency has been shifted to the center; the frequency components will be
sorted according to their frequency, in ascending order. Optionally, a
:stride can be provided.</li>
<li><code>fft-inverse-shift</code> performs the inverse action of fft-shift;
the zero and positive frequency components are shifted to the beginning,
so that the resulting vector is suitable for an inverse FFT. Optionally, a
:stride can be provided.</li>
</ul>
<h2>Status</h2>
<a name="status"/>
<p>
GSLL is largely complete and usable, with functioning interfaces to
most of GSL. Some functionality is not yet ported, and there are some
bugs.
<h2>Contact</h2>
<a name="contact"/>
<p>There is a <a href="https://mailman.common-lisp.net/listinfo/gsll-devel">mailing list</a> for all aspects of this project, including bug reports. See also the <a href="https://mailman.common-lisp.net/pipermail/gsll-devel/">archives</a>. In addition, I am frequently on #lisp IRC channel as LiamH. For bug reports, please use the mailing list. The <a href="https://gitlab.common-lisp.net/antik/gsll">development site</a> for GSLL has the git repository. If you have patch(es), please commit your changes and do:
<pre>git format-patch origin</pre>
<p>This will produce one or more files whose names start with a four-digit number; please attach them all to your email.
</div>
<!-- Page published by Emacs Muse ends here -->
<div class="footer">
<hr>
<address><a href="mailto:gsll-devel@common-lisp.net">Liam Healy</a></address>
<!-- Created: Feb 25 2005 -->
<!-- hhmts start -->
<small>
Time-stamp: <2018-12-05 10:24:02EST index.html>
</small>
<!-- hhmts end -->
</div>
</body>
</html>
<!-- -*- mode: HTML; time-stamp-line-limit: -18; -*- -->
<p>The GNU Scientific Library for Lisp (GSLL) allows you to use
the <a href="http://www.gnu.org/software/gsl/">GNU Scientific
Library (GSL)</a> from Common Lisp. This library provides a
full range of common mathematical operations useful to
scientific and engineering applications. The design of the GSLL
interface is such that access to most of the GSL library is
possible in a Lisp-natural way; the intent is that the user not
be hampered by the restrictions of the C language in which GSL
has been written. GSLL thus provides interactive use of GSL for
getting quick answers, even for someone not intending
to program in Lisp.
</p>
<p>Topics include: roots of polynomials, special functions,
vectors and matrices, permutations, sorting, BLAS (basic
linear algebra subprograms), linear algebra, eigensystems,
fast Fourier transforms, quadrature, random numbers,
quasi-random sequences, random distributions, statistics,
histograms, N-tuples, Monte Carlo integration, simulated
annealing, differential equations, interpolation, numerical
differentiation, Chebyshev approximation, series acceleration,
discrete Hankel transforms, root-finding, minimization
least-squares fitting, IEEE floating-point, discrete wavelet
transforms. See documentation on status of some incomplete
topics.</p>
<!- -->
<!-- Liam Healy 2008-11-16 15:08:08EST readme.html -->
<!-- Time-stamp: <2008-11-16 15:11:33EST readme.html> -->
<!-- $Id: $ -->
/* taken & adapted with permission from John Wiegley's brilliant site
at http://www.newartisans.com/johnw/. Thanks, John! */
/* The HTML body */
body {
margin: 0px;
}
.left-float {
float: left;
padding: 20px;
}
.right-float {
float: right;
padding: 20px;
}
/* The top banner */
#banner {
color: #000000;
background-color: #E8E8E8;
padding: 10px 0px 10px 15px; /* t r b l */
}
#banner a {
color: #483D8B;
text-decoration: none;
}
#banner h1, h2 {
font-family: 'Trebuchet MS', Verdana, sans-serif;
font-weight: bold;
margin: 0px;
}
#banner h1 {
font-size: large;
line-height: 150%;
}
#banner h2 {
font-size: medium;
}
/* The true body, which remains below the banner */
#body {
font-family: Verdana, Arial, sans-serif;
margin: 0px;
}
#body a {
text-decoration: underline;
font-weight: bold;
}
#body a:link { color: #666666; }
#body a:visited { color: #666666; }
#body a:active { color: #666666; }
#body a:hover { color: #CC6600; }
#body h1, h2, h3 {
font-family: 'Trebuchet MS', Verdana, sans-serif;
font-size: large;
}
/* The content, which is the left part of the body */
#content {
padding-top: 25px;
padding-left: 15px;
padding-right: 15px;
color: #333;
background-color: #FFFFFF;
line-height: 150%;
}
#content table {
border-width: 0 0 0 0;
border-style: none;
padding-top: 10px;
margin-left: 30px;
margin-right: 30px;
}
#content td {
border-width: 0 0 0 0;
border-style: none;
padding: 1px;
}
#content th {
font-weight: bold;
text-align: left;
border-width: 0 0 1px 0;
border-style: solid;
padding: 0;
}
#content p.quoted {
margin-left: 20px;
margin-right: 20px;
}
#content hr {
margin: 0px;
}
#content dl {
margin-left: 25px;
}
#content dd {
margin-left: 25px;
margin-right: 40px;
margin-bottom: 15px;
}
#content ol {
margin-left: 30px;
}
#content li {
margin-left: 0px;
}
#content p {
margin-left: 25px;
margin-right: 15px;
margin-top: -7px;
/* text-indent: 30px; */
}
#content pre {
margin-left: 25px;
}
#content p.first { text-indent: 0px; }
#content p.quoted { text-indent: 0px; }
#content p.footnote { text-indent: 0px; }
#content hr {
margin-left: 15px;
margin-right: 15px;
margin-bottom: 10px;
}
#content h2 {
color: #666666;
font-weight: bold;
margin-top: 25px;
margin-left: 0px;
border-bottom: 1px solid #999;
margin-bottom: 15px;
}
#content h2.first {
margin-top: 0px;
}
#content h3 {
color: #000000;
font-size: medium;
font-weight: bold;
margin-left: 25px;
/*margin-bottom: -10px;*/
margin-bottom: 15px;
}
#content code {
font-family: Courier, sans-serif;
}
#content .verse {
margin-left: 45px;
text-indent: 0px;
}
#content .example {
font-family: Courier, sans-serif;
white-space: pre;
line-height: 110%;
margin-left: 40px;
color: purple;
}
/* Blog entries within the content */
#entry {
margin-top: -15px;
padding-left: 10px;
padding-right: 20px;
}
blog-entry {
margin-top: -15px;
padding-left: 10px;
padding-right: 20px;
}
#entry-head {
border-bottom: 1px solid #999;
margin-bottom: 15px;
}
entry-head {
border-bottom: 1px solid #999;
margin-bottom: 15px;
}
#entry-head h2 {
margin-top: 0px;
margin-bottom: 0px;
border-bottom: 0px;
}
entry-head h2 {
margin-top: 0px;
margin-bottom: 0px;
border-bottom: 0px;
}
#entry-date {
font-size: small;
font-weight: bold;
padding-right: 20px;
float: right;
}
entry-date {
font-size: small;
font-weight: bold;
padding-right: 20px;
float: right;
}
#entry-text {
margin-right: 20px;
}
entry-text {
margin-right: 20px;
}
#content p.quoted {
margin-left: 10px;
margin-right: 20px;
}
#entry-text img {
padding-bottom: 10px;
}
entry-text img {
padding-bottom: 10px;
}
#entry-qotd {
position: relative;
top: 0px;
right: 0px;
float: right;
margin-top: 10px;
padding: 10px;
margin-left: -40px;
}
/* Sina's style:
#entry-qotd {
background-color: #C6D1DF;
foreground-color: #304B6D;
width: 20%;
float: right;
margin-left: 25px;
padding: 5px;
padding-bottom: 25px;
border-width: 10px;
border-color: white;
}
#entry-qotd p {
margin-left: 5px;
margin-right: 5px;
}
#entry-qotd h3 {
color: white;
font-size: medium;
font-weight: bold;
margin-top: 0px;
margin-left: 0px;
margin-bottom: 15px;
}
*/