aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/suls.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/suls.spad.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/suls.spad.pamphlet')
-rw-r--r--src/algebra/suls.spad.pamphlet250
1 files changed, 250 insertions, 0 deletions
diff --git a/src/algebra/suls.spad.pamphlet b/src/algebra/suls.spad.pamphlet
new file mode 100644
index 00000000..8bdf483b
--- /dev/null
+++ b/src/algebra/suls.spad.pamphlet
@@ -0,0 +1,250 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra suls.spad}
+\author{Clifton J. Williamson}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{domain SULS SparseUnivariateLaurentSeries}
+<<domain SULS SparseUnivariateLaurentSeries>>=
+)abbrev domain SULS SparseUnivariateLaurentSeries
+++ Author: Clifton J. Williamson
+++ Date Created: 11 November 1994
+++ Date Last Updated: 10 March 1995
+++ Basic Operations:
+++ Related Domains: InnerSparseUnivariatePowerSeries,
+++ SparseUnivariateTaylorSeries, SparseUnivariatePuiseuxSeries
+++ Also See:
+++ AMS Classifications:
+++ Keywords: sparse, series
+++ Examples:
+++ References:
+++ Description: Sparse Laurent series in one variable
+++ \spadtype{SparseUnivariateLaurentSeries} is a domain representing Laurent
+++ series in one variable with coefficients in an arbitrary ring. The
+++ parameters of the type specify the coefficient ring, the power series
+++ variable, and the center of the power series expansion. For example,
+++ \spad{SparseUnivariateLaurentSeries(Integer,x,3)} represents Laurent
+++ series in \spad{(x - 3)} with integer coefficients.
+SparseUnivariateLaurentSeries(Coef,var,cen): Exports == Implementation where
+ Coef : Ring
+ var : Symbol
+ cen : Coef
+ I ==> Integer
+ NNI ==> NonNegativeInteger
+ OUT ==> OutputForm
+ P ==> Polynomial Coef
+ RF ==> Fraction Polynomial Coef
+ RN ==> Fraction Integer
+ S ==> String
+ SUTS ==> SparseUnivariateTaylorSeries(Coef,var,cen)
+ EFULS ==> ElementaryFunctionsUnivariateLaurentSeries(Coef,SUTS,%)
+
+ Exports ==> UnivariateLaurentSeriesConstructorCategory(Coef,SUTS) with
+ coerce: Variable(var) -> %
+ ++ \spad{coerce(var)} converts the series variable \spad{var} into a
+ ++ Laurent series.
+ differentiate: (%,Variable(var)) -> %
+ ++ \spad{differentiate(f(x),x)} returns the derivative of
+ ++ \spad{f(x)} with respect to \spad{x}.
+ if Coef has Algebra Fraction Integer then
+ integrate: (%,Variable(var)) -> %
+ ++ \spad{integrate(f(x))} returns an anti-derivative of the power
+ ++ series \spad{f(x)} with constant coefficient 0.
+ ++ We may integrate a series when we can divide coefficients
+ ++ by integers.
+
+ Implementation ==> InnerSparseUnivariatePowerSeries(Coef) add
+
+ Rep := InnerSparseUnivariatePowerSeries(Coef)
+
+ variable x == var
+ center x == cen
+
+ coerce(v: Variable(var)) ==
+ zero? cen => monomial(1,1)
+ monomial(1,1) + monomial(cen,0)
+
+ pole? x == negative? order(x,0)
+
+--% operations with Taylor series
+
+ coerce(uts:SUTS) == uts pretend %
+
+ taylorIfCan uls ==
+ pole? uls => "failed"
+ uls pretend SUTS
+
+ taylor uls ==
+ (uts := taylorIfCan uls) case "failed" =>
+ error "taylor: Laurent series has a pole"
+ uts :: SUTS
+
+ retractIfCan(x:%):Union(SUTS,"failed") == taylorIfCan x
+
+ laurent(n,uts) == monomial(1,n) * (uts :: %)
+
+ removeZeroes uls == uls
+ removeZeroes(n,uls) == uls
+
+ taylorRep uls == taylor(monomial(1,-order(uls,0)) * uls)
+ degree uls == order(uls,0)
+
+ numer uls == taylorRep uls
+ denom uls == monomial(1,(-order(uls,0)) :: NNI)$SUTS
+
+ (uts:SUTS) * (uls:%) == (uts :: %) * uls
+ (uls:%) * (uts:SUTS) == uls * (uts :: %)
+
+ if Coef has Field then
+ (uts1:SUTS) / (uts2:SUTS) == (uts1 :: %) / (uts2 :: %)
+
+ recip(uls) == iExquo(1,uls,false)
+
+ if Coef has IntegralDomain then
+ uls1 exquo uls2 == iExquo(uls1,uls2,false)
+
+ if Coef has Field then
+ uls1:% / uls2:% ==
+ (q := uls1 exquo uls2) case "failed" =>
+ error "quotient cannot be computed"
+ q :: %
+
+ differentiate(uls:%,v:Variable(var)) == differentiate uls
+
+ elt(uls1:%,uls2:%) ==
+ order(uls2,1) < 1 =>
+ error "elt: second argument must have positive order"
+ negative?(ord := order(uls1,0)) =>
+ (recipr := recip uls2) case "failed" =>
+ error "elt: second argument not invertible"
+ uls3 := uls1 * monomial(1,-ord)
+ iCompose(uls3,uls2) * (recipr :: %) ** ((-ord) :: NNI)
+ iCompose(uls1,uls2)
+
+ if Coef has IntegralDomain then
+ rationalFunction(uls,n) ==
+ zero?(e := order(uls,0)) =>
+ negative? n => 0
+ polynomial(taylor uls,n :: NNI) :: RF
+ negative?(m := n - e) => 0
+ poly := polynomial(taylor(monomial(1,-e) * uls),m :: NNI) :: RF
+ v := variable(uls) :: RF; c := center(uls) :: P :: RF
+ poly / (v - c) ** ((-e) :: NNI)
+
+ rationalFunction(uls,n1,n2) == rationalFunction(truncate(uls,n1,n2),n2)
+
+ if Coef has Algebra Fraction Integer then
+
+ integrate uls ==
+ zero? coefficient(uls,-1) =>
+ error "integrate: series has term of order -1"
+ integrate(uls)$Rep
+
+ integrate(uls:%,v:Variable(var)) == integrate uls
+
+ (uls1:%) ** (uls2:%) == exp(log(uls1) * uls2)
+
+ exp uls == exp(uls)$EFULS
+ log uls == log(uls)$EFULS
+ sin uls == sin(uls)$EFULS
+ cos uls == cos(uls)$EFULS
+ tan uls == tan(uls)$EFULS
+ cot uls == cot(uls)$EFULS
+ sec uls == sec(uls)$EFULS
+ csc uls == csc(uls)$EFULS
+ asin uls == asin(uls)$EFULS
+ acos uls == acos(uls)$EFULS
+ atan uls == atan(uls)$EFULS
+ acot uls == acot(uls)$EFULS
+ asec uls == asec(uls)$EFULS
+ acsc uls == acsc(uls)$EFULS
+ sinh uls == sinh(uls)$EFULS
+ cosh uls == cosh(uls)$EFULS
+ tanh uls == tanh(uls)$EFULS
+ coth uls == coth(uls)$EFULS
+ sech uls == sech(uls)$EFULS
+ csch uls == csch(uls)$EFULS
+ asinh uls == asinh(uls)$EFULS
+ acosh uls == acosh(uls)$EFULS
+ atanh uls == atanh(uls)$EFULS
+ acoth uls == acoth(uls)$EFULS
+ asech uls == asech(uls)$EFULS
+ acsch uls == acsch(uls)$EFULS
+
+ if Coef has CommutativeRing then
+
+ (uls:%) ** (r:RN) == cRationalPower(uls,r)
+
+ else
+
+ (uls:%) ** (r:RN) ==
+ negative?(ord0 := order(uls,0)) =>
+ order := ord0 :: I
+ (n := order exquo denom(r)) case "failed" =>
+ error "**: rational power does not exist"
+ uts := retract(uls * monomial(1,-order))@SUTS
+ utsPow := (uts ** r) :: %
+ monomial(1,(n :: I) * numer(r)) * utsPow
+ uts := retract(uls)@SUTS
+ (uts ** r) :: %
+
+--% OutputForms
+
+ coerce(uls:%): OUT ==
+ st := getStream uls
+ if not(explicitlyEmpty? st or explicitEntries? st) _
+ and (nx := retractIfCan(elt getRef uls))@Union(I,"failed") case I then
+ count : NNI := _$streamCount$Lisp
+ degr := min(count,(nx :: I) + count + 1)
+ extend(uls,degr)
+ seriesToOutputForm(st,getRef uls,variable uls,center uls,1)
+
+@
+\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>>
+
+<<domain SULS SparseUnivariateLaurentSeries>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}