123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- \section{Numeric Package}
- \begin{Introduction}{Numeric Package}
- The numeric package supplies algorithms based on approximation
- techniques of numerical mathematics. The algorithms use
- the \nameref{rounded} mode arithmetic of REDUCE, including
- the variable precision feature which is exploited in some
- algorithms in an adaptive manner in order to reach the
- desired accuracy.
- \end{Introduction}
- \begin{Type}{Interval}
- Intervals are generally coded as lower bound and
- upper bound connected by the operator \name{..}, usually
- associated to a variable in an
- equation.
- \begin{Syntax}
- \meta{var} = \(\meta{low} .. \meta{high}\)
- \end{Syntax}
- where \meta{var} is a \nameref{kernel} and \meta{low}, \meta{high} are
- numbers or expression which evaluate to numbers with \meta{low}<=\meta{high}.
- \begin{Examples}
- x= (2.5 .. 3.5)
- \end{Examples}
- means that the variable x is taken in the range from 2.5 up to
- 3.5.
- \end{Type}
- \begin{Concept}{numeric accuracy}
- The keyword parameters \name{accuracy=a} and \name{iterations=i},
- where \name{a}and \name{i} must be positive integer numbers, control the
- iterative algorithms: the iteration is continued until
- the local error is below 10**{-a}; if that is impossible
- within \name{i} steps, the iteration is terminated with an
- error message. The values reached so far are then returned
- as the result.
- \end{Concept}
- \begin{Switch}{TRNUMERIC}
- Normally the algorithms produce only a minimum of printed
- output during their operation. In cases of an unsuccessful
- or unexpected long operation a \name{trace of the iteration} can be
- printed by setting \name{trnumeric} \name{on}.
- \end{Switch}
- \begin{Operator}{num_min}
- \index{minimum}\index{steepest descent}\index{Fletcher Reeves}
- The Fletcher Reeves version of the \name{steepest descent}
- algorithms is used to find the \name{minimum} of a
- function of one or more variables. The
- function must have continuous partial derivatives with respect to all
- variables. The starting point of the search can be
- specified; if not, random values are taken instead.
- The steepest descent algorithms in general find only local
- minima.
-
- \begin{Syntax}
- \name{num\_min}\(\meta{exp},
- \meta{var}[=\meta{val}] [,\meta{var}[=\meta{val}] ...
- [,accuracy=\meta{a}] [,iterations=\meta{i}]\)
- or
- \name{num\_min}\(exp, \{
- \meta{var}[=\meta{val}] [,\meta{var}[=\meta{val}] ...] \}
- [,accuracy=\meta{a}] [,iterations=\meta{i}]\)
- \end{Syntax}
- where \meta{exp} is a function expression,
- \meta{var} are the variables in \meta{exp} and
- \meta{val} are the (optional) start values.
- For \meta{a} and \meta{i} see \nameref{numeric accuracy}.
- \name{Num\_min} tries to find the next local minimum along the descending
- path starting at the given point. The result is a \nameref{list}
- with the minimum function value as first element followed by a list
- of \nameref{equation}\name{s}, where the variables are equated to the coordinates
- of the result point.
- \begin{Examples}
- num_min(sin(x)+x/5, x)&\{4.9489585606,\{X=29.643767785\}\}\\
- num_min(sin(x)+x/5, x=0)&\{ - 1.3342267466,\{X= - 1.7721582671\}\}
- \end{Examples}
- \end{Operator}
- \begin{Operator}{num_solve}
- \index{equation solving}\index{equation system}\index{Newton iteration}
- \index{root}
- An adaptively damped Newton iteration is used to find
- an approximative root of a function (function vector) or the
- solution of an \nameref{equation} (equation system). The expressions
- must have continuous derivatives for all variables.
- A starting point for the iteration can be given. If not given
- random values are taken instead. When the number of
- forms is not equal to the number of variables, the
- Newton method cannot be applied. Then the minimum
- of the sum of absolute squares is located instead.
- With \nameref{complex} on, solutions with imaginary parts can be
- found, if either the expression(s) or the starting point
- contain a nonzero imaginary part.
- \begin{Syntax}
- \name{num\_solve}\(\meta{exp}, \meta{var}[=\meta{val}][,accuracy=\meta{a}][,iterations=\meta{i}]\)
- or
- \name{num\_solve}\(\{\meta{exp},...,\meta{exp}\}, \meta{var}[=\meta{val}],...,\meta{var}[=\meta{val}]
- [,accuracy=\meta{a}][,iterations=\meta{i}]\)
- or
- \name{num\_solve}\(\{\meta{exp},...,\meta{exp}\}, \{\meta{var}[=\meta{val}],...,\meta{var}[=\meta{val}]\}
- [,accuracy=\meta{a}][,iterations=\meta{i}]\)
-
- \end{Syntax}
- where \meta{exp} are function expressions,
- \meta{var} are the variables,
- \meta{val} are optional start values.
- For \meta{a} and \meta{i} see \nameref{numeric accuracy}.
-
- \name{num_solve} tries to find a zero/solution of the expression(s).
- Result is a list of equations, where the variables are
- equated to the coordinates of the result point.
-
- The \nameindex{Jacobian matrix} is stored as side effect the shared
- variable \name{jacobian}.
-
- \begin{Examples}
- num_solve({sin x=cos y, x + y = 1},{x=1,y=2});&
- \{X= - 1.8561957251,Y=2.856195584\}\\
- jacobian;&
- \begin{multilineoutput}{5cm}
- [COS(X) SIN(Y)]
- [ ]
- [ 1 1 ]
- \end{multilineoutput}
- \end{Examples}
- \end{Operator}
- \begin{Operator}{num_int}
- \index{integration}
- For the numerical evaluation of univariate integrals
- over a finite interval the following strategy is used:
- If \nameref{int} finds a formal antiderivative
- which is bounded in the integration interval, this
- is evaluated and the end points and the difference
- is returned.
- Otherwise a \nameref{Chebyshev fit} is computed,
- starting with order 20, eventually up to order 80.
- If that is recognized as sufficiently convergent
- it is used for computing the integral by directly
- integrating the coefficient sequence.
- If none of these methods is successful, an
- adaptive multilevel quadrature algorithm is used.
- For multivariate integrals only the adaptive quadrature is used.
- This algorithm tolerates isolated singularities.
- The value \name{iterations} here limits the number of
- local interval intersection levels.
- \meta{a} is a measure for the relative total discretization
- error (comparison of order 1 and order 2 approximations).
-
- \begin{Syntax}
- \name{num_int}\(\meta{exp},\meta{var}=\(\meta{l} .. \meta{u}\)
- [,\meta{var}=\(\meta{l} .. \meta{u}\),...]
- [,accuracy=\meta{a}][,iterations=\meta{i}]\)
- \end{Syntax}
- where \meta{exp} is the function to be integrated,
- \meta{var} are the integration variables,
- \meta{l} are the lower bounds,
- \meta{u} are the upper bounds.
-
- Result is the value of the integral.
-
- \begin{Examples}
- num_int(sin x,x=(0 .. 3.1415926));& 2.0000010334
- \end{Examples}
- \end{Operator}
- \begin{Operator}{num_odesolve}
- \index{Runge-Kutta}\index{initial value problem}\index{ODE}
- The \name{Runge-Kutta} method of order 3 finds an approximate graph for
- the solution of real \name{ODE initial value problem}.
-
- \begin{Syntax}
- \name{num_odesolve}\(\meta{exp},\meta{depvar}=\meta{start},
- \meta{indep}=\(\meta{from} .. \meta{to}\)
- [,accuracy=\meta{a}][,iterations=\meta{i}]\)
- or
- \name{num_odesolve}\(\{\meta{exp},\meta{exp},...\},
- \{ \meta{depvar}=\meta{start},\meta{depvar}=\meta{start},...\}
- \meta{indep}=\(\meta{from} .. \meta{to}\)
- [,accuracy=\meta{a}][,iterations=\meta{i}]\)
- \end{Syntax}
- where
- \meta{depvar} and \meta{start} specify the dependent variable(s)
- and the starting point value (vector),
- \meta{indep}, \meta{from} and \meta{to} specify the independent variable
- and the integration interval (starting point and end point),
- \meta{exp} are equations or expressions which
- contain the first derivative of the independent variable
- with respect to the dependent variable.
-
- The ODEs are converted to an explicit form, which then is
- used for a Runge Kutta iteration over the given range. The
- number of steps is controlled by the value of \meta{i}
- (default: 20). If the steps are too coarse to reach the desired
- accuracy in the neighborhood of the starting point, the number is
- increased automatically.
-
- Result is a list of pairs, each representing a point of the
- approximate solution of the ODE problem.
- \begin{Examples}
- depend(y,x);\\
- num_odesolve(df(y,x)=y,y=1,x=(0 .. 1), iterations=5);&
- \begin{multilineoutput}
- \{\{0.0,1.0\},\{0.2,1.2214\},\{0.4,1.49181796\},\{0.6,1.8221064563\},
- \{0.8,2.2255208258\},\{1.0,2.7182511366\}\}\\
- \end{multilineoutput}
- \end{Examples}
- In most cases you must declare the dependency relation
- between the variables explicitly using \nameref{depend};
- otherwise the formal derivative might be converted to zero.
- The operator \nameref{solve} is used to convert the form into
- an explicit ODE. If that process fails or if it has no unique result,
- the evaluation is stopped with an error message.
- \end{Operator}
- \begin{Operator}{bounds}
- Upper and lower bounds of a real valued function over an
- \nameref{interval} or a rectangular multivariate domain are computed
- by the operator \name{bounds}. The algorithmic basis is the computation
- with inequalities: starting from the interval(s) of the
- variables, the bounds are propagated in the expression
- using the rules for inequality computation. Some knowledge
- about the behavior of special functions like ABS, SIN, COS, EXP, LOG,
- fractional exponentials etc. is integrated and can be evaluated
- if the operator \name{bounds} is called with rounded mode on
- (otherwise only algebraic evaluation rules are available).
-
- If \name{bounds} finds a singularity within an interval, the evaluation
- is stopped with an error message indicating the problem part
- of the expression.
-
- \begin{Syntax}
- \name{bounds}\(\meta{exp},\meta{var}=\(\meta{l} .. \meta{u}\)
- [,\meta{var}=\(\meta{l} .. \meta{u}\) ...]\)
- or
- \name{bounds}\(\meta{exp},\{\meta{var}=\(\meta{l} .. \meta{u}\)
- [,\meta{var}=\(\meta{l} .. \meta{u}\) ...]\}\)
-
- \end{Syntax}
- where \meta{exp} is the function to be investigated,
- \meta{var} are the variables of \meta{exp},
- \meta{l} and \meta{u} specify the area as set of \nameref{interval}\name{s}.
- \name{bounds} computes upper and lower bounds for the expression in the
- given area. An \nameref{interval} is returned.
-
- \begin{Examples}
- bounds(sin x,x=(1 .. 2));& -1 .. 1\\
- on rounded;\\
- bounds(sin x,x=(1 .. 2));& 0.84147098481 .. 1\\
- bounds(x**2+x,x=(-0.5 .. 0.5));& - 0.25 .. 0.75\\
- \end{Examples}
- \end{Operator}
-
- \begin{Concept}{Chebyshev fit}
- \index{approximation}
- The operator family \name{Chebyshev\_...} implements approximation
- and evaluation of functions by the Chebyshev method.
- Let \name{T(n,a,b,x)} be the Chebyshev polynomial of order \name{n}
- transformed to the interval \name{(a,b)}.
- Then a function \name{f(x)} can be
- approximated in \name{(a,b)} by a series
- \begin{verbatim}
- for i := 0:n sum c(i)*T(i,a,b,x)
- \end{verbatim}
- The operator \name{chebyshev\_fit} computes this approximation and
- returns a list, which has as first element the sum expressed
- as a polynomial and as second element the sequence
- of Chebyshev coefficients.
- \name{Chebyshev\_df} and \name{Chebyshev\_int} transform a Chebyshev
- coefficient list into the coefficients of the corresponding
- derivative or integral respectively. For evaluating a Chebyshev
- approximation at a given point in the basic interval the
- operator \name{Chebyshev\_eval} can be used.
- \name{Chebyshev\_eval} is based on a recurrence relation which is
- in general more stable than a direct evaluation of the
- complete polynomial.
- \begin{Syntax}
- \name{chebyshev\_fit}\(\meta{fcn},\meta{var}=\(\meta{lo} .. \meta{hi}\),\meta{n}\)
- \name{chebyshev\_eval}\(\meta{coeffs},\meta{var}=\(\meta{lo} .. \meta{hi}\),
- \meta{var}=\meta{pt}\)
- \name{chebyshev\_df}\(\meta{coeffs},\meta{var}=\(\meta{lo} .. \meta{hi}\)\)
- \name{chebyshev\_int}\(\meta{coeffs},\meta{var}=\(\meta{lo} .. \meta{hi}\)\)
- \end{Syntax}
- where \meta{fcn} is an algebraic expression (the target function),
- \meta{var} is the variable of \meta{fcn},
- \meta{lo} and \meta{hi} are
- numerical real values which describe an \nameref{interval} \meta{lo} < \meta{hi},
- the integer \meta{n} is the approximation order (set to 20 if missing),
- \meta{pt} is a number in the interval and \meta{coeffs} is
- a series of Chebyshev coefficients.
- \begin{Examples}
- on rounded;\\
- w:=chebyshev_fit(sin x/x,x=(1 .. 3),5);&
- \begin{multilineoutput}{6cm}
- w := \{0.03824*x^3 - 0.2398*x^2 + 0.06514*x + 0.9778,
- \{0.8991,-0.4066,-0.005198,0.009464,-0.00009511\}\}
- \end{multilineoutput}\\
- chebyshev_eval(second w, x=(1 .. 3), x=2.1);& 0.4111\\
- \end{Examples}
- \end{Concept}
- \begin{Operator}{num_fit}
- \index{approximation}\index{least squares}
- The operator \name{num_fit} finds for a set of
- points the linear combination of a given set of
- functions (function basis) which approximates the
- points best under the objective of the \name{least squares}
- criterion (minimum of the sum of the squares of the deviation).
- The solution is found as zero of the
- gradient vector of the sum of squared errors.
- \begin{Syntax}
- \name{num_fit}\(\meta{vals},\meta{basis},\meta{var}=\meta{pts}\)
- \end{Syntax}
-
- where \meta{vals} is a list of numeric values,
- \meta{var} is a variable used for the approximation,
- \meta{pts} is a list of coordinate values which correspond to
- \meta{var},
- \meta{basis} is a set of functions varying in \name{var} which is used
- for the approximation.
-
- The result is a list containing as first element the
- function which approximates the given values, and as
- second element a list of coefficients which were used
- to build this function from the basis.
-
- \begin{Examples}
-
- pts:=for i:=1 step 1 until 5 collect i$\\
- vals:=for i:=1 step 1 until 5 collect\\
- for j:=1:i product j$\\
- num_fit(vals,{1,x,x**2},x=pts);&
- \begin{multilineoutput}{6cm}
- \{14.571428571*X^2 - 61.428571429*X + 54.6,\{54.6,
- - 61.428571429,14.571428571\}\}
- \end{multilineoutput}
- \end{Examples}
- \end{Operator}
|