diff options
author | dos-reis <gdr@axiomatics.org> | 2011-09-20 06:29:26 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-09-20 06:29:26 +0000 |
commit | 255be06767355e3b41acd75990c6b90270b8f2bd (patch) | |
tree | 0a032d40d7cb2213e206d70beb23dc74ccf4a230 /src/algebra/d01agents.spad.pamphlet | |
parent | 12c856f9901ef3d6d82fb99855ecdf3e0b91484b (diff) | |
download | open-axiom-255be06767355e3b41acd75990c6b90270b8f2bd.tar.gz |
* algebra/asp.spad.pamphlet: Remove.
* algebra/c02.spad.pamphlet: Likewise.
* algebra/c05.spad.pamphlet: Likewise.
* algebra/c06.spad.pamphlet: Likewise.
* algebra/d01.spad.pamphlet: Likewise.
* algebra/d02.spad.pamphlet: Likewise.
* algebra/d03.spad.pamphlet: Likewise.
* algebra/e01.spad.pamphlet: Likewise.
* algebra/e02.spad.pamphlet: Likewise.
* algebra/e04.spad.pamphlet: Likewise.
* algebra/f01.spad.pamphlet: Likewise.
* algebra/f02.spad.pamphlet: Likewise.
* algebra/f04.spad.pamphlet: Likewise.
* algebra/f07.spad.pamphlet: Likewise.
* algebra/s.spad.pamphlet: Likewise.
* algebra/d01Package.spad.pamphlet: Likewise.
* algebra/d02Package.spad.pamphlet: Likewise.
* algebra/d03Package.spad.pamphlet: Likewise.
* algebra/e04Package.spad.pamphlet: Likewise.
* algebra/d01agents.spad.pamphlet: Likewise.
* algebra/d01routine.spad.pamphlet: Likewise.
* algebra/d01transform.spad.pamphlet: Likewise.
* algebra/d01weights.spad.pamphlet: Likewise.
* algebra/d02agents.spad.pamphlet: Likewise.
* algebra/d02routine.spad.pamphlet: Likewise.
* algebra/d03agents.spad.pamphlet: Likewise.
* algebra/d03routine.spad.pamphlet: Likewise.
* algebra/e04agents.spad.pamphlet: Likewise.
* algebra/e04routine.spad.pamphlet: Likewise.
Diffstat (limited to 'src/algebra/d01agents.spad.pamphlet')
-rw-r--r-- | src/algebra/d01agents.spad.pamphlet | 428 |
1 files changed, 0 insertions, 428 deletions
diff --git a/src/algebra/d01agents.spad.pamphlet b/src/algebra/d01agents.spad.pamphlet deleted file mode 100644 index eadc8a14..00000000 --- a/src/algebra/d01agents.spad.pamphlet +++ /dev/null @@ -1,428 +0,0 @@ -\documentclass{article} -\usepackage{open-axiom} -\begin{document} -\title{\$SPAD/src/algebra d01agents.spad} -\author{Brian Dupee} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain INTFTBL IntegrationFunctionsTable} -<<domain INTFTBL IntegrationFunctionsTable>>= -)abbrev domain INTFTBL IntegrationFunctionsTable -++ Author: Brian Dupee -++ Date Created: March 1995 -++ Date Last Updated: June 1995 -++ Description: -++ -IntegrationFunctionsTable(): E == I where - EF2 ==> ExpressionFunctions2 - EFI ==> Expression Fraction Integer - FI ==> Fraction Integer - LEDF ==> List Expression DoubleFloat - KEDF ==> Kernel Expression DoubleFloat - EEDF ==> Equation Expression DoubleFloat - EDF ==> Expression DoubleFloat - PDF ==> Polynomial DoubleFloat - LDF ==> List DoubleFloat - SDF ==> Stream DoubleFloat - DF ==> DoubleFloat - F ==> Float - ST ==> String - LST ==> List String - SI ==> SingleInteger - SOCDF ==> Segment OrderedCompletion DoubleFloat - OCDF ==> OrderedCompletion DoubleFloat - OCEDF ==> OrderedCompletion Expression DoubleFloat - EOCEFI ==> Equation OrderedCompletion Expression Fraction Integer - OCEFI ==> OrderedCompletion Expression Fraction Integer - OCFI ==> OrderedCompletion Fraction Integer - NIA ==> Record(var:Symbol,fn:EDF,range:SOCDF,abserr:DF,relerr:DF) - INT ==> Integer - CTYPE ==> Union(continuous: "Continuous at the end points", - lowerSingular: "There is a singularity at the lower end point", - upperSingular: "There is a singularity at the upper end point", - bothSingular: "There are singularities at both end points", - notEvaluated: "End point continuity not yet evaluated") - RTYPE ==> Union(finite: "The range is finite", - lowerInfinite: "The bottom of range is infinite", - upperInfinite: "The top of range is infinite", - bothInfinite: "Both top and bottom points are infinite", - notEvaluated: "Range not yet evaluated") - STYPE ==> Union(str:SDF, - notEvaluated:"Internal singularities not yet evaluated") - ATT ==> Record(endPointContinuity:CTYPE, - singularitiesStream:STYPE,range:RTYPE) - ROA ==> Record(key:NIA,entry:ATT) - - E ==> with - - showTheFTable:() -> $ - ++ showTheFTable() returns the current table of functions. - clearTheFTable : () -> Void - ++ clearTheFTable() clears the current table of functions. - keys : $ -> List(NIA) - ++ keys(f) returns the list of keys of f - fTable: List Record(key:NIA,entry:ATT) -> $ - ++ fTable(l) creates a functions table from the elements of l. - insert!:Record(key:NIA,entry:ATT) -> $ - ++ insert!(r) inserts an entry r into theIFTable - showAttributes:NIA -> Union(ATT,"failed") - ++ showAttributes(x) \undocumented{} - entries : $ -> List Record(key:NIA,entry:ATT) - ++ entries(x) \undocumented{} - entry:NIA -> ATT - ++ entry(n) \undocumented{} - I ==> add - - Rep := Table(NIA,ATT) - import Rep - - theFTable:$ := empty()$Rep - - showTheFTable():$ == - theFTable - - clearTheFTable():Void == - theFTable := empty()$Rep - - fTable(l:List Record(key:NIA,entry:ATT)):$ == - theFTable := table(l)$Rep - - insert!(r:Record(key:NIA,entry:ATT)):$ == - insert!(r,theFTable)$Rep - - keys(t:$):List NIA == - keys(t)$Rep - - showAttributes(k:NIA):Union(ATT,"failed") == - search(k,theFTable)$Rep - - entries(t:$):List Record(key:NIA,entry:ATT) == - members(t)$Rep - - entry(k:NIA):ATT == - qelt(theFTable,k)$Rep - -@ -\section{package D01AGNT d01AgentsPackage} -<<package D01AGNT d01AgentsPackage>>= -)abbrev package D01AGNT d01AgentsPackage -++ Author: Brian Dupee -++ Date Created: March 1994 -++ Date Last Updated: December 1997 -++ Basic Operations: rangeIsFinite, functionIsContinuousAtEndPoints, -++ functionIsOscillatory -++ Description: -++ \axiomType{d01AgentsPackage} is a package of numerical agents to be used -++ to investigate attributes of an input function so as to decide the -++ \axiomFun{measure} of an appropriate numerical integration routine. -++ It contains functions \axiomFun{rangeIsFinite} to test the input range and -++ \axiomFun{functionIsContinuousAtEndPoints} to check for continuity at -++ the end points of the range. - - -d01AgentsPackage(): E == I where - EF2 ==> ExpressionFunctions2 - EFI ==> Expression Fraction Integer - FI ==> Fraction Integer - LEDF ==> List Expression DoubleFloat - KEDF ==> Kernel Expression DoubleFloat - EEDF ==> Equation Expression DoubleFloat - EDF ==> Expression DoubleFloat - PDF ==> Polynomial DoubleFloat - LDF ==> List DoubleFloat - SDF ==> Stream DoubleFloat - DF ==> DoubleFloat - F ==> Float - ST ==> String - LST ==> List String - SI ==> SingleInteger - SOCDF ==> Segment OrderedCompletion DoubleFloat - OCDF ==> OrderedCompletion DoubleFloat - OCEDF ==> OrderedCompletion Expression DoubleFloat - EOCEFI ==> Equation OrderedCompletion Expression Fraction Integer - OCEFI ==> OrderedCompletion Expression Fraction Integer - OCFI ==> OrderedCompletion Fraction Integer - NIA ==> Record(var:Symbol,fn:EDF,range:SOCDF,abserr:DF,relerr:DF) - INT ==> Integer - CTYPE ==> Union(continuous: "Continuous at the end points", - lowerSingular: "There is a singularity at the lower end point", - upperSingular: "There is a singularity at the upper end point", - bothSingular: "There are singularities at both end points", - notEvaluated: "End point continuity not yet evaluated") - RTYPE ==> Union(finite: "The range is finite", - lowerInfinite: "The bottom of range is infinite", - upperInfinite: "The top of range is infinite", - bothInfinite: "Both top and bottom points are infinite", - notEvaluated: "Range not yet evaluated") - STYPE ==> Union(str:SDF, - notEvaluated:"Internal singularities not yet evaluated") - ATT ==> Record(endPointContinuity:CTYPE, - singularitiesStream:STYPE,range:RTYPE) - ROA ==> Record(key:NIA,entry:ATT) - - E ==> with - - rangeIsFinite : NIA -> RTYPE - ++ rangeIsFinite(args) tests the endpoints of \spad{args.range} for - ++ infinite end points. - functionIsContinuousAtEndPoints: NIA -> CTYPE - ++ functionIsContinuousAtEndPoints(args) uses power series limits - ++ to check for problems at the end points of the range of \spad{args}. - getlo : SOCDF -> DF - ++ getlo(x) gets the \axiomType{DoubleFloat} equivalent of - ++ the first endpoint of the range \axiom{x} - gethi : SOCDF -> DF - ++ gethi(x) gets the \axiomType{DoubleFloat} equivalent of - ++ the second endpoint of the range \axiom{x} - functionIsOscillatory:NIA -> F - ++ functionIsOscillatory(a) tests whether the function \spad{a.fn} - ++ has many zeros of its derivative. - problemPoints: (EDF, Symbol, SOCDF) -> List DF - ++ problemPoints(f,var,range) returns a list of possible problem points - ++ by looking at the zeros of the denominator of the function if it - ++ can be retracted to \axiomType{Polynomial DoubleFloat}. - singularitiesOf:NIA -> SDF - ++ singularitiesOf(args) returns a list of potential - ++ singularities of the function within the given range - df2st:DF -> String - ++ df2st(n) coerces a \axiomType{DoubleFloat} to \axiomType{String} - ldf2lst:LDF -> LST - ++ ldf2lst(ln) coerces a List of \axiomType{DoubleFloat} to \axiomType{List String} - sdf2lst:SDF -> LST - ++ sdf2lst(ln) coerces a Stream of \axiomType{DoubleFloat} to \axiomType{List String} - commaSeparate:LST -> ST - ++ commaSeparate(l) produces a comma separated string from a - ++ list of strings. - changeName:(Symbol,Symbol,Result) -> Result - ++ changeName(s,t,r) changes the name of item \axiom{s} in \axiom{r} - ++ to \axiom{t}. - - I ==> ExpertSystemContinuityPackage add - - import ExpertSystemToolsPackage - import ExpertSystemContinuityPackage - - -- local functions - ocdf2ocefi : OCDF -> OCEFI - rangeOfArgument : (KEDF, NIA) -> DF - continuousAtPoint? : (EFI,EOCEFI) -> Boolean - rand:(SOCDF,INT) -> LDF - eval:(EDF,Symbol,LDF) -> LDF - numberOfSignChanges:LDF -> INT - rangeIsFiniteFunction:NIA -> RTYPE - functionIsContinuousAtEndPointsFunction:NIA -> CTYPE - - changeName(s:Symbol,t:Symbol,r:Result):Result == - a := remove!(s,r)$Result - a case Any => - insert!([t,a],r)$Result - r - r - - commaSeparate(l:LST):ST == - empty?(l)$LST => "" - one?(#(l)) => concat(l)$ST - f := first(l)$LST - t := [concat([", ",l.i])$ST for i in 2..#(l)] - concat(f,concat(t)$ST)$ST - - rand(seg:SOCDF,n:INT):LDF == - -- produced a sorted list of random numbers in the given range - l:DF := getlo seg - s:DF := (gethi seg) - l - seed:INT := random()$INT - dseed:DF := seed :: DF - r:LDF := [(((random(seed)$INT) :: DF)*s/dseed + l) for i in 1..n] - sort(r)$LDF - - eval(f:EDF,var:Symbol,l:LDF):LDF == - empty?(l)$LDF => [0$DF] - ve := var::EDF - [retract(eval(f,equation(ve,u::EDF)$EEDF)$EDF)@DF for u in l] - - numberOfSignChanges(l:LDF):INT == - -- calculates the number of sign changes in a list - a := 0$INT - empty?(l)$LDF => 0 - for i in 2..# l repeat - if negative?(l.i*l.(i-1)) then - a := a + 1 - a - - rangeOfArgument(k: KEDF, args:NIA): DF == - Args := copy args - Args.fn := arg := first(argument(k)$KEDF)$LEDF - functionIsContinuousAtEndPoints(Args) case continuous => - r:SOCDF := args.range - low:EDF := (getlo r) :: EDF - high:EDF := (gethi r) :: EDF - eql := equation(a := args.var :: EDF, low)$EEDF - eqh := equation(a, high)$EEDF - e1 := (numeric(eval(arg,eql)$EDF)$Numeric(DF)) :: DF - e2 := (numeric(eval(arg,eqh)$EDF)$Numeric(DF)) :: DF - e2-e1 - 0$DF - - ocdf2ocefi(r:OCDF):OCEFI == - finite?(r)$OCDF => (edf2efi(((retract(r)@DF)$OCDF)::EDF))::OCEFI - r pretend OCEFI - - continuousAtPoint?(f:EFI,e:EOCEFI):Boolean == - (l := limit(f,e)$PowerSeriesLimitPackage(FI,EFI)) case OCEFI => - finite?(l :: OCEFI) - -- if the left hand limit equals the right hand limit, or if neither - -- side has a limit at this point, the return type of limit() is - -- Union(Ordered Completion Expression Fraction Integer,"failed") - false - - -- exported functions - - rangeIsFiniteFunction(args:NIA): RTYPE == - -- rangeIsFinite(x) tests the endpoints of x.range for infinite - -- end points. - -- [-inf, inf] => 4 - -- [ x , inf] => 3 - -- [-inf, x ] => 1 - -- [ x , y ] => 0 - fr:SI := (3::SI * whatInfinity(hi(args.range))$OCDF - - whatInfinity(lo(args.range))$OCDF) - fr = 0 => ["The range is finite"] - fr = 1 => ["The bottom of range is infinite"] - fr = 3 => ["The top of range is infinite"] - fr = 4 => ["Both top and bottom points are infinite"] - error("rangeIsFinite",["this is not a valid range"])$ErrorFunctions - - rangeIsFinite(args:NIA): RTYPE == - nia := copy args - (t := showAttributes(nia)$IntegrationFunctionsTable) case ATT => - s := coerce(t)@ATT - s.range case notEvaluated => - s.range := rangeIsFiniteFunction(nia) - r:ROA := [nia,s] - insert!(r)$IntegrationFunctionsTable - s.range - s.range - a:ATT := [["End point continuity not yet evaluated"], - ["Internal singularities not yet evaluated"], - e:=rangeIsFiniteFunction(nia)] - r:ROA := [nia,a] - insert!(r)$IntegrationFunctionsTable - e - - functionIsContinuousAtEndPointsFunction(args:NIA):CTYPE == - - v := args.var :: EFI :: OCEFI - high:OCEFI := ocdf2ocefi(hi(args.range)) - low:OCEFI := ocdf2ocefi(lo(args.range)) - f := edf2efi(args.fn) - l:Boolean := continuousAtPoint?(f,equation(v,low)$EOCEFI) - h:Boolean := continuousAtPoint?(f,equation(v,high)$EOCEFI) - l and h => ["Continuous at the end points"] - l => ["There is a singularity at the upper end point"] - h => ["There is a singularity at the lower end point"] - ["There are singularities at both end points"] - - functionIsContinuousAtEndPoints(args:NIA): CTYPE == - nia := copy args - (t := showAttributes(nia)$IntegrationFunctionsTable) case ATT => - s := coerce(t)@ATT - s.endPointContinuity case notEvaluated => - s.endPointContinuity := functionIsContinuousAtEndPointsFunction(nia) - r:ROA := [nia,s] - insert!(r)$IntegrationFunctionsTable - s.endPointContinuity - s.endPointContinuity - a:ATT := [e:=functionIsContinuousAtEndPointsFunction(nia), - ["Internal singularities not yet evaluated"], - ["Range not yet evaluated"]] - r:ROA := [nia,a] - insert!(r)$IntegrationFunctionsTable - e - - functionIsOscillatory(a:NIA):F == - - args := copy a - k := tower(numerator args.fn)$EDF - p:F := pi()$F - for i in 1..# k repeat - is?(ker := k.i, sin :: Symbol) => - ra := convert(rangeOfArgument(ker,args))@F - ra > 2*p => return (ra/p) - is?(ker, cos :: Symbol) => - ra := convert(rangeOfArgument(ker,args))@F - ra > 2*p => return (ra/p) - l:LDF := rand(args.range,30) - l := eval(args.fn,args.var,l) - numberOfSignChanges(l) :: F - - singularitiesOf(args:NIA):SDF == - nia := copy args - (t := showAttributes(nia)$IntegrationFunctionsTable) case ATT => - s:ATT := coerce(t)@ATT - p:STYPE := s.singularitiesStream - p case str => p.str - e:SDF := singularitiesOf(nia.fn,[nia.var],nia.range) - if not empty?(e) then - if less?(e,10)$SDF then extend(e,10)$SDF - s.singularitiesStream := [e] - r:ROA := [nia,s] - insert!(r)$IntegrationFunctionsTable - e - e:=singularitiesOf(nia.fn,[nia.var],nia.range) - if not empty?(e) then - if less?(e,10)$SDF then extend(e,10)$SDF - a:ATT := [["End point continuity not yet evaluated"],[e], - ["Range not yet evaluated"]] - r:ROA := [nia,a] - insert!(r)$IntegrationFunctionsTable - e - -@ -\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 INTFTBL IntegrationFunctionsTable>> -<<package D01AGNT d01AgentsPackage>> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} |