aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/routines.spad.pamphlet
diff options
context:
space:
mode:
Diffstat (limited to 'src/algebra/routines.spad.pamphlet')
-rw-r--r--src/algebra/routines.spad.pamphlet647
1 files changed, 0 insertions, 647 deletions
diff --git a/src/algebra/routines.spad.pamphlet b/src/algebra/routines.spad.pamphlet
deleted file mode 100644
index 5b67f754..00000000
--- a/src/algebra/routines.spad.pamphlet
+++ /dev/null
@@ -1,647 +0,0 @@
-\documentclass{article}
-\usepackage{open-axiom}
-\begin{document}
-\title{\$SPAD/src/algebra routines.spad}
-\author{Brian Dupee}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{domain ROUTINE RoutinesTable}
-<<domain ROUTINE RoutinesTable>>=
-)abbrev domain ROUTINE RoutinesTable
-++ Author: Brian Dupee
-++ Date Created: August 1994
-++ Date Last Updated: December 1997
-++ Basic Operations: routines, getMeasure
-++ Related Constructors: TableAggregate(Symbol,Any)
-++ Description:
-++ \axiomType{RoutinesTable} implements a database and associated tuning
-++ mechanisms for a set of known NAG routines
-RoutinesTable(): E == I where
- F ==> Float
- ST ==> String
- LST ==> List String
- Rec ==> Record(key:Symbol,entry:Any)
- RList ==> List(Record(key:Symbol,entry:Any))
- IFL ==> List(Record(ifail:Integer,instruction:ST))
- Entry ==> Record(chapter:ST, type:ST, domainName: ST,
- defaultMin:F, measure:F, failList:IFL, explList:LST)
-
- E ==> TableAggregate(Symbol,Any) with
-
- concat:(%,%) -> %
- ++ concat(x,y) merges two tables x and y
- routines:() -> %
- ++ routines() initialises a database of known NAG routines
- selectIntegrationRoutines:% -> %
- ++ selectIntegrationRoutines(R) chooses only those routines from
- ++ the database which are for integration
- selectOptimizationRoutines:% -> %
- ++ selectOptimizationRoutines(R) chooses only those routines from
- ++ the database which are for integration
- selectPDERoutines:% -> %
- ++ selectPDERoutines(R) chooses only those routines from the
- ++ database which are for the solution of PDE's
- selectODEIVPRoutines:% -> %
- ++ selectODEIVPRoutines(R) chooses only those routines from the
- ++ database which are for the solution of ODE's
- selectFiniteRoutines:% -> %
- ++ selectFiniteRoutines(R) chooses only those routines from the
- ++ database which are designed for use with finite expressions
- selectSumOfSquaresRoutines:% -> %
- ++ selectSumOfSquaresRoutines(R) chooses only those routines from the
- ++ database which are designed for use with sums of squares
- selectNonFiniteRoutines:% -> %
- ++ selectNonFiniteRoutines(R) chooses only those routines from the
- ++ database which are designed for use with non-finite expressions.
- selectMultiDimensionalRoutines:% -> %
- ++ selectMultiDimensionalRoutines(R) chooses only those routines from
- ++ the database which are designed for use with multi-dimensional
- ++ expressions
- changeThreshhold:(%,Symbol,F) -> %
- ++ changeThreshhold(R,s,newValue) changes the value below which,
- ++ given a NAG routine generating a higher measure, the routines will
- ++ make no attempt to generate a measure.
- changeMeasure:(%,Symbol,F) -> %
- ++ changeMeasure(R,s,newValue) changes the maximum value for a
- ++ measure of the given NAG routine.
- getMeasure:(%,Symbol) -> F
- ++ getMeasure(R,s) gets the current value of the maximum measure for
- ++ the given NAG routine.
- getExplanations:(%,ST) -> LST
- ++ getExplanations(R,s) gets the explanations of the output parameters for
- ++ the given NAG routine.
- deleteRoutine!:(%,Symbol) -> %
- ++ deleteRoutine!(R,s) destructively deletes the given routine from
- ++ the current database of NAG routines
- showTheRoutinesTable:() -> %
- ++ showTheRoutinesTable() returns the current table of NAG routines.
- recoverAfterFail:(%,ST,Integer) -> Union(ST,"failed")
- ++ recoverAfterFail(routs,routineName,ifailValue) acts on the
- ++ instructions given by the ifail list
- finiteAggregate
-
- I ==> Result add
-
- Rep := Result
- import Rep
-
- theRoutinesTable:% := routines()
-
- showTheRoutinesTable():% == theRoutinesTable
-
- integrationRoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,chapter) = "Integration"
- false
-
- selectIntegrationRoutines(R:%):% == select(integrationRoutine?,R)
-
- optimizationRoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,chapter) = "Optimization"
- false
-
- selectOptimizationRoutines(R:%):% == select(optimizationRoutine?,R)
-
- PDERoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,chapter) = "PDE"
- false
-
- selectPDERoutines(R:%):% == select(PDERoutine?,R)
-
- ODERoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,chapter) = "ODE"
- false
-
- selectODEIVPRoutines(R:%):% == select(ODERoutine?,R)
-
- sumOfSquaresRoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,type) = "SS"
- false
-
- selectSumOfSquaresRoutines(R:%):% == select(sumOfSquaresRoutine?,R)
-
- finiteRoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,type) = "One-dimensional finite"
- false
-
- selectFiniteRoutines(R:%):% == select(finiteRoutine?,R)
-
- infiniteRoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,type) = "One-dimensional infinite"
- false
-
- semiInfiniteRoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,type) = "One-dimensional semi-infinite"
- false
-
- nonFiniteRoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (semiInfiniteRoutine?(r) or infiniteRoutine?(r))
-
- selectNonFiniteRoutines(R:%):% == select(nonFiniteRoutine?,R)
-
- multiDimensionalRoutine?(r:Record(key:Symbol,entry:Any)):Boolean ==
- (a := retractIfCan(r.entry)$AnyFunctions1(Entry)) case Entry =>
- elt(a,type) = "Multi-dimensional"
- false
-
- selectMultiDimensionalRoutines(R:%):% == select(multiDimensionalRoutine?,R)
-
- concat(a:%,b:%):% ==
- membersOfa := (members(a)@List(Record(key:Symbol,entry:Any)))
- membersOfb := (members(b)@List(Record(key:Symbol,entry:Any)))
- allMembers:=
- concat(membersOfa,membersOfb)$List(Record(key:Symbol,entry:Any))
- construct(allMembers)
-
- changeThreshhold(R:%,s:Symbol,newValue:F):% ==
- (a := search(s,R)) case Any =>
- e := retract(a)$AnyFunctions1(Entry)
- e.defaultMin := newValue
- a := coerce(e)$AnyFunctions1(Entry)
- insert!([s,a],R)
- error("changeThreshhold","Cannot find routine of that name")$ErrorFunctions
-
- changeMeasure(R:%,s:Symbol,newValue:F):% ==
- (a := search(s,R)) case Any =>
- e := retract(a)$AnyFunctions1(Entry)
- e.measure := newValue
- a := coerce(e)$AnyFunctions1(Entry)
- insert!([s,a],R)
- error("changeMeasure","Cannot find routine of that name")$ErrorFunctions
-
- getMeasure(R:%,s:Symbol):F ==
- (a := search(s,R)) case Any =>
- e := retract(a)$AnyFunctions1(Entry)
- e.measure
- error("getMeasure","Cannot find routine of that name")$ErrorFunctions
-
- deleteRoutine!(R:%,s:Symbol):% ==
- (a := search(s,R)) case Any =>
- e:Record(key:Symbol,entry:Any) := [s,a]
- remove!(e,R)
- error("deleteRoutine!","Cannot find routine of that name")$ErrorFunctions
-
- routines():% ==
- f := "One-dimensional finite"
- s := "One-dimensional semi-infinite"
- i := "One-dimensional infinite"
- m := "Multi-dimensional"
- int := "Integration"
- ode := "ODE"
- pde := "PDE"
- opt := "Optimization"
- d01ajfExplList:LST := ["result: Calculated value of the integral",
- "iw: iw(1) contains the actual number of sub-intervals used, the rest is workspace",
- "w: contains the end-points of the sub-intervals used along with the integral contributions and error estimates over the sub-intervals",
- "abserr: the estimate of the absolute error of the result",
- "ifail: the error warning parameter",
- "method: details of the method used and measures of all methods",
- "attributes: a list of the attributes pertaining to the integrand which had some bearing on the choice of method"]
- d01asfExplList:LST := ["result: Calculated value of the integral",
- "iw: iw(1) contains the actual number of sub-intervals used, the rest is workspace",
- "lst: contains the actual number of sub-intervals used",
- "erlst: contains the error estimates over the sub-intervals",
- "rslst: contains the integral contributions of the sub-intervals",
- "ierlst: contains the error flags corresponding to the values in rslst",
- "abserr: the estimate of the absolute error of the result",
- "ifail: the error warning parameter",
- "method: details of the method used and measures of all methods",
- "attributes: a list of the attributes pertaining to the integrand which had some bearing on the choice of method"]
- d01fcfExplList:LST := ["result: Calculated value of the integral",
- "acc: the estimate of the relative error of the result",
- "minpts: the number of integrand evaluations",
- "ifail: the error warning parameter",
- "method: details of the method used and measures of all methods",
- "attributes: a list of the attributes pertaining to the integrand which had some bearing on the choice of method"]
- d01transExplList:LST := ["result: Calculated value of the integral",
- "abserr: the estimate of the absolute error of the result",
- "method: details of the method and transformation used and measures of all methods",
- "d01***AnnaTypeAnswer: the individual results from the routines",
- "attributes: a list of the attributes pertaining to the integrand which had some bearing on the choice of method"]
- d02bhfExplList:LST := ["x: the value of x at the end of the calculation",
- "y: the computed values of Y\[1\]..Y\[n\] at x",
- "tol: the (possible) estimate of the error; this is not guarunteed",
- "ifail: the error warning parameter",
- "method: details of the method used and measures of all methods",
- "intensityFunctions: a list of the attributes and values pertaining to the ODE which had some bearing on the choice of method"]
- d02bbfExplList:LST := concat(["result: the computed values of the solution at the required points"],d02bhfExplList)$LST
- d03eefExplList:LST := ["See the NAG On-line Documentation for D03EEF/D03EDF",
- "u: the computed solution u[i][j] is returned in u(i+(j-1)*ngx),for i = 1,2,..ngx; j = 1,2,..ngy"]
- e04fdfExplList:LST := ["x: the position of the minimum",
- "objf: the value of the objective function at x",
- "ifail: the error warning parameter",
- "method: details of the method used and measures of all methods",
- "attributes: a list of the attributes pertaining to the function or functions which had some bearing on the choice of method"]
- e04dgfExplList:LST := concat(e04fdfExplList,
- ["objgrd: the values of the derivatives at x",
- "iter: the number of iterations performed"])$LST
- e04jafExplList:LST := concat(e04fdfExplList,
- ["bu: the values of the upper bounds used",
- "bl: the values of the lower bounds used"])$LST
- e04ucfExplList:LST := concat(e04dgfExplList,
- ["istate: the status of every constraint at x",
- "clamda: the QP multipliers for the last QP sub-problem",
- "For other output parameters see the NAG On-line Documentation for E04UCF"])$LST
- e04mbfExplList:LST := concat(e04fdfExplList,
- ["istate: the status of every constraint at x",
- "clamda: the Lagrange multipliers for each constraint"])$LST
- d01ajfIfail:IFL := [[1,"incrFunEvals"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"delete"], [6,"delete"]]
- d01akfIfail:IFL := [[1,"incrFunEvals"], [2,"delete"], [3,"delete"], [4,"delete"]]
- d01alfIfail:IFL := [[1,"incrFunEvals"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"delete"], [6,"delete"], [7,"delete"]]
- d01amfIfail:IFL := [[1,"incrFunEvals"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"delete"], [6,"delete"]]
- d01anfIfail:IFL := [[1,"incrFunEvals"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"delete"], [6,"delete"], [7,"delete"]]
- d01apfIfail:IFL :=
- [[1,"incrFunEvals"], [2,"delete"], [3,"delete"], [4,"delete"], [5,"delete"]]
- d01aqfIfail:IFL :=
- [[1,"incrFunEvals"], [2,"delete"], [3,"delete"], [4,"delete"], [5,"delete"]]
- d01asfIfail:IFL := [[1,"incrFunEvals"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"delete"], [6,"delete"], [7,"delete"], [8,"delete"], [9,"delete"]]
- d01fcfIfail:IFL := [[1,"delete"], [2,"incrFunEvals"], [3,"delete"]]
- d01gbfIfail:IFL := [[1,"delete"], [2,"incrFunEvals"]]
- d02bbfIfail:IFL :=
- [[1,"delete"], [2,"decrease tolerance"], [3,"increase tolerance"],
- [4,"delete"], [5,"delete"], [6,"delete"], [7,"delete"]]
- d02bhfIfail:IFL :=
- [[1,"delete"], [2,"decrease tolerance"], [3,"increase tolerance"],
- [4,"no action"], [5,"delete"], [6,"delete"], [7,"delete"]]
- d02cjfIfail:IFL :=
- [[1,"delete"], [2,"decrease tolerance"], [3,"increase tolerance"],
- [4,"delete"], [5,"delete"], [6,"no action"], [7,"delete"]]
- d02ejfIfail:IFL :=
- [[1,"delete"], [2,"decrease tolerance"], [3,"increase tolerance"],
- [4,"delete"], [5,"delete"], [6,"no action"], [7,"delete"], [8,"delete"],
- [9,"delete"]]
- e04dgfIfail:IFL := [[3,"delete"], [4,"no action"], [6,"delete"],
- [7,"delete"], [8,"delete"], [9,"delete"]]
- e04fdfIfail:IFL :=
- [[1,"delete"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"no action"], [6,"no action"], [7,"delete"], [8,"delete"]]
- e04gcfIfail:IFL := [[1,"delete"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"no action"], [6,"no action"], [7,"delete"], [8,"delete"], [9,"delete"]]
- e04jafIfail:IFL := [[1,"delete"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"no action"], [6,"no action"], [7,"delete"], [8,"delete"], [9,"delete"]]
- e04mbfIfail:IFL :=
- [[1,"delete"], [2,"delete"], [3,"delete"], [4,"delete"], [5,"delete"]]
- e04nafIfail:IFL :=
- [[1,"delete"], [2,"delete"], [3,"delete"], [4,"delete"], [5,"delete"],
- [6,"delete"], [7,"delete"], [8,"delete"], [9,"delete"]]
- e04ucfIfail:IFL := [[1,"delete"], [2,"delete"], [3,"delete"], [4,"delete"],
- [5,"delete"], [6,"delete"], [7,"delete"], [8,"delete"], [9,"delete"]]
- d01ajfEntry:Entry := [int, f, "d01ajfAnnaType",0.4,0.4,d01ajfIfail,d01ajfExplList]
- d01akfEntry:Entry := [int, f, "d01akfAnnaType",0.6,1.0,d01akfIfail,d01ajfExplList]
- d01alfEntry:Entry := [int, f, "d01alfAnnaType",0.6,0.6,d01alfIfail,d01ajfExplList]
- d01amfEntry:Entry := [int, i, "d01amfAnnaType",0.5,0.5,d01amfIfail,d01ajfExplList]
- d01anfEntry:Entry := [int, f, "d01anfAnnaType",0.6,0.9,d01anfIfail,d01ajfExplList]
- d01apfEntry:Entry := [int, f, "d01apfAnnaType",0.7,0.7,d01apfIfail,d01ajfExplList]
- d01aqfEntry:Entry := [int, f, "d01aqfAnnaType",0.6,0.7,d01aqfIfail,d01ajfExplList]
- d01asfEntry:Entry := [int, s, "d01asfAnnaType",0.6,0.9,d01asfIfail,d01asfExplList]
- d01transEntry:Entry:=[int, i, "d01TransformFunctionType",0.6,0.9,[],d01transExplList]
- d01gbfEntry:Entry := [int, m, "d01gbfAnnaType",0.6,0.6,d01gbfIfail,d01fcfExplList]
- d01fcfEntry:Entry := [int, m, "d01fcfAnnaType",0.5,0.5,d01fcfIfail,d01fcfExplList]
- d02bbfEntry:Entry := [ode, "IVP", "d02bbfAnnaType",0.7,0.5,d02bbfIfail,d02bbfExplList]
- d02bhfEntry:Entry := [ode, "IVP", "d02bhfAnnaType",0.7,0.49,d02bhfIfail,d02bhfExplList]
- d02cjfEntry:Entry := [ode, "IVP", "d02cjfAnnaType",0.7,0.5,d02cjfIfail,d02bbfExplList]
- d02ejfEntry:Entry := [ode, "IVP", "d02ejfAnnaType",0.7,0.5,d02ejfIfail,d02bbfExplList]
- d03eefEntry:Entry := [pde, "2", "d03eefAnnaType",0.6,0.5,[],d03eefExplList]
- --d03fafEntry:Entry := [pde, "3", "d03fafAnnaType",0.6,0.5,[],[]]
- e04dgfEntry:Entry := [opt, "CGA", "e04dgfAnnaType",0.4,0.4,e04dgfIfail,e04dgfExplList]
- e04fdfEntry:Entry := [opt, "SS", "e04fdfAnnaType",0.7,0.7,e04fdfIfail,e04fdfExplList]
- e04gcfEntry:Entry := [opt, "SS", "e04gcfAnnaType",0.8,0.8,e04gcfIfail,e04fdfExplList]
- e04jafEntry:Entry := [opt, "QNA", "e04jafAnnaType",0.5,0.5,e04jafIfail,e04jafExplList]
- e04mbfEntry:Entry := [opt, "LP", "e04mbfAnnaType",0.7,0.7,e04mbfIfail,e04mbfExplList]
- e04nafEntry:Entry := [opt, "QP", "e04nafAnnaType",0.7,0.7,e04nafIfail,e04mbfExplList]
- e04ucfEntry:Entry := [opt, "SQP", "e04ucfAnnaType",0.6,0.6,e04ucfIfail,e04ucfExplList]
- rl:RList :=
- [["d01apf" :: Symbol, coerce(d01apfEntry)$AnyFunctions1(Entry)],_
- ["d01aqf" :: Symbol, coerce(d01aqfEntry)$AnyFunctions1(Entry)],_
- ["d01alf" :: Symbol, coerce(d01alfEntry)$AnyFunctions1(Entry)],_
- ["d01anf" :: Symbol, coerce(d01anfEntry)$AnyFunctions1(Entry)],_
- ["d01akf" :: Symbol, coerce(d01akfEntry)$AnyFunctions1(Entry)],_
- ["d01ajf" :: Symbol, coerce(d01ajfEntry)$AnyFunctions1(Entry)],_
- ["d01asf" :: Symbol, coerce(d01asfEntry)$AnyFunctions1(Entry)],_
- ["d01amf" :: Symbol, coerce(d01amfEntry)$AnyFunctions1(Entry)],_
- ["d01transform" :: Symbol, coerce(d01transEntry)$AnyFunctions1(Entry)],_
- ["d01gbf" :: Symbol, coerce(d01gbfEntry)$AnyFunctions1(Entry)],_
- ["d01fcf" :: Symbol, coerce(d01fcfEntry)$AnyFunctions1(Entry)],_
- ["d02bbf" :: Symbol, coerce(d02bbfEntry)$AnyFunctions1(Entry)],_
- ["d02bhf" :: Symbol, coerce(d02bhfEntry)$AnyFunctions1(Entry)],_
- ["d02cjf" :: Symbol, coerce(d02cjfEntry)$AnyFunctions1(Entry)],_
- ["d02ejf" :: Symbol, coerce(d02ejfEntry)$AnyFunctions1(Entry)],_
- ["d03eef" :: Symbol, coerce(d03eefEntry)$AnyFunctions1(Entry)],_
- --["d03faf" :: Symbol, coerce(d03fafEntry)$AnyFunctions1(Entry)],
- ["e04dgf" :: Symbol, coerce(e04dgfEntry)$AnyFunctions1(Entry)],_
- ["e04fdf" :: Symbol, coerce(e04fdfEntry)$AnyFunctions1(Entry)],_
- ["e04gcf" :: Symbol, coerce(e04gcfEntry)$AnyFunctions1(Entry)],_
- ["e04jaf" :: Symbol, coerce(e04jafEntry)$AnyFunctions1(Entry)],_
- ["e04mbf" :: Symbol, coerce(e04mbfEntry)$AnyFunctions1(Entry)],_
- ["e04naf" :: Symbol, coerce(e04nafEntry)$AnyFunctions1(Entry)],_
- ["e04ucf" :: Symbol, coerce(e04ucfEntry)$AnyFunctions1(Entry)]]
- construct(rl)
-
- getIFL(s:Symbol,l:%):Union(IFL,"failed") ==
- o := search(s,l)$%
- o case "failed" => "failed"
- e := retractIfCan(o)$AnyFunctions1(Entry)
- e case "failed" => "failed"
- e.failList
-
- getInstruction(l:IFL,ifailValue:Integer):Union(ST,"failed") ==
- output := empty()$ST
- for i in 1..#l repeat
- if ((l.i).ifail=ifailValue)@Boolean then
- output := (l.i).instruction
- empty?(output)$ST => "failed"
- output
-
- recoverAfterFail(routs:%,routineName:ST,
- ifailValue:Integer):Union(ST,"failed") ==
- name := routineName :: Symbol
- failedList := getIFL(name,routs)
- failedList case "failed" => "failed"
- empty? failedList => "failed"
- instr := getInstruction(failedList,ifailValue)
- instr case "failed" => concat(routineName," failed")$ST
- (instr = "delete")@Boolean =>
- deleteRoutine!(routs,name)
- concat(routineName," failed - trying alternatives")$ST
- instr
-
- getExplanations(R:%,routineName:ST):LST ==
- name := routineName :: Symbol
- (a := search(name,R)) case Any =>
- e := retract(a)$AnyFunctions1(Entry)
- e.explList
- empty()$LST
-
-@
-\section{domain ATTRBUT AttributeButtons}
-<<domain ATTRBUT AttributeButtons>>=
-)abbrev domain ATTRBUT AttributeButtons
-++ Author: Brian Dupee
-++ Date Created: April 1996
-++ Date Last Updated: December 1997
-++ Basic Operations: increase, decrease, getButtonValue, setButtonValue
-++ Related Constructors: Table(String,Float)
-++ Description:
-++ \axiomType{AttributeButtons} implements a database and associated
-++ adjustment mechanisms for a set of attributes.
-++
-++ For ODEs these attributes are "stiffness", "stability" (i.e. how much
-++ affect the cosine or sine component of the solution has on the stability of
-++ the result), "accuracy" and "expense" (i.e. how expensive is the evaluation
-++ of the ODE). All these have bearing on the cost of calculating the
-++ solution given that reducing the step-length to achieve greater accuracy
-++ requires considerable number of evaluations and calculations.
-++
-++ The effect of each of these attributes can be altered by increasing or
-++ decreasing the button value.
-++
-++ For Integration there is a button for increasing and decreasing the preset
-++ number of function evaluations for each method. This is automatically used
-++ by ANNA when a method fails due to insufficient workspace or where the
-++ limit of function evaluations has been reached before the required
-++ accuracy is achieved.
-++
-AttributeButtons(): E == I where
- F ==> Float
- ST ==> String
- LST ==> List String
- Rec ==> Record(key:Symbol,entry:Any)
- RList ==> List(Record(key:Symbol,entry:Any))
- IFL ==> List(Record(ifail:Integer,instruction:ST))
- Entry ==> Record(chapter:ST, type:ST, domainName: ST,
- defaultMin:F, measure:F, failList:IFL, explList:LST)
-
-
- E ==> SetCategory with
-
- increase:(ST,ST) -> F
- ++ \axiom{increase(routineName,attributeName)} increases the value
- ++ for the effect of the attribute \axiom{attributeName} with routine
- ++ \axiom{routineName}.
- ++
- ++ \axiom{attributeName} should be one of the values
- ++ "stiffness", "stability", "accuracy", "expense" or
- ++ "functionEvaluations".
- increase:(ST) -> F
- ++ \axiom{increase(attributeName)} increases the value for the
- ++ effect of the attribute \axiom{attributeName} with all routines.
- ++
- ++ \axiom{attributeName} should be one of the values
- ++ "stiffness", "stability", "accuracy", "expense" or
- ++ "functionEvaluations".
- decrease:(ST,ST) -> F
- ++ \axiom{decrease(routineName,attributeName)} decreases the value
- ++ for the effect of the attribute \axiom{attributeName} with routine
- ++ \axiom{routineName}.
- ++
- ++ \axiom{attributeName} should be one of the values
- ++ "stiffness", "stability", "accuracy", "expense" or
- ++ "functionEvaluations".
- decrease:(ST) -> F
- ++ \axiom{decrease(attributeName)} decreases the value for the
- ++ effect of the attribute \axiom{attributeName} with all routines.
- ++
- ++ \axiom{attributeName} should be one of the values
- ++ "stiffness", "stability", "accuracy", "expense" or
- ++ "functionEvaluations".
- getButtonValue:(ST,ST) -> F
- ++ \axiom{getButtonValue(routineName,attributeName)} returns the
- ++ current value for the effect of the attribute \axiom{attributeName}
- ++ with routine \axiom{routineName}.
- ++
- ++ \axiom{attributeName} should be one of the values
- ++ "stiffness", "stability", "accuracy", "expense" or
- ++ "functionEvaluations".
- resetAttributeButtons:() -> Void
- ++ \axiom{resetAttributeButtons()} resets the Attribute buttons to a
- ++ neutral level.
- setAttributeButtonStep:(F) -> F
- ++ \axiom{setAttributeButtonStep(n)} sets the value of the steps for
- ++ increasing and decreasing the button values. \axiom{n} must be
- ++ greater than 0 and less than 1. The preset value is 0.5.
- setButtonValue:(ST,F) -> F
- ++ \axiom{setButtonValue(attributeName,n)} sets the
- ++ value of all buttons of attribute \spad{attributeName}
- ++ to \spad{n}. \spad{n} must be in the range [0..1].
- ++
- ++ \axiom{attributeName} should be one of the values
- ++ "stiffness", "stability", "accuracy", "expense" or
- ++ "functionEvaluations".
- setButtonValue:(ST,ST,F) -> F
- ++ \axiom{setButtonValue(attributeName,routineName,n)} sets the
- ++ value of the button of attribute \spad{attributeName} to routine
- ++ \spad{routineName} to \spad{n}. \spad{n} must be in the range [0..1].
- ++
- ++ \axiom{attributeName} should be one of the values
- ++ "stiffness", "stability", "accuracy", "expense" or
- ++ "functionEvaluations".
- finiteAggregate
-
- I ==> add
-
- Rep := StringTable(F)
- import Rep
-
- buttons:() -> $
-
- buttons():$ ==
- eList := empty()$List(Record(key:ST,entry:F))
- l1:List String := ["stability","stiffness","accuracy","expense"]
- l2:List String := ["functionEvaluations"]
- ro1 := selectODEIVPRoutines(r := routines()$RoutinesTable)$RoutinesTable
- ro2 := selectIntegrationRoutines(r)$RoutinesTable
- k1:List String := [string(i)$Symbol for i in keys(ro1)$RoutinesTable]
- k2:List String := [string(i)$Symbol for i in keys(ro2)$RoutinesTable]
- for i in k1 repeat
- for j in l1 repeat
- e:Record(key:ST,entry:F) := [i j,0.5]
- eList := cons(e,eList)$List(Record(key:ST,entry:F))
- for i in k2 repeat
- for j in l2 repeat
- e:Record(key:ST,entry:F) := [i j,0.5]
- eList := cons(e,eList)$List(Record(key:ST,entry:F))
- construct(eList)$Rep
-
- attributeButtons:$ := buttons()
-
- attributeStep:F := 0.5
-
- setAttributeButtonStep(n:F):F ==
- positive?(n)$F and (n<1$F) => attributeStep:F := n
- error("setAttributeButtonStep","New value must be in (0..1)")$ErrorFunctions
-
- resetAttributeButtons():Void ==
- attributeButtons := buttons()
-
- setButtonValue(routineName:ST,attributeName:ST,n:F):F ==
- f := search(routineName attributeName,attributeButtons)$Rep
- f case Float =>
- n>=0$F and n<=1$F =>
- setelt(attributeButtons,routineName attributeName,n)$Rep
- error("setAttributeButtonStep","New value must be in [0..1]")$ErrorFunctions
- error("setButtonValue","attribute name " attributeName
- " not found for routine " routineName)$ErrorFunctions
-
- setButtonValue(attributeName:ST,n:F):F ==
- ro1 := selectODEIVPRoutines(r := routines()$RoutinesTable)$RoutinesTable
- ro2 := selectIntegrationRoutines(r)$RoutinesTable
- l1:List String := ["stability","stiffness","accuracy","expense"]
- l2:List String := ["functionEvaluations"]
- if attributeName="functionEvaluations" then
- for i in keys(ro2)$RoutinesTable repeat
- setButtonValue(string(i)$Symbol,attributeName,n)
- else
- for i in keys(ro1)$RoutinesTable repeat
- setButtonValue(string(i)$Symbol,attributeName,n)
- n
-
- increase(routineName:ST,attributeName:ST):F ==
- f := search(routineName attributeName,attributeButtons)$Rep
- f case Float =>
- newValue:F := (1$F-attributeStep)*f+attributeStep
- setButtonValue(routineName,attributeName,newValue)
- error("increase","attribute name " attributeName
- " not found for routine " routineName)$ErrorFunctions
-
- increase(attributeName:ST):F ==
- ro1 := selectODEIVPRoutines(r := routines()$RoutinesTable)$RoutinesTable
- ro2 := selectIntegrationRoutines(r)$RoutinesTable
- l1:List String := ["stability","stiffness","accuracy","expense"]
- l2:List String := ["functionEvaluations"]
- if attributeName="functionEvaluations" then
- for i in keys(ro2)$RoutinesTable repeat
- increase(string(i)$Symbol,attributeName)
- else
- for i in keys(ro1)$RoutinesTable repeat
- increase(string(i)$Symbol,attributeName)
- getButtonValue(string(i)$Symbol,attributeName)
-
- decrease(routineName:ST,attributeName:ST):F ==
- f := search(routineName attributeName,attributeButtons)$Rep
- f case Float =>
- newValue:F := (1$F-attributeStep)*f
- setButtonValue(routineName,attributeName,newValue)
- error("increase","attribute name " attributeName
- " not found for routine " routineName)$ErrorFunctions
-
- decrease(attributeName:ST):F ==
- ro1 := selectODEIVPRoutines(r := routines()$RoutinesTable)$RoutinesTable
- ro2 := selectIntegrationRoutines(r)$RoutinesTable
- l1:List String := ["stability","stiffness","accuracy","expense"]
- l2:List String := ["functionEvaluations"]
- if attributeName="functionEvaluations" then
- for i in keys(ro2)$RoutinesTable repeat
- decrease(string(i)$Symbol,attributeName)
- else
- for i in keys(ro1)$RoutinesTable repeat
- decrease(string(i)$Symbol,attributeName)
- getButtonValue(string(i)$Symbol,attributeName)
-
-
- getButtonValue(routineName:ST,attributeName:ST):F ==
- f := search(routineName attributeName,attributeButtons)$Rep
- f case Float => f
- error("getButtonValue","attribute name " attributeName
- " not found for routine " routineName)$ErrorFunctions
-
-@
-\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 ROUTINE RoutinesTable>>
-<<domain ATTRBUT AttributeButtons>>
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}