aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/f04.spad.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/f04.spad.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/f04.spad.pamphlet')
-rw-r--r--src/algebra/f04.spad.pamphlet408
1 files changed, 408 insertions, 0 deletions
diff --git a/src/algebra/f04.spad.pamphlet b/src/algebra/f04.spad.pamphlet
new file mode 100644
index 00000000..8be3d92f
--- /dev/null
+++ b/src/algebra/f04.spad.pamphlet
@@ -0,0 +1,408 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra f04.spad}
+\author{Godfrey Nolan, Mike Dewar}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{package NAGF04 NagLinearEquationSolvingPackage}
+<<package NAGF04 NagLinearEquationSolvingPackage>>=
+)abbrev package NAGF04 NagLinearEquationSolvingPackage
+++ Author: Godfrey Nolan and Mike Dewar
+++ Date Created: Jan 1994
+++ Date Last Updated: Thu May 12 17:45:31 1994
+++Description:
+++This package uses the NAG Library to solve the matrix equation \axiom{AX=B}, where \axiom{B}
+++may be a single vector or a matrix of multiple right-hand sides.
+++The matrix \axiom{A} may be real, complex, symmetric, Hermitian positive-
+++definite, or sparse. It may also be rectangular, in which case a
+++least-squares solution is obtained.
+++See \downlink{Manual Page}{manpageXXf04}.
+NagLinearEquationSolvingPackage(): Exports == Implementation where
+ S ==> Symbol
+ FOP ==> FortranOutputStackPackage
+
+ Exports ==> with
+ f04adf : (Integer,Matrix Complex DoubleFloat,Integer,Integer,_
+ Integer,Integer,Matrix Complex DoubleFloat,Integer) -> Result
+ ++ f04adf(ia,b,ib,n,m,ic,a,ifail)
+ ++ calculates the approximate solution of a set of complex
+ ++ linear equations with multiple right-hand sides, using an LU
+ ++ factorization with partial pivoting.
+ ++ See \downlink{Manual Page}{manpageXXf04adf}.
+ f04arf : (Integer,Matrix DoubleFloat,Integer,Matrix DoubleFloat,_
+ Integer) -> Result
+ ++ f04arf(ia,b,n,a,ifail)
+ ++ calculates the approximate solution of a set of real
+ ++ linear equations with a single right-hand side, using an LU
+ ++ factorization with partial pivoting.
+ ++ See \downlink{Manual Page}{manpageXXf04arf}.
+ f04asf : (Integer,Matrix DoubleFloat,Integer,Matrix DoubleFloat,_
+ Integer) -> Result
+ ++ f04asf(ia,b,n,a,ifail)
+ ++ calculates the accurate solution of a set of real
+ ++ symmetric positive-definite linear equations with a single right-
+ ++ hand side, Ax=b, using a Cholesky factorization and iterative
+ ++ refinement.
+ ++ See \downlink{Manual Page}{manpageXXf04asf}.
+ f04atf : (Matrix DoubleFloat,Integer,Matrix DoubleFloat,Integer,_
+ Integer,Integer) -> Result
+ ++ f04atf(a,ia,b,n,iaa,ifail)
+ ++ calculates the accurate solution of a set of real linear
+ ++ equations with a single right-hand side, using an LU
+ ++ factorization with partial pivoting, and iterative refinement.
+ ++ See \downlink{Manual Page}{manpageXXf04atf}.
+ f04axf : (Integer,Matrix DoubleFloat,Integer,Matrix Integer,_
+ Matrix Integer,Integer,Matrix Integer,Matrix DoubleFloat) -> Result
+ ++ f04axf(n,a,licn,icn,ikeep,mtype,idisp,rhs)
+ ++ calculates the approximate solution of a set of real
+ ++ sparse linear equations with a single right-hand side, Ax=b or
+ ++ T
+ ++ A x=b, where A has been factorized by F01BRF or F01BSF.
+ ++ See \downlink{Manual Page}{manpageXXf04axf}.
+ f04faf : (Integer,Integer,Matrix DoubleFloat,Matrix DoubleFloat,_
+ Matrix DoubleFloat,Integer) -> Result
+ ++ f04faf(job,n,d,e,b,ifail)
+ ++ calculates the approximate solution of a set of real
+ ++ symmetric positive-definite tridiagonal linear equations.
+ ++ See \downlink{Manual Page}{manpageXXf04faf}.
+ f04jgf : (Integer,Integer,Integer,DoubleFloat,_
+ Integer,Matrix DoubleFloat,Matrix DoubleFloat,Integer) -> Result
+ ++ f04jgf(m,n,nra,tol,lwork,a,b,ifail)
+ ++ finds the solution of a linear least-squares problem, Ax=b
+ ++ , where A is a real m by n (m>=n) matrix and b is an m element
+ ++ vector. If the matrix of observations is not of full rank, then
+ ++ the minimal least-squares solution is returned.
+ ++ See \downlink{Manual Page}{manpageXXf04jgf}.
+ f04maf : (Integer,Integer,Matrix DoubleFloat,Integer,_
+ Matrix Integer,Integer,Matrix Integer,Matrix DoubleFloat,Matrix Integer,Matrix Integer,Matrix DoubleFloat,Matrix DoubleFloat,Matrix Integer,Integer) -> Result
+ ++ f04maf(n,nz,avals,licn,irn,lirn,icn,wkeep,ikeep,inform,b,acc,noits,ifail)
+ ++ e a sparse symmetric positive-definite system of linear
+ ++ equations, Ax=b, using a pre-conditioned conjugate gradient
+ ++ method, where A has been factorized by F01MAF.
+ ++ See \downlink{Manual Page}{manpageXXf04maf}.
+ f04mbf : (Integer,Matrix DoubleFloat,Boolean,DoubleFloat,_
+ Integer,Integer,Integer,Integer,DoubleFloat,Integer,Union(fn:FileName,fp:Asp28(APROD)),Union(fn:FileName,fp:Asp34(MSOLVE))) -> Result
+ ++ f04mbf(n,b,precon,shift,itnlim,msglvl,lrwork,liwork,rtol,ifail,aprod,msolve)
+ ++ solves a system of real sparse symmetric linear equations
+ ++ using a Lanczos algorithm.
+ ++ See \downlink{Manual Page}{manpageXXf04mbf}.
+ f04mcf : (Integer,Matrix DoubleFloat,Integer,Matrix DoubleFloat,_
+ Matrix Integer,Integer,Matrix DoubleFloat,Integer,Integer,Integer,Integer) -> Result
+ ++ f04mcf(n,al,lal,d,nrow,ir,b,nrb,iselct,nrx,ifail)
+ ++ computes the approximate solution of a system of real
+ ++ linear equations with multiple right-hand sides, AX=B, where A
+ ++ is a symmetric positive-definite variable-bandwidth matrix, which
+ ++ has previously been factorized by F01MCF. Related systems may
+ ++ also be solved.
+ ++ See \downlink{Manual Page}{manpageXXf04mcf}.
+ f04qaf : (Integer,Integer,DoubleFloat,DoubleFloat,_
+ DoubleFloat,DoubleFloat,Integer,Integer,Integer,Integer,Matrix DoubleFloat,Integer,Union(fn:FileName,fp:Asp30(APROD))) -> Result
+ ++ f04qaf(m,n,damp,atol,btol,conlim,itnlim,msglvl,lrwork,liwork,b,ifail,aprod)
+ ++ solves sparse unsymmetric equations, sparse linear least-
+ ++ squares problems and sparse damped linear least-squares problems,
+ ++ using a Lanczos algorithm.
+ ++ See \downlink{Manual Page}{manpageXXf04qaf}.
+ Implementation ==> add
+
+ import Lisp
+ import DoubleFloat
+ import Any
+ import Record
+ import Integer
+ import Matrix DoubleFloat
+ import Boolean
+ import NAGLinkSupportPackage
+ import FortranPackage
+ import AnyFunctions1(Integer)
+ import AnyFunctions1(DoubleFloat)
+ import AnyFunctions1(Boolean)
+ import AnyFunctions1(Matrix Complex DoubleFloat)
+ import AnyFunctions1(Matrix DoubleFloat)
+ import AnyFunctions1(Matrix Integer)
+
+
+ f04adf(iaArg:Integer,bArg:Matrix Complex DoubleFloat,ibArg:Integer,_
+ nArg:Integer,mArg:Integer,icArg:Integer,_
+ aArg:Matrix Complex DoubleFloat,ifailArg:Integer): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04adf",_
+ ["ia"::S,"ib"::S,"n"::S,"m"::S,"ic"::S_
+ ,"ifail"::S,"b"::S,"c"::S,"a"::S,"wkspce"::S]$Lisp,_
+ ["c"::S,"wkspce"::S]$Lisp,_
+ [["double"::S,["wkspce"::S,"n"::S]$Lisp]$Lisp_
+ ,["integer"::S,"ia"::S,"ib"::S,"n"::S,"m"::S_
+ ,"ic"::S,"ifail"::S]$Lisp_
+ ,["double complex"::S,["b"::S,"ib"::S,"m"::S]$Lisp,["c"::S,"ic"::S,"m"::S]$Lisp,["a"::S,"ia"::S,"n"::S]$Lisp]$Lisp_
+ ]$Lisp,_
+ ["c"::S,"a"::S,"ifail"::S]$Lisp,_
+ [([iaArg::Any,ibArg::Any,nArg::Any,mArg::Any,icArg::Any,ifailArg::Any,bArg::Any,aArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04arf(iaArg:Integer,bArg:Matrix DoubleFloat,nArg:Integer,_
+ aArg:Matrix DoubleFloat,ifailArg:Integer): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04arf",_
+ ["ia"::S,"n"::S,"ifail"::S,"b"::S,"c"::S,"a"::S,"wkspce"::S]$Lisp,_
+ ["c"::S,"wkspce"::S]$Lisp,_
+ [["double"::S,["b"::S,"n"::S]$Lisp,["c"::S,"n"::S]$Lisp_
+ ,["a"::S,"ia"::S,"n"::S]$Lisp,["wkspce"::S,"n"::S]$Lisp]$Lisp_
+ ,["integer"::S,"ia"::S,"n"::S,"ifail"::S]$Lisp_
+ ]$Lisp,_
+ ["c"::S,"a"::S,"ifail"::S]$Lisp,_
+ [([iaArg::Any,nArg::Any,ifailArg::Any,bArg::Any,aArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04asf(iaArg:Integer,bArg:Matrix DoubleFloat,nArg:Integer,_
+ aArg:Matrix DoubleFloat,ifailArg:Integer): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04asf",_
+ ["ia"::S,"n"::S,"ifail"::S,"b"::S,"c"::S,"a"::S,"wk1"::S,"wk2"::S_
+ ]$Lisp,_
+ ["c"::S,"wk1"::S,"wk2"::S]$Lisp,_
+ [["double"::S,["b"::S,"n"::S]$Lisp,["c"::S,"n"::S]$Lisp_
+ ,["a"::S,"ia"::S,"n"::S]$Lisp,["wk1"::S,"n"::S]$Lisp,["wk2"::S,"n"::S]$Lisp]$Lisp_
+ ,["integer"::S,"ia"::S,"n"::S,"ifail"::S]$Lisp_
+ ]$Lisp,_
+ ["c"::S,"a"::S,"ifail"::S]$Lisp,_
+ [([iaArg::Any,nArg::Any,ifailArg::Any,bArg::Any,aArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04atf(aArg:Matrix DoubleFloat,iaArg:Integer,bArg:Matrix DoubleFloat,_
+ nArg:Integer,iaaArg:Integer,ifailArg:Integer): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04atf",_
+ ["ia"::S,"n"::S,"iaa"::S,"ifail"::S,"a"::S,"b"::S,"c"::S,"aa"::S,"wks1"::S_
+ ,"wks2"::S]$Lisp,_
+ ["c"::S,"aa"::S,"wks1"::S,"wks2"::S]$Lisp,_
+ [["double"::S,["a"::S,"ia"::S,"n"::S]$Lisp_
+ ,["b"::S,"n"::S]$Lisp,["c"::S,"n"::S]$Lisp,["aa"::S,"iaa"::S,"n"::S]$Lisp,["wks1"::S,"n"::S]$Lisp,["wks2"::S,"n"::S]$Lisp_
+ ]$Lisp_
+ ,["integer"::S,"ia"::S,"n"::S,"iaa"::S,"ifail"::S_
+ ]$Lisp_
+ ]$Lisp,_
+ ["c"::S,"aa"::S,"ifail"::S]$Lisp,_
+ [([iaArg::Any,nArg::Any,iaaArg::Any,ifailArg::Any,aArg::Any,bArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04axf(nArg:Integer,aArg:Matrix DoubleFloat,licnArg:Integer,_
+ icnArg:Matrix Integer,ikeepArg:Matrix Integer,mtypeArg:Integer,_
+ idispArg:Matrix Integer,rhsArg:Matrix DoubleFloat): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04axf",_
+ ["n"::S,"licn"::S,"mtype"::S,"resid"::S,"a"::S,"icn"::S,"ikeep"::S,"idisp"::S,"rhs"::S_
+ ,"w"::S]$Lisp,_
+ ["resid"::S,"w"::S]$Lisp,_
+ [["double"::S,["a"::S,"licn"::S]$Lisp,"resid"::S_
+ ,["rhs"::S,"n"::S]$Lisp,["w"::S,"n"::S]$Lisp]$Lisp_
+ ,["integer"::S,"n"::S,"licn"::S,["icn"::S,"licn"::S]$Lisp_
+ ,["ikeep"::S,["*"::S,"n"::S,5$Lisp]$Lisp]$Lisp,"mtype"::S,["idisp"::S,2$Lisp]$Lisp]$Lisp_
+ ]$Lisp,_
+ ["resid"::S,"rhs"::S]$Lisp,_
+ [([nArg::Any,licnArg::Any,mtypeArg::Any,aArg::Any,icnArg::Any,ikeepArg::Any,idispArg::Any,rhsArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04faf(jobArg:Integer,nArg:Integer,dArg:Matrix DoubleFloat,_
+ eArg:Matrix DoubleFloat,bArg:Matrix DoubleFloat,ifailArg:Integer): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04faf",_
+ ["job"::S,"n"::S,"ifail"::S,"d"::S,"e"::S,"b"::S]$Lisp,_
+ []$Lisp,_
+ [["double"::S,["d"::S,"n"::S]$Lisp,["e"::S,"n"::S]$Lisp_
+ ,["b"::S,"n"::S]$Lisp]$Lisp_
+ ,["integer"::S,"job"::S,"n"::S,"ifail"::S]$Lisp_
+ ]$Lisp,_
+ ["d"::S,"e"::S,"b"::S,"ifail"::S]$Lisp,_
+ [([jobArg::Any,nArg::Any,ifailArg::Any,dArg::Any,eArg::Any,bArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04jgf(mArg:Integer,nArg:Integer,nraArg:Integer,_
+ tolArg:DoubleFloat,lworkArg:Integer,aArg:Matrix DoubleFloat,_
+ bArg:Matrix DoubleFloat,ifailArg:Integer): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04jgf",_
+ ["m"::S,"n"::S,"nra"::S,"tol"::S,"lwork"::S_
+ ,"svd"::S,"sigma"::S,"irank"::S,"ifail"::S,"work"::S,"a"::S,"b"::S]$Lisp,_
+ ["svd"::S,"sigma"::S,"irank"::S,"work"::S]$Lisp,_
+ [["double"::S,"tol"::S,"sigma"::S,["work"::S,"lwork"::S]$Lisp_
+ ,["a"::S,"nra"::S,"n"::S]$Lisp,["b"::S,"m"::S]$Lisp]$Lisp_
+ ,["integer"::S,"m"::S,"n"::S,"nra"::S,"lwork"::S_
+ ,"irank"::S,"ifail"::S]$Lisp_
+ ,["logical"::S,"svd"::S]$Lisp_
+ ]$Lisp,_
+ ["svd"::S,"sigma"::S,"irank"::S,"work"::S,"a"::S,"b"::S,"ifail"::S]$Lisp,_
+ [([mArg::Any,nArg::Any,nraArg::Any,tolArg::Any,lworkArg::Any,ifailArg::Any,aArg::Any,bArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04maf(nArg:Integer,nzArg:Integer,avalsArg:Matrix DoubleFloat,_
+ licnArg:Integer,irnArg:Matrix Integer,lirnArg:Integer,_
+ icnArg:Matrix Integer,wkeepArg:Matrix DoubleFloat,ikeepArg:Matrix Integer,_
+ informArg:Matrix Integer,bArg:Matrix DoubleFloat,accArg:Matrix DoubleFloat,_
+ noitsArg:Matrix Integer,ifailArg:Integer): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04maf",_
+ ["n"::S,"nz"::S,"licn"::S,"lirn"::S,"ifail"::S_
+ ,"avals"::S,"irn"::S,"icn"::S,"wkeep"::S,"ikeep"::S_
+ ,"inform"::S,"work"::S,"b"::S,"acc"::S,"noits"::S_
+ ]$Lisp,_
+ ["work"::S]$Lisp,_
+ [["double"::S,["avals"::S,"licn"::S]$Lisp,["wkeep"::S,["*"::S,3$Lisp,"n"::S]$Lisp]$Lisp_
+ ,["work"::S,["*"::S,3$Lisp,"n"::S]$Lisp]$Lisp,["b"::S,"n"::S]$Lisp,["acc"::S,2$Lisp]$Lisp_
+ ]$Lisp_
+ ,["integer"::S,"n"::S,"nz"::S,"licn"::S,["irn"::S,"lirn"::S]$Lisp_
+ ,"lirn"::S,["icn"::S,"licn"::S]$Lisp,["ikeep"::S,["*"::S,2$Lisp,"n"::S]$Lisp]$Lisp,["inform"::S,4$Lisp]$Lisp_
+ ,["noits"::S,2$Lisp]$Lisp,"ifail"::S]$Lisp_
+ ]$Lisp,_
+ ["work"::S,"b"::S,"acc"::S,"noits"::S,"ifail"::S]$Lisp,_
+ [([nArg::Any,nzArg::Any,licnArg::Any,lirnArg::Any,ifailArg::Any,avalsArg::Any,irnArg::Any,icnArg::Any,wkeepArg::Any,ikeepArg::Any,informArg::Any,bArg::Any,accArg::Any,noitsArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04mbf(nArg:Integer,bArg:Matrix DoubleFloat,preconArg:Boolean,_
+ shiftArg:DoubleFloat,itnlimArg:Integer,msglvlArg:Integer,_
+ lrworkArg:Integer,liworkArg:Integer,rtolArg:DoubleFloat,_
+ ifailArg:Integer,aprodArg:Union(fn:FileName,fp:Asp28(APROD)),msolveArg:Union(fn:FileName,fp:Asp34(MSOLVE))): Result ==
+-- if both asps are AXIOM generated we do not need lrwork liwork
+-- and will set to 1.
+-- else believe the user but check that they are >0.
+ if (aprodArg case fp) and (msolveArg case fp)
+ then
+ lrworkArg:=1
+ liworkArg:=1
+ else
+ lrworkArg:=max(1,lrworkArg)
+ liworkArg:=max(1,liworkArg)
+ pushFortranOutputStack(aprodFilename := aspFilename "aprod")$FOP
+ if aprodArg case fn
+ then outputAsFortran(aprodArg.fn)
+ else outputAsFortran(aprodArg.fp)
+ popFortranOutputStack()$FOP
+ pushFortranOutputStack(msolveFilename := aspFilename "msolve")$FOP
+ if msolveArg case fn
+ then outputAsFortran(msolveArg.fn)
+ else outputAsFortran(msolveArg.fp)
+ popFortranOutputStack()$FOP
+ [(invokeNagman([aprodFilename,msolveFilename]$Lisp,_
+ "f04mbf",_
+ ["n"::S,"precon"::S,"shift"::S,"itnlim"::S,"msglvl"::S_
+ ,"lrwork"::S,"liwork"::S,"itn"::S,"anorm"::S,"acond"::S_
+ ,"rnorm"::S,"xnorm"::S,"inform"::S,"rtol"::S,"ifail"::S_
+ ,"aprod"::S,"msolve"::S,"b"::S,"x"::S,"work"::S,"rwork"::S,"iwork"::S_
+ ]$Lisp,_
+ ["x"::S,"itn"::S,"anorm"::S,"acond"::S,"rnorm"::S,"xnorm"::S,"inform"::S,"work"::S,"rwork"::S,"iwork"::S,"aprod"::S,"msolve"::S]$Lisp,_
+ [["double"::S,["b"::S,"n"::S]$Lisp,"shift"::S_
+ ,["x"::S,"n"::S]$Lisp,"anorm"::S,"acond"::S,"rnorm"::S,"xnorm"::S,"rtol"::S,["work"::S,"n"::S,5$Lisp]$Lisp,["rwork"::S,"lrwork"::S]$Lisp_
+ ,"aprod"::S,"msolve"::S]$Lisp_
+ ,["integer"::S,"n"::S,"itnlim"::S,"msglvl"::S_
+ ,"lrwork"::S,"liwork"::S,"itn"::S,"inform"::S,"ifail"::S,["iwork"::S,"liwork"::S]$Lisp]$Lisp_
+ ,["logical"::S,"precon"::S]$Lisp_
+ ]$Lisp,_
+ ["x"::S,"itn"::S,"anorm"::S,"acond"::S,"rnorm"::S,"xnorm"::S,"inform"::S,"rtol"::S,"ifail"::S]$Lisp,_
+ [([nArg::Any,preconArg::Any,shiftArg::Any,itnlimArg::Any,msglvlArg::Any,lrworkArg::Any,liworkArg::Any,rtolArg::Any,ifailArg::Any,bArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04mcf(nArg:Integer,alArg:Matrix DoubleFloat,lalArg:Integer,_
+ dArg:Matrix DoubleFloat,nrowArg:Matrix Integer,irArg:Integer,_
+ bArg:Matrix DoubleFloat,nrbArg:Integer,iselctArg:Integer,_
+ nrxArg:Integer,ifailArg:Integer): Result ==
+ [(invokeNagman(NIL$Lisp,_
+ "f04mcf",_
+ ["n"::S,"lal"::S,"ir"::S,"nrb"::S,"iselct"::S_
+ ,"nrx"::S,"ifail"::S,"al"::S,"d"::S,"nrow"::S,"b"::S,"x"::S_
+ ]$Lisp,_
+ ["x"::S]$Lisp,_
+ [["double"::S,["al"::S,"lal"::S]$Lisp,["d"::S,"n"::S]$Lisp_
+ ,["b"::S,"nrb"::S,"ir"::S]$Lisp,["x"::S,"nrx"::S,"ir"::S]$Lisp]$Lisp_
+ ,["integer"::S,"n"::S,"lal"::S,["nrow"::S,"n"::S]$Lisp_
+ ,"ir"::S,"nrb"::S,"iselct"::S,"nrx"::S,"ifail"::S]$Lisp_
+ ]$Lisp,_
+ ["x"::S,"ifail"::S]$Lisp,_
+ [([nArg::Any,lalArg::Any,irArg::Any,nrbArg::Any,iselctArg::Any,nrxArg::Any,ifailArg::Any,alArg::Any,dArg::Any,nrowArg::Any,bArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+ f04qaf(mArg:Integer,nArg:Integer,dampArg:DoubleFloat,_
+ atolArg:DoubleFloat,btolArg:DoubleFloat,conlimArg:DoubleFloat,_
+ itnlimArg:Integer,msglvlArg:Integer,lrworkArg:Integer,_
+ liworkArg:Integer,bArg:Matrix DoubleFloat,ifailArg:Integer,_
+ aprodArg:Union(fn:FileName,fp:Asp30(APROD))): Result ==
+ pushFortranOutputStack(aprodFilename := aspFilename "aprod")$FOP
+ if aprodArg case fn
+ then outputAsFortran(aprodArg.fn)
+ else outputAsFortran(aprodArg.fp)
+ popFortranOutputStack()$FOP
+ [(invokeNagman([aprodFilename]$Lisp,_
+ "f04qaf",_
+ ["m"::S,"n"::S,"damp"::S,"atol"::S,"btol"::S_
+ ,"conlim"::S,"itnlim"::S,"msglvl"::S,"lrwork"::S,"liwork"::S_
+ ,"itn"::S,"anorm"::S,"acond"::S,"rnorm"::S,"arnorm"::S_
+ ,"xnorm"::S,"inform"::S,"ifail"::S,"aprod"::S,"x"::S,"se"::S,"b"::S,"work"::S,"rwork"::S_
+ ,"iwork"::S]$Lisp,_
+ ["x"::S,"se"::S,"itn"::S,"anorm"::S,"acond"::S,"rnorm"::S,"arnorm"::S,"xnorm"::S,"inform"::S,"work"::S,"rwork"::S,"iwork"::S,"aprod"::S]$Lisp,_
+ [["double"::S,"damp"::S,"atol"::S,"btol"::S_
+ ,"conlim"::S,["x"::S,"n"::S]$Lisp,["se"::S,"n"::S]$Lisp,"anorm"::S,"acond"::S,"rnorm"::S,"arnorm"::S,"xnorm"::S,["b"::S,"m"::S]$Lisp_
+ ,["work"::S,"n"::S,2$Lisp]$Lisp,["rwork"::S,"lrwork"::S]$Lisp,"aprod"::S]$Lisp_
+ ,["integer"::S,"m"::S,"n"::S,"itnlim"::S,"msglvl"::S_
+ ,"lrwork"::S,"liwork"::S,"itn"::S,"inform"::S,"ifail"::S,["iwork"::S,"liwork"::S]$Lisp]$Lisp_
+ ]$Lisp,_
+ ["x"::S,"se"::S,"itn"::S,"anorm"::S,"acond"::S,"rnorm"::S,"arnorm"::S,"xnorm"::S,"inform"::S,"b"::S,"ifail"::S]$Lisp,_
+ [([mArg::Any,nArg::Any,dampArg::Any,atolArg::Any,btolArg::Any,conlimArg::Any,itnlimArg::Any,msglvlArg::Any,lrworkArg::Any,liworkArg::Any,ifailArg::Any,bArg::Any ])_
+ @List Any]$Lisp)$Lisp)_
+ pretend List (Record(key:Symbol,entry:Any))]$Result
+
+@
+\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>>
+
+<<package NAGF04 NagLinearEquationSolvingPackage>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}