\documentclass{article} \usepackage{open-axiom} \begin{document} \title{\$SPAD/src/algebra fourier.spad} \author{James Davenport} \maketitle \begin{abstract} \end{abstract} \eject \tableofcontents \eject \section{domain FCOMP FourierComponent} <>= )abbrev domain FCOMP FourierComponent ++ Author: James Davenport ++ Date Created: 17 April 1992 ++ Date Last Updated: 12 June 1992 ++ Basic Functions: ++ Related Constructors: ++ Also See: ++ AMS Classifications: ++ Keywords: ++ References: ++ Description: FourierComponent(E:OrderedSet): OrderedSet with sin: E -> $ ++ sin(x) makes a sin kernel for use in Fourier series cos: E -> $ ++ cos(x) makes a cos kernel for use in Fourier series sin?: $ -> Boolean ++ sin?(x) returns true if term is a sin, otherwise false argument: $ -> E ++ argument(x) returns the argument of a given sin/cos expressions == add --representations Rep:=Record(SinIfTrue:Boolean, arg:E) e:E x,y:$ sin e == [true,e] cos e == [false,e] sin? x == x.SinIfTrue argument x == x.arg coerce(x):OutputForm == hconcat((if x.SinIfTrue then "sin" else "cos")::OutputForm, bracket((x.arg)::OutputForm)) x true y.arg < x.arg => false x.SinIfTrue => false y.SinIfTrue @ \section{domain FSERIES FourierSeries} <>= )abbrev domain FSERIES FourierSeries ++ Author: James Davenport ++ Date Created: 17 April 1992 ++ Date Last Updated: ++ Basic Functions: ++ Related Constructors: ++ Also See: ++ AMS Classifications: ++ Keywords: ++ References: ++ Description: FourierSeries(R:Join(CommutativeRing,Algebra(Fraction Integer)), E:Join(OrderedSet,AbelianGroup)): Algebra(R) with if E has canonical and R has canonical then canonical coerce: R -> $ ++ coerce(r) converts coefficients into Fourier Series coerce: FourierComponent(E) -> $ ++ coerce(c) converts sin/cos terms into Fourier Series makeSin: (E,R) -> $ ++ makeSin(e,r) makes a sin expression with given argument and coefficient makeCos: (E,R) -> $ ++ makeCos(e,r) makes a sin expression with given argument and coefficient == FreeModule(R,FourierComponent(E)) add --representations Term := Record(k:FourierComponent(E),c:R) Rep := List Term multiply : (Term,Term) -> $ w,x1,x2:$ n:NonNegativeInteger z:Integer e:FourierComponent(E) a:E r:R 1 == [[cos 0,1]] coerce e == sin? e and zero? argument e => 0 if argument e < 0 then not sin? e => e:=cos(- argument e) return [[sin(- argument e),-1]] [[e,1]] multiply(t1,t2) == r:=(t1.c*t2.c)*(1/2) s1:=argument t1.k s2:=argument t2.k sum:=s1+s2 diff:=s1-s2 sin? t1.k => sin? t2.k => makeCos(diff,r) + makeCos(sum,-r) makeSin(sum,r) + makeSin(diff,r) sin? t2.k => makeSin(sum,r) + makeSin(diff,r) makeCos(diff,r) + makeCos(sum,r) x1*x2 == null x1 => 0 null x2 => 0 +/[+/[multiply(t1,t2) for t2 in x2] for t1 in x1] makeCos(a,r) == a<0 => [[cos(-a),r]] [[cos a,r]] makeSin(a,r) == zero? a => [] a<0 => [[sin(-a),-r]] [[sin a,r]] @ \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}