\documentclass{article} \usepackage{open-axiom} \begin{document} \title{\$SPAD/src/algebra gseries.spad} \author{Clifton J. Williamson} \maketitle \begin{abstract} \end{abstract} \eject \tableofcontents \eject \section{domain GSERIES GeneralUnivariatePowerSeries} <>= )abbrev domain GSERIES GeneralUnivariatePowerSeries ++ Author: Clifton J. Williamson ++ Date Created: 22 September 1993 ++ Date Last Updated: June 18, 2010 ++ Basic Operations: ++ Related Domains: ++ Also See: ++ AMS Classifications: ++ Keywords: series, Puiseux ++ Examples: ++ References: ++ Description: ++ This is a category of univariate Puiseux series constructed ++ from univariate Laurent series. A Puiseux series is represented ++ by a pair \spad{[r,f(x)]}, where r is a positive rational number and ++ \spad{f(x)} is a Laurent series. This pair represents the Puiseux ++ series \spad{f(x\^r)}. GeneralUnivariatePowerSeries(Coef,var,cen): Exports == Implementation where Coef : Ring var : Symbol cen : Coef I ==> Integer UTS ==> UnivariateTaylorSeries ULS ==> UnivariateLaurentSeries UPXS ==> UnivariatePuiseuxSeries EFULS ==> ElementaryFunctionsUnivariateLaurentSeries EFUPXS ==> ElementaryFunctionsUnivariatePuiseuxSeries FS2UPS ==> FunctionSpaceToUnivariatePowerSeries Exports ==> Join(UnivariatePuiseuxSeriesCategory Coef,_ PartialDifferentialDomain(%,Variable var)) with coerce: Variable(var) -> % ++ coerce(var) converts the series variable \spad{var} into a ++ Puiseux series. coerce: UPXS(Coef,var,cen) -> % ++ coerce(f) converts a Puiseux series to a general power series. 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 ==> UnivariatePuiseuxSeries(Coef,var,cen) add coerce(upxs:UPXS(Coef,var,cen)) == upxs pretend % puiseux: % -> UPXS(Coef,var,cen) puiseux f == f pretend UPXS(Coef,var,cen) if Coef has Algebra Fraction Integer then differentiate f == str1 : String := "'differentiate' unavailable on this domain; " str2 : String := "use 'approximate' first" error concat(str1,str2) differentiate(f:%,v:Variable(var)) == differentiate f if Coef has PartialDifferentialRing(Symbol) then differentiate(f:%,s:Symbol) == (s = variable(f)) => str1 : String := "'differentiate' unavailable on this domain; " str2 : String := "use 'approximate' first" error concat(str1,str2) dcds := differentiate(center f,s) deriv := differentiate(puiseux f) :: % map(differentiate(#1,s),f) - dcds * deriv integrate f == str1 : String := "'integrate' unavailable on this domain; " str2 : String := "use 'approximate' first" error concat(str1,str2) integrate(f:%,v:Variable(var)) == integrate f if Coef has integrate: (Coef,Symbol) -> Coef and _ Coef has variables: Coef -> List Symbol then integrate(f:%,s:Symbol) == (s = variable(f)) => str1 : String := "'integrate' unavailable on this domain; " str2 : String := "use 'approximate' first" error concat(str1,str2) not entry?(s,variables center f) => map(integrate(#1,s),f) error "integrate: center is a function of variable of integration" if Coef has TranscendentalFunctionCategory and _ Coef has PrimitiveFunctionCategory and _ Coef has AlgebraicallyClosedFunctionSpace Integer then integrateWithOneAnswer: (Coef,Symbol) -> Coef integrateWithOneAnswer(f,s) == res := integrate(f,s)$FunctionSpaceIntegration(Integer,Coef) res case Coef => res :: Coef first(res :: List Coef) integrate(f:%,s:Symbol) == (s = variable(f)) => str1 : String := "'integrate' unavailable on this domain; " str2 : String := "use 'approximate' first" error concat(str1,str2) not entry?(s,variables center f) => map(integrateWithOneAnswer(#1,s),f) error "integrate: center is a function of variable of integration" @ \section{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. @ <<*>>= <> <> @ \eject \begin{thebibliography}{99} \bibitem{1} nothing \end{thebibliography} \end{document}