aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/solvelin.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/solvelin.spad.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/solvelin.spad.pamphlet')
-rw-r--r--src/algebra/solvelin.spad.pamphlet282
1 files changed, 282 insertions, 0 deletions
diff --git a/src/algebra/solvelin.spad.pamphlet b/src/algebra/solvelin.spad.pamphlet
new file mode 100644
index 00000000..9c35d201
--- /dev/null
+++ b/src/algebra/solvelin.spad.pamphlet
@@ -0,0 +1,282 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra solvelin.spad}
+\author{Patrizia Gianni, Stephen M. Watt, Robert Sutor}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{package LSMP LinearSystemMatrixPackage}
+<<package LSMP LinearSystemMatrixPackage>>=
+)abbrev package LSMP LinearSystemMatrixPackage
+++ Author: P.Gianni, S.Watt
+++ Date Created: Summer 1985
+++ Date Last Updated:Summer 1990
+++ Basic Functions: solve, particularSolution, hasSolution?, rank
+++ Related Constructors: LinearSystemMatrixPackage1
+++ Also See:
+++ AMS Classifications:
+++ Keywords:
+++ References:
+++ Description:
+++ This package solves linear system in the matrix form \spad{AX = B}.
+
+LinearSystemMatrixPackage(F, Row, Col, M): Cat == Capsule where
+ F: Field
+ Row: FiniteLinearAggregate F with shallowlyMutable
+ Col: FiniteLinearAggregate F with shallowlyMutable
+ M : MatrixCategory(F, Row, Col)
+
+ N ==> NonNegativeInteger
+ PartialV ==> Union(Col, "failed")
+ Both ==> Record(particular: PartialV, basis: List Col)
+
+ Cat ==> with
+ solve : (M, Col) -> Both
+ ++ solve(A,B) finds a particular solution of the system \spad{AX = B}
+ ++ and a basis of the associated homogeneous system \spad{AX = 0}.
+ solve : (M, List Col) -> List Both
+ ++ solve(A,LB) finds a particular soln of the systems \spad{AX = B}
+ ++ and a basis of the associated homogeneous systems \spad{AX = 0}
+ ++ where B varies in the list of column vectors LB.
+
+ particularSolution: (M, Col) -> PartialV
+ ++ particularSolution(A,B) finds a particular solution of the linear
+ ++ system \spad{AX = B}.
+ hasSolution?: (M, Col) -> Boolean
+ ++ hasSolution?(A,B) tests if the linear system \spad{AX = B}
+ ++ has a solution.
+ rank : (M, Col) -> N
+ ++ rank(A,B) computes the rank of the complete matrix \spad{(A|B)}
+ ++ of the linear system \spad{AX = B}.
+
+ Capsule ==> add
+ systemMatrix : (M, Col) -> M
+ aSolution : M -> PartialV
+
+ -- rank theorem
+ hasSolution?(A, b) == rank A = rank systemMatrix(A, b)
+ systemMatrix(m, v) == horizConcat(m, -(v::M))
+ rank(A, b) == rank systemMatrix(A, b)
+ particularSolution(A, b) == aSolution rowEchelon systemMatrix(A,b)
+
+ -- m should be in row-echelon form.
+ -- last column of m is -(right-hand-side of system)
+ aSolution m ==
+ nvar := (ncols m - 1)::N
+ rk := maxRowIndex m
+ while (rk >= minRowIndex m) and every?(zero?, row(m, rk))
+ repeat rk := dec rk
+ rk < minRowIndex m => new(nvar, 0)
+ ck := minColIndex m
+ while (ck < maxColIndex m) and zero? qelt(m, rk, ck) repeat
+ ck := inc ck
+ ck = maxColIndex m => "failed"
+ sol := new(nvar, 0)$Col
+ -- find leading elements of diagonal
+ v := new(nvar, minRowIndex m - 1)$PrimitiveArray(Integer)
+ for i in minRowIndex m .. rk repeat
+ for j in 0.. while zero? qelt(m, i, j+minColIndex m) repeat 0
+ v.j := i
+ for j in 0..nvar-1 repeat
+ if v.j >= minRowIndex m then
+ qsetelt_!(sol, j+minIndex sol, - qelt(m, v.j, maxColIndex m))
+ sol
+
+ solve(A:M, b:Col) ==
+ -- Special case for homogeneous systems.
+ every?(zero?, b) => [new(ncols A, 0), nullSpace A]
+ -- General case.
+ m := rowEchelon systemMatrix(A, b)
+ [aSolution m,
+ nullSpace subMatrix(m, minRowIndex m, maxRowIndex m,
+ minColIndex m, maxColIndex m - 1)]
+
+ solve(A:M, l:List Col) ==
+ null l => [[new(ncols A, 0), nullSpace A]]
+ nl := (sol0 := solve(A, first l)).basis
+ cons(sol0,
+ [[aSolution rowEchelon systemMatrix(A, b), nl]
+ for b in rest l])
+
+@
+\section{package LSMP1 LinearSystemMatrixPackage1}
+<<package LSMP1 LinearSystemMatrixPackage1>>=
+)abbrev package LSMP1 LinearSystemMatrixPackage1
+++ Author: R. Sutor
+++ Date Created: June, 1994
+++ Date Last Updated:
+++ Basic Functions: solve, particularSolution, hasSolution?, rank
+++ Related Constructors: LinearSystemMatrixPackage
+++ Also See:
+++ AMS Classifications:
+++ Keywords: solve
+++ References:
+++ Description:
+++ This package solves linear system in the matrix form \spad{AX = B}.
+++ It is essentially a particular instantiation of the package
+++ \spadtype{LinearSystemMatrixPackage} for Matrix and Vector. This
+++ package's existence makes it easier to use \spadfun{solve} in the
+++ AXIOM interpreter.
+
+LinearSystemMatrixPackage1(F): Cat == Capsule where
+ F: Field
+ Row ==> Vector F
+ Col ==> Vector F
+ M ==> Matrix(F)
+ LL ==> List List F
+
+ N ==> NonNegativeInteger
+ PartialV ==> Union(Col, "failed")
+ Both ==> Record(particular: PartialV, basis: List Col)
+ LSMP ==> LinearSystemMatrixPackage(F, Row, Col, M)
+
+ Cat ==> with
+ solve : (M, Col) -> Both
+ ++ solve(A,B) finds a particular solution of the system \spad{AX = B}
+ ++ and a basis of the associated homogeneous system \spad{AX = 0}.
+ solve : (LL, Col) -> Both
+ ++ solve(A,B) finds a particular solution of the system \spad{AX = B}
+ ++ and a basis of the associated homogeneous system \spad{AX = 0}.
+ solve : (M, List Col) -> List Both
+ ++ solve(A,LB) finds a particular soln of the systems \spad{AX = B}
+ ++ and a basis of the associated homogeneous systems \spad{AX = 0}
+ ++ where B varies in the list of column vectors LB.
+ solve : (LL, List Col) -> List Both
+ ++ solve(A,LB) finds a particular soln of the systems \spad{AX = B}
+ ++ and a basis of the associated homogeneous systems \spad{AX = 0}
+ ++ where B varies in the list of column vectors LB.
+
+ particularSolution: (M, Col) -> PartialV
+ ++ particularSolution(A,B) finds a particular solution of the linear
+ ++ system \spad{AX = B}.
+ hasSolution?: (M, Col) -> Boolean
+ ++ hasSolution?(A,B) tests if the linear system \spad{AX = B}
+ ++ has a solution.
+ rank : (M, Col) -> N
+ ++ rank(A,B) computes the rank of the complete matrix \spad{(A|B)}
+ ++ of the linear system \spad{AX = B}.
+
+ Capsule ==> add
+ solve(m : M, c: Col): Both == solve(m,c)$LSMP
+ solve(ll : LL, c: Col): Both == solve(matrix(ll)$M,c)$LSMP
+ solve(m : M, l : List Col): List Both == solve(m, l)$LSMP
+ solve(ll : LL, l : List Col): List Both == solve(matrix(ll)$M, l)$LSMP
+ particularSolution (m : M, c : Col): PartialV == particularSolution(m, c)$LSMP
+ hasSolution?(m :M, c : Col): Boolean == hasSolution?(m, c)$LSMP
+ rank(m : M, c : Col): N == rank(m, c)$LSMP
+
+@
+\section{package LSPP LinearSystemPolynomialPackage}
+<<package LSPP LinearSystemPolynomialPackage>>=
+)abbrev package LSPP LinearSystemPolynomialPackage
+++ Author: P.Gianni
+++ Date Created: Summer 1985
+++ Date Last Updated: Summer 1993
+++ Basic Functions:
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords:
+++ References: SystemSolvePackage
+++ Description:
+++ this package finds the solutions of linear systems presented as a
+++ list of polynomials.
+
+LinearSystemPolynomialPackage(R, E, OV, P): Cat == Capsule where
+ R : IntegralDomain
+ OV : OrderedSet
+ E : OrderedAbelianMonoidSup
+ P : PolynomialCategory(R,E,OV)
+
+ F ==> Fraction P
+ NNI ==> NonNegativeInteger
+ V ==> Vector
+ M ==> Matrix
+ Soln ==> Record(particular: Union(V F, "failed"), basis: List V F)
+
+ Cat == with
+ linSolve: (List P, List OV) -> Soln
+ ++ linSolve(lp,lvar) finds the solutions of the linear system
+ ++ of polynomials lp = 0 with respect to the list of symbols lvar.
+
+ Capsule == add
+
+ ---- Local Functions ----
+
+ poly2vect: (P, List OV) -> Record(coefvec: V F, reductum: F)
+ intoMatrix: (List P, List OV) -> Record(mat: M F, vec: V F)
+
+
+ poly2vect(p : P, vs : List OV) : Record(coefvec: V F, reductum: F) ==
+ coefs := new(#vs, 0)$(V F)
+ for v in vs for i in 1.. while p ^= 0 repeat
+ u := univariate(p, v)
+ degree u = 0 => "next v"
+ coefs.i := (c := leadingCoefficient u)::F
+ p := p - monomial(c,v, 1)
+ [coefs, p :: F]
+
+ intoMatrix(ps : List P, vs : List OV ) : Record(mat: M F, vec: V F) ==
+ m := zero(#ps, #vs)$M(F)
+ v := new(#ps, 0)$V(F)
+ for p in ps for i in 1.. repeat
+ totalDegree(p,vs) > 1 => error "The system is not linear"
+ r := poly2vect(p,vs)
+ m:=setRow_!(m,i,r.coefvec)
+ v.i := - r.reductum
+ [m, v]
+
+ linSolve(ps, vs) ==
+ r := intoMatrix(ps, vs)
+ solve(r.mat, r.vec)$LinearSystemMatrixPackage(F,V F,V F,M F)
+
+@
+\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 LSMP LinearSystemMatrixPackage>>
+<<package LSMP1 LinearSystemMatrixPackage1>>
+<<package LSPP LinearSystemPolynomialPackage>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}