aboutsummaryrefslogtreecommitdiff
path: root/src/hyper/pages/function.ht
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/hyper/pages/function.ht
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/hyper/pages/function.ht')
-rw-r--r--src/hyper/pages/function.ht157
1 files changed, 157 insertions, 0 deletions
diff --git a/src/hyper/pages/function.ht b/src/hyper/pages/function.ht
new file mode 100644
index 00000000..b0da8ec2
--- /dev/null
+++ b/src/hyper/pages/function.ht
@@ -0,0 +1,157 @@
+% Copyright The Numerical Algorithms Group Limited 1991.
+% Certain derivative-work portions Copyright (C) 1988 by Leslie Lamport.
+% All rights reserved.
+
+\begin{page}{FunctionPage}{Functions in \Language{}}
+%
+In \Language{}, a function is an expression in one or more variables.
+(Think of it as a function of those variables).
+You can also define a function by rules or use a built-in function
+\Language{} lets you convert expressions to compiled functions.
+\beginscroll
+\beginmenu
+\menulink{Rational Functions}{RationatFunctionPage} \tab{22}
+Quotients of polynomials.
+
+\menulink{Algebraic Functions}{AlgebraicFunctionPage} \tab{22}
+Those defined by polynomial equations.
+
+\menulink{Elementary Functions}{ElementaryFunctionPage} \tab{22}
+The elementary functions of calculus.
+
+\menulink{Simplification}{FunctionSimplificationPage} \tab{22}
+How to simplify expressions.
+
+\menulink{Pattern Matching}{ugUserRulesPage} \tab{22}
+How to use the pattern matcher.
+\endmenu
+\endscroll
+\newline
+Additional Topics:
+\beginmenu
+
+\menulink{Operator Algebra}{OperatorXmpPage}\tab{22}
+The operator algebra facility.
+
+\endmenu
+\autobuttons \end{page}
+
+\begin{page}{RationatFunctionPage}{Rational Functions}
+\beginscroll
+To create a rational function, just compute the
+quotient of two polynomials:
+\spadpaste{f := (x - y) / (x + y)\bound{f}}
+Use the functions \spadfun{numer} and \spadfun{denom}:
+to recover the numerator and denominator of a fraction:
+%
+\spadpaste{numer f\free{f}}
+\spadpaste{denom f\free{f}}
+%
+Since these are polynomials, you can apply all the
+\downlink{polynomial operations}{PolynomialPage}
+to them.
+You can substitute values or
+other rational functions for the variables using
+the function \spadfun{eval}. The syntax for \spadfun{eval} is
+similar to the one for polynomials:
+\spadpaste{eval(f, x = 1/x)\free{f}}
+\spadpaste{eval(f, [x = y, y = x])\free{f}}
+\endscroll
+\autobuttons
+\end{page}
+
+\begin{page}{AlgebraicFunctionPage}{Algebraic Functions}
+\beginscroll
+Algebraic functions are functions defined by algebraic equations. There
+are two ways of constructing them: using rational powers, or implicitly.
+For rational powers, use \spadopFrom{**}{RadicalCategory}
+(or the system functions \spadfun{sqrt} and
+\spadfun{nthRoot} for square and nth roots):
+\spadpaste{f := sqrt(1 + x ** (1/3))\bound{f}}
+To define an algebraic function implicitly
+use \spadfun{rootOf}. The following
+line defines a function \spad{y} of \spad{x} satisfying the equation
+\spad{y**3 = x*y - y**2 - x**3 + 1}:
+\spadpaste{y := rootOf(y**3 + y**2 - x*y + x**3 - 1, y)\bound{y}}
+You can manipulate, differentiate or integrate an implicitly defined
+algebraic function like any other \Language{} function:
+\spadpaste{differentiate(y, x)\free{y}}
+Higher powers of algebraic functions are automatically reduced during
+calculations:
+\spadpaste{(y + 1) ** 3\free{y}}
+But denominators, are not automatically rationalized:
+\spadpaste{g := inv f\bound{g}\free{y}}
+Use \spadfun{ratDenom} to remove the algebraic quantities from the denominator:
+\spadpaste{ratDenom g\free{g}}
+\endscroll
+\autobuttons \end{page}
+
+\begin{page}{ElementaryFunctionPage}{Elementary Functions}
+\beginscroll
+\Language{} has most of the usual functions from calculus built-in:
+\spadpaste{f := x * log y * sin(1/(x+y))\bound{f}}
+You can substitute values or another elementary functions for the variables
+with the function \spadfun{eval}:
+\spadpaste{eval(f, [x = y, y = x])\free{f}}
+As you can see, the substitutions are made 'in parallel' as in the case
+of polynomials. It's also possible to substitute expressions for kernels
+instead of variables:
+\spadpaste{eval(f, log y = acosh(x + sqrt y))\free{f}}
+\endscroll
+\autobuttons \end{page}
+
+\begin{page}{FunctionSimplificationPage}{Simplification}
+\beginscroll
+Simplifying an expression often means different things at
+different times, so \Language{} offers a large number of
+`simplification' functions.
+The most common one, which performs the usual trigonometric
+simplifications is \spadfun{simplify}:
+\spadpaste{f := cos(x)/sec(x) * log(sin(x)**2/(cos(x)**2+sin(x)**2)) \bound{f}}
+\spadpaste{g := simplify f\bound{g}\free{f}}
+If the result of \spadfun{simplify} is not satisfactory, specific
+transformations are available.
+For example, to rewrite \spad{g} in terms of secants and
+cosecants instead of sines and cosines, issue:
+%
+\spadpaste{h := sin2csc cos2sec g\bound{h}\free{g}}
+%
+To apply the logarithm simplification rules to \spad{h}, issue:
+\spadpaste{expandLog h\free{h}}
+Since the square root of \spad{x**2} is the absolute value of
+\spad{x} and not \spad{x} itself, algebraic radicals are not
+automatically simplified, but you can specifically request it by
+calling \spadfun{rootSimp}:
+%
+\spadpaste{f1 := sqrt((x+1)**3)\bound{f1}}
+\spadpaste{rootSimp f1\free{f1}}
+%
+There are other transformations which are sometimes useful.
+Use the functions \spadfun{complexElementary} and \spadfun{trigs}
+to go back and forth between the complex exponential and
+trigonometric forms of an elementary function:
+%
+\spadpaste{g1 := sin(x + cos x)\bound{g1}}
+\spadpaste{g2 := complexElementary g1\bound{g2}\free{g1}}
+\spadpaste{trigs g2\free{g2}}
+%
+Similarly, the functions \spadfun{realElementary} and
+\spadfun{htrigs} convert hyperbolic functions in and out of their
+exponential form:
+%
+\spadpaste{h1 := sinh(x + cosh x)\bound{h1}}
+\spadpaste{h2 := realElementary h1\bound{h2}\free{h1}}
+\spadpaste{htrigs h2\free{h2}}
+%
+\Language{} has other transformations, most of which
+are in the packages
+\spadtype{ElementaryFunctionStructurePackage},
+\spadtype{TrigonometricManipulations},
+\spadtype{AlgebraicManipulations},
+and \spadtype{TranscendentalManipulations}.
+If you need to apply a simplification rule not built into the
+system, you can use \Language{}'s \downlink{pattern
+matcher}{ugUserRulesPage}.
+\endscroll
+\autobuttons
+\end{page}