diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/genups.spad.pamphlet | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/algebra/genups.spad.pamphlet')
-rw-r--r-- | src/algebra/genups.spad.pamphlet | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/src/algebra/genups.spad.pamphlet b/src/algebra/genups.spad.pamphlet new file mode 100644 index 00000000..efc99560 --- /dev/null +++ b/src/algebra/genups.spad.pamphlet @@ -0,0 +1,249 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/algebra genups.spad} +\author{Clifton J. Williamson} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{package GENUPS GenerateUnivariatePowerSeries} +<<package GENUPS GenerateUnivariatePowerSeries>>= +)abbrev package GENUPS GenerateUnivariatePowerSeries +++ Author: Clifton J. Williamson +++ Date Created: 29 April 1990 +++ Date Last Updated: 31 May 1990 +++ Basic Operations: +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keywords: series, Taylor, Laurent, Puiseux +++ Examples: +++ References: +++ Description: +++ \spadtype{GenerateUnivariatePowerSeries} provides functions that create +++ power series from explicit formulas for their \spad{n}th coefficient. +GenerateUnivariatePowerSeries(R,FE): Exports == Implementation where + R : Join(IntegralDomain,OrderedSet,RetractableTo Integer,_ + LinearlyExplicitRingOver Integer) + FE : Join(AlgebraicallyClosedField,TranscendentalFunctionCategory,_ + FunctionSpace R) + ANY1 ==> AnyFunctions1 + EQ ==> Equation + I ==> Integer + NNI ==> NonNegativeInteger + RN ==> Fraction Integer + SEG ==> UniversalSegment + ST ==> Stream + SY ==> Symbol + UTS ==> UnivariateTaylorSeries + ULS ==> UnivariateLaurentSeries + UPXS ==> UnivariatePuiseuxSeries + + Exports ==> with + taylor: (I -> FE,EQ FE) -> Any + ++ \spad{taylor(n +-> a(n),x = a)} returns + ++ \spad{sum(n = 0..,a(n)*(x-a)**n)}. + taylor: (FE,SY,EQ FE) -> Any + ++ \spad{taylor(a(n),n,x = a)} returns \spad{sum(n = 0..,a(n)*(x-a)**n)}. + taylor: (I -> FE,EQ FE,SEG NNI) -> Any + ++ \spad{taylor(n +-> a(n),x = a,n0..)} returns + ++ \spad{sum(n=n0..,a(n)*(x-a)**n)}; + ++ \spad{taylor(n +-> a(n),x = a,n0..n1)} returns + ++ \spad{sum(n = n0..,a(n)*(x-a)**n)}. + taylor: (FE,SY,EQ FE,SEG NNI) -> Any + ++ \spad{taylor(a(n),n,x = a,n0..)} returns + ++ \spad{sum(n = n0..,a(n)*(x-a)**n)}; + ++ \spad{taylor(a(n),n,x = a,n0..n1)} returns + ++ \spad{sum(n = n0..,a(n)*(x-a)**n)}. + + laurent: (I -> FE,EQ FE,SEG I) -> Any + ++ \spad{laurent(n +-> a(n),x = a,n0..)} returns + ++ \spad{sum(n = n0..,a(n) * (x - a)**n)}; + ++ \spad{laurent(n +-> a(n),x = a,n0..n1)} returns + ++ \spad{sum(n = n0..n1,a(n) * (x - a)**n)}. + laurent: (FE,SY,EQ FE,SEG I) -> Any + ++ \spad{laurent(a(n),n,x=a,n0..)} returns + ++ \spad{sum(n = n0..,a(n) * (x - a)**n)}; + ++ \spad{laurent(a(n),n,x=a,n0..n1)} returns + ++ \spad{sum(n = n0..n1,a(n) * (x - a)**n)}. + + puiseux: (RN -> FE,EQ FE,SEG RN,RN) -> Any + ++ \spad{puiseux(n +-> a(n),x = a,r0..,r)} returns + ++ \spad{sum(n = r0,r0 + r,r0 + 2*r..., a(n) * (x - a)**n)}; + ++ \spad{puiseux(n +-> a(n),x = a,r0..r1,r)} returns + ++ \spad{sum(n = r0 + k*r while n <= r1, a(n) * (x - a)**n)}. + puiseux: (FE,SY,EQ FE,SEG RN,RN) -> Any + ++ \spad{puiseux(a(n),n,x = a,r0..,r)} returns + ++ \spad{sum(n = r0,r0 + r,r0 + 2*r..., a(n) * (x - a)**n)}; + ++ \spad{puiseux(a(n),n,x = a,r0..r1,r)} returns + ++ \spad{sum(n = r0 + k*r while n <= r1, a(n) * (x - a)**n)}. + + series: (I -> FE,EQ FE) -> Any + ++ \spad{series(n +-> a(n),x = a)} returns + ++ \spad{sum(n = 0..,a(n)*(x-a)**n)}. + series: (FE,SY,EQ FE) -> Any + ++ \spad{series(a(n),n,x = a)} returns + ++ \spad{sum(n = 0..,a(n)*(x-a)**n)}. + series: (I -> FE,EQ FE,SEG I) -> Any + ++ \spad{series(n +-> a(n),x = a,n0..)} returns + ++ \spad{sum(n = n0..,a(n) * (x - a)**n)}; + ++ \spad{series(n +-> a(n),x = a,n0..n1)} returns + ++ \spad{sum(n = n0..n1,a(n) * (x - a)**n)}. + series: (FE,SY,EQ FE,SEG I) -> Any + ++ \spad{series(a(n),n,x=a,n0..)} returns + ++ \spad{sum(n = n0..,a(n) * (x - a)**n)}; + ++ \spad{series(a(n),n,x=a,n0..n1)} returns + ++ \spad{sum(n = n0..n1,a(n) * (x - a)**n)}. + series: (RN -> FE,EQ FE,SEG RN,RN) -> Any + ++ \spad{series(n +-> a(n),x = a,r0..,r)} returns + ++ \spad{sum(n = r0,r0 + r,r0 + 2*r..., a(n) * (x - a)**n)}; + ++ \spad{series(n +-> a(n),x = a,r0..r1,r)} returns + ++ \spad{sum(n = r0 + k*r while n <= r1, a(n) * (x - a)**n)}. + series: (FE,SY,EQ FE,SEG RN,RN) -> Any + ++ \spad{series(a(n),n,x = a,r0..,r)} returns + ++ \spad{sum(n = r0,r0 + r,r0 + 2*r..., a(n) * (x - a)**n)}; + ++ \spad{series(a(n),n,x = a,r0..r1,r)} returns + ++ \spad{sum(n = r0 + k*r while n <= r1, a(n) * (x - a)**n)}. + + Implementation ==> add + + genStream: (I -> FE,I) -> ST FE + genStream(f,n) == delay concat(f(n),genStream(f,n + 1)) + + genFiniteStream: (I -> FE,I,I) -> ST FE + genFiniteStream(f,n,m) == delay + n > m => empty() + concat(f(n),genFiniteStream(f,n + 1,m)) + + taylor(f,eq) == + (xx := retractIfCan(lhs eq)@Union(SY,"failed")) case "failed" => + error "taylor: left hand side must be a variable" + x := xx :: SY; a := rhs eq + coerce(series(genStream(f,0))$UTS(FE,x,a))$ANY1(UTS(FE,x,a)) + + taylor(an:FE,n:SY,eq:EQ FE) == + taylor(eval(an,(n :: FE) = (#1 :: FE)),eq) + + taylor(f:I -> FE,eq:EQ FE,seg:SEG NNI) == + (xx := retractIfCan(lhs eq)@Union(SY,"failed")) case "failed" => + error "taylor: left hand side must be a variable" + x := xx :: SY; a := rhs eq + hasHi seg => + n0 := lo seg; n1 := hi seg + if n1 < n0 then (n0,n1) := (n1,n0) + uts := series(genFiniteStream(f,n0,n1))$UTS(FE,x,a) + uts := uts * monomial(1,n0)$UTS(FE,x,a) + coerce(uts)$ANY1(UTS(FE,x,a)) + n0 := lo seg + uts := series(genStream(f,n0))$UTS(FE,x,a) + uts := uts * monomial(1,n0)$UTS(FE,x,a) + coerce(uts)$ANY1(UTS(FE,x,a)) + + taylor(an,n,eq,seg) == + taylor(eval(an,(n :: FE) = (#1 :: FE)),eq,seg) + + laurent(f,eq,seg) == + (xx := retractIfCan(lhs eq)@Union(SY,"failed")) case "failed" => + error "taylor: left hand side must be a variable" + x := xx :: SY; a := rhs eq + hasHi seg => + n0 := lo seg; n1 := hi seg + if n1 < n0 then (n0,n1) := (n1,n0) + uts := series(genFiniteStream(f,n0,n1))$UTS(FE,x,a) + coerce(laurent(n0,uts)$ULS(FE,x,a))$ANY1(ULS(FE,x,a)) + n0 := lo seg + uts := series(genStream(f,n0))$UTS(FE,x,a) + coerce(laurent(n0,uts)$ULS(FE,x,a))$ANY1(ULS(FE,x,a)) + + laurent(an,n,eq,seg) == + laurent(eval(an,(n :: FE) = (#1 :: FE)),eq,seg) + + modifyFcn:(RN -> FE,I,I,I,I) -> FE + modifyFcn(f,n0,nn,q,m) == (zero?((m - n0) rem nn) => f(m/q); 0) + + puiseux(f,eq,seg,r) == + (xx := retractIfCan(lhs eq)@Union(SY,"failed")) case "failed" => + error "puiseux: left hand side must be a variable" + x := xx :: SY; a := rhs eq + not positive? r => error "puiseux: last argument must be positive" + hasHi seg => + r0 := lo seg; r1 := hi seg + if r1 < r0 then (r0,r1) := (r1,r0) + p0 := numer r0; q0 := denom r0 + p1 := numer r1; q1 := denom r1 + p2 := numer r; q2 := denom r + q := lcm(lcm(q0,q1),q2) + n0 := p0 * (q quo q0); n1 := p1 * (q quo q1) + nn := p2 * (q quo q2) + ulsUnion := laurent(modifyFcn(f,n0,nn,q,#1),eq,segment(n0,n1)) + uls := retract(ulsUnion)$ANY1(ULS(FE,x,a)) + coerce(puiseux(1/q,uls)$UPXS(FE,x,a))$ANY1(UPXS(FE,x,a)) + p0 := numer(r0 := lo seg); q0 := denom r0 + p2 := numer r; q2 := denom r + q := lcm(q0,q2) + n0 := p0 * (q quo q0); nn := p2 * (q quo q2) + ulsUnion := laurent(modifyFcn(f,n0,nn,q,#1),eq,segment n0) + uls := retract(ulsUnion)$ANY1(ULS(FE,x,a)) + coerce(puiseux(1/q,uls)$UPXS(FE,x,a))$ANY1(UPXS(FE,x,a)) + + puiseux(an,n,eq,r0,m) == + puiseux(eval(an,(n :: FE) = (#1 :: FE)),eq,r0,m) + + series(f:I -> FE,eq:EQ FE) == puiseux(f(numer #1),eq,segment 0,1) + series(an:FE,n:SY,eq:EQ FE) == puiseux(an,n,eq,segment 0,1) + series(f:I -> FE,eq:EQ FE,seg:SEG I) == + ratSeg : SEG RN := map(#1::RN,seg)$UniversalSegmentFunctions2(I,RN) + puiseux(f(numer #1),eq,ratSeg,1) + series(an:FE,n:SY,eq:EQ FE,seg:SEG I) == + ratSeg : SEG RN := map(#1::RN,seg)$UniversalSegmentFunctions2(I,RN) + puiseux(an,n,eq,ratSeg,1) + series(f:RN -> FE,eq:EQ FE,seg:SEG RN,r:RN) == puiseux(f,eq,seg,r) + series(an:FE,n:SY,eq:EQ FE,seg:SEG RN,r:RN) == puiseux(an,n,eq,seg,r) + +@ +\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 GENUPS GenerateUnivariatePowerSeries>> +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} |