From ab8cc85adde879fb963c94d15675783f2cf4b183 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Tue, 14 Aug 2007 05:14:52 +0000 Subject: Initial population. --- src/hyper/pages/MKFUNC.ht | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/hyper/pages/MKFUNC.ht (limited to 'src/hyper/pages/MKFUNC.ht') diff --git a/src/hyper/pages/MKFUNC.ht b/src/hyper/pages/MKFUNC.ht new file mode 100644 index 00000000..c8ae31d1 --- /dev/null +++ b/src/hyper/pages/MKFUNC.ht @@ -0,0 +1,86 @@ +% Copyright The Numerical Algorithms Group Limited 1992-94. All rights reserved. +% !! DO NOT MODIFY THIS FILE BY HAND !! Created by ht.awk. +\newcommand{\MakeFunctionXmpTitle}{MakeFunction} +\newcommand{\MakeFunctionXmpNumber}{9.50} +% +% ===================================================================== +\begin{page}{MakeFunctionXmpPage}{9.50 MakeFunction} +% ===================================================================== +\beginscroll +It is sometimes useful to be able to define a function given by +the result of a calculation. +% +\xtc{ +Suppose that you have obtained the following expression +after several computations +and that you now want to tabulate the numerical values of \spad{f} +for \spad{x} between \spad{-1} and \spad{+1} with increment +\spad{0.1}. +}{ +\spadpaste{expr := (x - exp x + 1)**2 * (sin(x**2) * x + 1)**3 \bound{expr}} +} +% +You could, of course, use the function +\spadfunFrom{eval}{Expression} within a loop and evaluate +\spad{expr} twenty-one times, but this would be quite slow. +A better way is to create a numerical function \spad{f} such that +\spad{f(x)} is defined by the expression \spad{expr} above, +but without retyping \spad{expr}! +The package \spadtype{MakeFunction} provides the operation +\spadfunFrom{function}{MakeFunction} which does exactly this. +% +\xtc{ +Issue this to create the function \spad{f(x)} given by \spad{expr}. +}{ +\spadpaste{function(expr, f, x) \bound{f}\free{expr}} +} +\xtc{ +To tabulate \spad{expr}, we can now quickly evaluate \spad{f} 21 times. +}{ +\spadpaste{tbl := [f(0.1 * i - 1) for i in 0..20]; \free{f}\bound{tbl}} +} +% +% +\xtc{ +Use the list \spad{[x1,...,xn]} as the +third argument to \spadfunFrom{function}{MakeFunction} +to create a multivariate function \spad{f(x1,...,xn)}. +}{ +\spadpaste{e := (x - y + 1)**2 * (x**2 * y + 1)**2 \bound{e}} +} +\xtc{ +}{ +\spadpaste{function(e, g, [x, y]) \free{e}} +} +% +% +\xtc{ +In the case of just two +variables, they can be given as arguments without making them into a list. +}{ +\spadpaste{function(e, h, x, y) \free{e}\bound{h}} +} +% +% +\xtc{ +Note that the functions created by \spadfunFrom{function}{MakeFunction} +are not limited to floating point numbers, but can be applied to any type +for which they are defined. +}{ +\spadpaste{m1 := squareMatrix [[1, 2], [3, 4]] \bound{m1}} +} +\xtc{ +}{ +\spadpaste{m2 := squareMatrix [[1, 0], [-1, 1]] \bound{m2}} +} +\xtc{ +}{ +\spadpaste{h(m1, m2) \free{h m1 m2}} +} +% +For more information, see \downlink{``\ugUserMakeTitle''}{ugUserMakePage} in Section \ugUserMakeNumber\ignore{ugUserMake}. +\showBlurb{MakeFunction} +\endscroll +\autobuttons +\end{page} +% -- cgit v1.2.3