aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/nqip.as.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/nqip.as.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/nqip.as.pamphlet')
-rw-r--r--src/algebra/nqip.as.pamphlet231
1 files changed, 231 insertions, 0 deletions
diff --git a/src/algebra/nqip.as.pamphlet b/src/algebra/nqip.as.pamphlet
new file mode 100644
index 00000000..e3e8d968
--- /dev/null
+++ b/src/algebra/nqip.as.pamphlet
@@ -0,0 +1,231 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra nqip.as}
+\author{Michael Richardson}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{NagQuadratureInterfacePackage}
+<<NagQuadratureInterfacePackage>>=
++++ Author: M.G. Richardson
++++ Date Created: 1995 Dec. 07
++++ Date Last Updated:
++++ Basic Functions:
++++ Related Constructors:
++++ Also See:
++++ AMS Classifications:
++++ Keywords:
++++ References:
++++ Description:
++++ This package provides Axiom-like interfaces to some of the NAG
++++ quadrature (numerical integration) routines in the NAGlink.
+
+NagQuadratureInterfacePackage: with {
+
+ nagPolygonIntegrate : (LDF, LDF) ->
+ RCD(integral : DF, errorEstimate : DF) ;
+
+ ++ nagPolygonIntegrate(xlist,ylist) evaluates the definite integral
+#if saturn
+ ++ $\int_{x_{1}}^{x_{n}}y(x) \, dx$
+#else
+ ++ integrate(y(x), x=x[1]..x[n])
+#endif
+ ++ where the numerical value of the function \spad{y} is specified at
+ ++ the \spad{n} distinct points
+#if saturn
+ ++ $x_{1}, x_{2}, \ldots , x_{n}$.
+#else
+ ++ x[1], x[2] ... x[n].
+#endif
+ ++ The \spad{x} and \spad{y} values are specified in the lists
+ ++ \spad{xlist} and \spad{ylist}, respectively; the \spad{xlist}
+ ++ values must form a strictly monotonic sequence of four or more
+ ++ points.
+ ++ The calculation is performed by the NAG routine D01GAF.
+ ++
+ ++ An estimate of the numerical error in the calculation is also
+ ++ returned; however, by choosing unrepresentative data points to
+ ++ approximate the function it is possible to achieve an arbitrarily
+ ++ large difference between the true integral and the value
+ ++ calculated.
+ ++ For more detailed information, please consult the NAG
+ ++ manual via the Browser page for the operation d01gaf.
+
+ nagPolygonIntegrate : MDF -> RCD(integral : DF, errorEstimate : DF) ;
+
+
+} == add {
+
+ import from NagIntegrationPackage ;
+ import from NagResultChecks ;
+ import from AnyFunctions1 DF ;
+ import from STRG ;
+ import from List STRG ;
+ import from Symbol ;
+ import from LLDF ;
+ import from VDF ;
+ import from MDF ;
+ import from ErrorFunctions ;
+
+ local ipIfail : INT := -1 ;
+ local d01gafError : DF := 0 ;
+
+ nagPolygonIntegrate(xlist : LDF, ylist : LDF)
+ : RCD(integral : DF, errorEstimate : DF) == {
+
+ local lx, ly : INT ;
+ local d01gafResult : RSLT ;
+
+ lx := (# xlist) pretend INT ;
+ ly := (# ylist) pretend INT ;
+ if lx ~= ly
+ then error ["The lists supplied to nagPolygonIntegrate are of ",
+ "different lengths: ",
+ string(lx),
+ " and ",
+ string(ly),
+ "."]
+ else {
+ d01gafResult := d01gaf(matrix [xlist],matrix [ylist],lx,ipIfail) ;
+ [checkResult(d01gafResult,"ans","D01GAF"),
+ retract(d01gafResult."er") @ DF]
+ }
+ }
+
+ nagPolygonIntegrate(coords : MDF)
+ : RCD(integral : DF, errorEstimate : DF) ==
+ if (ncols(coords) pretend INT) ~= 2
+ then error ["Please supply the coordinate matrix in ",
+ "nagPolygonIntegrate with each row consisting of ",
+ "a single x-y pair."]
+ else nagPolygonIntegrate(members column(coords,1),
+ members column(coords,2)) ;
+
+}
+
+#if NeverAssertThis
+
+-- Note that the conversions of results from DoubleFloat to Float
+-- will become unnecessary if outputGeneral is extended to apply to
+-- DoubleFloat quantities.
+
+)lib nrc
+)lib nqip
+
+outputGeneral 5
+
+xvals := [0.00,0.04,0.08,0.12,0.22,0.26,0.30,0.38,0.39,0.42,0.45,
+ 0.46,0.60,0.68,0.72,0.73,0.83,0.85,0.88,0.90,1.00];
+
+yvals := [4.0000,3.9936,3.9746,3.9432,3.8135,3.7467,3.6697,3.4943,
+ 3.4719,3.4002,3.3264,3.3017,2.9412,2.7352,2.6344,
+ 2.6094,2.3684,2.3222,2.2543,2.2099,2.0000];
+
+result := nagPolygonIntegrate(xvals,yvals);
+result.integral :: Float
+
+-- 3.1414
+
+result.errorEstimate :: Float
+
+-- - 0.000025627
+
+coords := transpose matrix [xvals, yvals];
+result := nagPolygonIntegrate coords;
+result.integral :: Float
+
+-- 3.1414
+
+result.errorEstimate :: Float
+
+-- - 0.000025627
+
+nagPolygonIntegrate([1,2,3],[1,2,3,4])
+
+-- Error signalled from user code:
+-- The lists supplied to nagPolygonIntegrate are of different
+-- lengths: 3 and 4.
+
+nagPolygonIntegrate([[1,2,3],[4,5,6]])
+
+-- Error signalled from user code:
+-- Please supply the coordinate matrix in nagPolygonIntegrate with
+-- each row consisting of single a x-y pair.
+
+outputGeneral()
+
+output "End of tests"
+
+#endif
+
+@
+\section{License}
+<<license>>=
+--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+--All rights reserved.
+--
+--Redistribution and use in source and binary forms, with or without
+--modification, are permitted provided that the following conditions are
+--met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in
+-- the documentation and/or other materials provided with the
+-- distribution.
+--
+-- - Neither the name of The Numerical ALgorithms Group Ltd. 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.
+@
+<<*>>=
+<<license>>
+
+-- NagQuadratureInterfacePackage
+
+-- To test:
+-- sed -ne '1,/^#if NeverAssertThis/d;/#endif/d;p' < nqip.as > nqip.input
+-- axiom
+-- )set nag host <some machine running nagd>
+-- )r nqip.input
+
+#unassert saturn
+
+#include "axiom.as"
+
+DF ==> DoubleFloat ;
+LDF ==> List DoubleFloat ;
+LLDF ==> List LDF ;
+VDF ==> Vector DoubleFloat ;
+MDF ==> Matrix DoubleFloat ;
+INT ==> Integer ;
+RCD ==> Record ;
+RSLT ==> Result ;
+STRG ==> String ;
+
+<<NagQuadratureInterfacePackage>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}