diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/numerica/numerica-plus.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/numerica/numerica-plus.tex | 1973 |
1 files changed, 1973 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/numerica/numerica-plus.tex b/Master/texmf-dist/doc/latex/numerica/numerica-plus.tex new file mode 100644 index 00000000000..049418f1a11 --- /dev/null +++ b/Master/texmf-dist/doc/latex/numerica/numerica-plus.tex @@ -0,0 +1,1973 @@ +%% LyX 2.4.0-alpha1 created this file. For more info, see https://www.lyx.org/. +%% Do not edit unless you really know what you are doing. +\documentclass[english,tableposition=top]{report} +\usepackage{lmodern} +\renewcommand{\sfdefault}{lmss} +\renewcommand{\ttdefault}{lmtt} +\usepackage[T1]{fontenc} +\usepackage{textcomp} +\usepackage[latin9]{inputenc} +\setcounter{secnumdepth}{3} +\usepackage{color} +\definecolor{shadecolor}{rgb}{0.667969, 1, 1} +\usepackage{babel} +\usepackage{array} +\usepackage{wrapfig} +\usepackage{booktabs} +\usepackage{framed} +\usepackage{url} +\usepackage{amsmath} +\usepackage[unicode=true,pdfusetitle, + bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=2, + breaklinks=true,pdfborder={0 0 1},backref=section,colorlinks=true] + {hyperref} + +\makeatletter + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. +%% Because html converters don't know tabularnewline +\providecommand{\tabularnewline}{\\} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands. +\newenvironment{centred}% + {\begin{center}\baselineskip=13pt\parskip=1pt}{\end{center}} +\newenvironment{lyxcode} + {\par\begin{list}{}{ + \setlength{\rightmargin}{\leftmargin} + \setlength{\listparindent}{0pt}% needed for AMS classes + \raggedright + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \normalfont\ttfamily}% + \item[]} + {\end{list}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands. +\usepackage[plus]{numerica} + +\newcommand\rel{\,\varrho\;} +\DeclareMathOperator{\erf}{erf} +\DeclareMathOperator{\gd}{gd} + +\reuse + +\usepackage{upquote} + +\makeatother + +\begin{document} +\title{\texttt{numerica-plus}~\\ +} +\author{Andrew Parsloe\\ +(\url{ajparsloe@gmail.com})} +\maketitle +\begin{abstract} +In this module of the \verb`numerica` package, commands are defined +which iterate and find fixed points of functions of a single variable, +which find the zeros or extrema of such functions, and which calculate +the terms of recurrence relations.\\ +\\ +\noindent\begin{minipage}[t]{1\columnwidth}% +\begin{shaded}% + +\paragraph*{Note:} +\begin{itemize} +\item {\normalsize This document applies to version 1.0.0 of }{\normalsize\texttt{numerica-plus}}{\normalsize .def.}{\small\par} +\item {\normalsize Reasonably recent versions of the \LaTeX 3 bundles }{\normalsize\texttt{l3kernel}}{\normalsize{} +and }{\normalsize\texttt{l3packages}}{\normalsize{} are required.}{\small\par} +\item {\normalsize I refer a number of times in this document to }{\normalsize\emph{Handbook +of Mathematical Functions}}{\normalsize , edited by Milton Abramowitz +and Irene A. Segun, Dover, 1965. This is abbreviated to }{\normalsize\emph{HMF}}{\normalsize .}{\small\par} +\end{itemize} +\end{shaded}% +\end{minipage} +\end{abstract} +\tableofcontents{} + +\chapter{Introduction} + +By calling \texttt{numerica} with the \texttt{plus} package option +in the preamble, +\begin{lyxcode} +\textbackslash usepackage{[}plus{]}\{numerica\} +\end{lyxcode} +a number of additional commands are loaded: +\begin{itemize} +\item \verb`\nmcIterate`, a command to iterate a function (apply it repeatedly +to itself), including finding fixed points (values $x$ where $f(x)=x$); +\item \verb`\nmcSolve`, a command to find the zeros of functions of a single +variable (values $x$ for which $f(x)=0$) or, failing that, local +maxima or minima of such functions; +\item \verb`\nmcRecur`, a command to calculate the values of terms in recurrence +relations in a single (recurrence) variable (like the terms of the +Fibonacci sequence or Legendre polynomials). +\end{itemize} +These commands are defined in the package \texttt{numerica-plus.def} +which is loaded with \texttt{numerica.sty} when the \texttt{plus} +option is used. The new commands all share the syntax of the \verb`\nmcEvaluate` +command. I will discuss them individually in later chapters but turn +first to an example that illustrates their use and gives a sense of +`what they are about'. + +\section{Example of use: the rotating disk} + +\label{sec:introExampleOfUse}Consider a disk rotating uniformly with +angular velocity $\omega$ in an anticlockwise sense in an inertial +system in which the disk's centre \textbf{0} is at rest. Three distinct +points \textbf{1}, \textbf{2}, \textbf{3} are fixed in the disk and, +in a co-rotating polar coordinate system centred at \textbf{0}, have +polar coordinates $(r_{i},\theta_{i})$ ($i,j=1,2,3$). Choose \textbf{01} +as initial line so that $\theta_{1}=0$. + +The cosine rule for solving triangles tells us that the time $t_{ij}$ +in the underlying inertial system for a signal to pass from \textbf{i} +to \textbf{j} satisfies the equation +\[ +t_{ij}=c^{-1}\sqrt{r_{i}^{2}+r_{j}^{2}-2r_{i}r_{j}\cos(\theta_{j}-\theta_{i}+\omega t_{ij})}\equiv f(t_{ij}), +\] +where $c$ is the speed of light. (Equally, we could be describing +an acoustic signal between points on a disk rotating uniformly in +a still, uniform atmosphere \textendash{} in which case $c$ would +be the speed of sound.) Although the equation doesn't solve algebraically +for the time $t_{ij},$ it does tell us that $t=t_{ij}$ is a \emph{fixed +point} of the function $f(t)$. To calculate fixed points we use the +command \verb`\nmcIterate`, or its short-name form \verb`\iter`, +with the star option, \verb`\iter*`. For \verb`\iter` the star option +means: continue iterating until a fixed point has been reached and, +as with the \verb`\eval` command, suppress all elements from the +display save for the numerical result. + +First, though, values need to be assigned to the various parameters. +Suppose we use units in which $c=30,$ $r_{1}=10$ and $r_{3}=20$; +also $\omega=0.2$ radians per second and $\theta_{13}\equiv\theta_{3}-\theta_{1}=0.2$ +radians. We shall give $t$ an initial value $1$ (plucked from the +air). Its position as the rightmost item in the vv-list tells \verb`\iter` +that $t$ is the iteration variable: +\begin{verbatim} + \iter*{ c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega t)} + }[ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2,t=1 ], \quad\info{iter}. +\end{verbatim} +$\Longrightarrow$ \iter*{ c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega t)} + }[ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2,t=1 ], +\quad\info{iter}. The \verb`\nmcInfo` command or, more briefly \verb`\info`, can +be used to display the number of iterations required to attain the +fixed-point value. + +To six figures, only five iterations are needed, which seems rapid +but we can check this by substituting $t=0.356899$ back into the +formula and \verb`\eval`-uating it: +\begin{verbatim} + \eval*{ c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega t)} + }[ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2,t=0.356899 ] +\end{verbatim} +$\Longrightarrow$ \eval*{ c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega t)} + }[ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2,t=0.356899 ], confirming that we have indeed calculated a fixed point. That it +took only $5$ iterations can be checked by omitting the asterisk +from the \verb`\iter` command and specifying the total number of +iterations to perform. I choose \texttt{do=}7 to show not just the +$5$th iteration but also the next two just to confirm that the result +is stable. We shall view all $7$: \texttt{see=7}. I have also suppressed +display of the vv-list by giving the key \texttt{vvd}\emph{ }an empty +value,\footnote{See the associated document \texttt{numerica-basics.pdf}, the chapter +on settings.} since there are too many variables to display on a line: +\begin{verbatim} + \iter[do=7,see=7,vvd=] + {\[ c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega t)} \]} + [ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2,t=1 ] +\end{verbatim} +$\Longrightarrow$ \iter[do=7,see=7,vvd=] + {\[ c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega t)} \]} + [ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2,t=1 ] +\noindent \begin{flushleft} +This display makes clear that on the $5$th iteration, the $6$-figure +value has been attained. +\par\end{flushleft} + +Alternatively, we could use the \verb`\nmcRecur` command, or its +short-name form \verb`\recur`, to view the successive iterations +since an iteration is a first-order recurrence: $f_{n+1}=f(f_{n})$: +\begin{verbatim} + \recur[do=8,see1=0,see2=5,vvd={,\\(vv)\\},*] + {\[ f_{n+1}=c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega f_{n})} \]} + [ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2, f_{0}=1 ] +\end{verbatim} +$\Longrightarrow$ \recur[do=8,see1=0,see2=5,vvd={\\(vv)\\},*] + {\[ f_{n+1}=c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega f_{n})} \]} + [ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2, f_{0}=1 ] + +\noindent I have specified \texttt{do=8} terms rather than $7$ since +the zero-th term ($f_{0}=1$) is included in the count. I've chosen +to view the last $5$ of them but none prior to those by writing \texttt{see1=0,see2=5}. +The vv-list has been suppressed from the display (\texttt{vvd=} ) +and the numerical results forced onto a new line (without an equation +number \textendash{} the \texttt{{*}} in the vv-list). + +Another and perhaps more obvious way to find the value of $t_{13}$, +is to look for a zero of the function $f(t)-t$. That means using +the command \verb`\nmcSolve` or its short-name form \verb`\solve`. +I shall do so with the star option \verb`\solve*` which suppresses +display of all but the numerical result. A trial value for $t$ is +required. I have chosen \texttt{t=0}: +\begin{verbatim} + \solve*{ c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega t)} - t } + [ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2,t=0 ], \quad\nmcInfo{solve}. +\end{verbatim} +$\Longrightarrow$ \solve*{ c^{-1}\sqrt{r_1^2+r_3^2-2r_1 r_3 + \cos(\theta_{13}+\omega t)}-t + }[ c=30,r_1=10,r_3=20,\theta_{13}=0.2, + \omega=0.2,t=0], +\quad\nmcInfo{solve}. + +Nearly the same answer as before is attained but this time many more +steps have been required. This is to be expected. The \verb`\solve` +command uses the bisection method. Since $1/2^{10}\approx1/10^{3}$ +or $10$ bisections for $3$ decimal places, we can expect about $20$ +bisections being needed for a $6$-decimal-place answer. The particular +form of the \verb`\nmcInfo` command display, `$1+20$ steps', indicates +that it took $1$ search step to find an interval in which the function +vanished and, having found that interval, $20$ bisections to narrow +the position of the zero to $6$-figures. + +\subsection{Circuits} + +Okay, so we can calculate the time taken in the underlying inertial +system for a signal to pass from one point of the rotating disk to +another. How long does it take to traverse the circuit \textbf{1} +to \textbf{2} to \textbf{3} back to \textbf{1}? That means forming +the sum $t_{12}+t_{23}+t_{31}$, hence calculating the separate $t_{ij}$ +and then using \verb`\eval` to calculate their sum. + +To make things neater and easier to read, I assume a little symmetry. +Let the coordinates of \textbf{1} be $(a,0),$ of \textbf{2} be $(r,-\theta)$, +and of \textbf{3} be $(r,\theta)$: \textbf{2} and \textbf{3} are +at the same radial distance from the centre \textbf{0} and at the +same angular distance but on opposite sides of the line \textbf{01}, +\textbf{3} an angle $\theta$ ahead of \textbf{1}, \textbf{2} an angle +$\theta$ behind \textbf{1}. The rotation is in the direction of positive +$\theta$. Rather than just calculate $t_{12}+t_{23}+t_{31}$ for +the circuit \textbf{1231}, I also calculate the time $t_{13}+t_{32}+t_{21}$ +for a signal to traverse the opposite circuit \textbf{1321} and compare +them (form the difference). + +Note that with \textbf{2} and \textbf{3} positioned as they are relative +to \textbf{1}, +\[ +t_{31}=c^{-1}\sqrt{r^{2}+a^{2}-2ra\cos(\theta-\omega t_{31})} +\] +and +\[ +t_{12}=c^{-1}\sqrt{a^{2}+r^{2}-2ar\cos(\theta-\omega t_{12})}. +\] +Both $t_{12}$ and $t_{31}$ are fixed points of the same function +\[ +F_{-1}(t)=c^{-1}\sqrt{r^{2}+a^{2}-2ra\cos(\theta-\omega t).} +\] +Similarly, both $t_{13}$ and $t_{21}$ are fixed points of +\[ +F_{+1}(t)=c^{-1}\sqrt{r^{2}+a^{2}-2ra\cos(\theta+\omega t)}. +\] + Geometrically one can show that $t_{31}=t_{12}$ and $t_{13}=t_{21}$. +Analytically, with the values $c=30,a=10,r=20$, +\[ +0<F_{\pm1}(t)\le c^{-1}\sqrt{r^{2}+a^{2}+2ar}=c^{-1}(r+a)=1, +\] +so that we need look for fixed points only in the interval $[0,1]$. +Differentiating $F_{-1}(t)$ shows the derivative is negative on $[0,1]$, +hence that $F_{-1}$ is strictly decreasing there and can intersect +the identity mapping at most once on the interval. Similarly, differentiating +$F_{+1}(t)$ shows the derivative +\[ +\frac{ar\omega\sin(\theta+\omega t)}{c\sqrt{r^{2}+a^{2}-2ar\cos(\theta+\omega t)}} +\] +is positive on $[0,1]$, but with the given values for $c,a$ and +$r$, and with $\theta=0.2,\omega=0.2$, $F'_{+1}(t)<0.1$ on $[0,1]$: +hence $F_{+1}$ increases sufficiently slowly on the interval that +the identity mapping can intersect it at most once there. In both +cases, there can be at most one fixed point. + +It follows that $t_{12}=t_{31}$ and $t_{13}=t_{21}$ and the round +trip times are $2t_{12}+t_{23}$ and $2t_{13}+t_{32}$. + +\subsubsection{Nesting commands} + +The calculation to compare the round trip times can be done `in one +go' by nesting the \verb`\iter*` commands to calculate the $t_{ij}$ +inside an \verb`\eval*` command to form the sum of their results +and then take the difference. +\begin{verbatim} + $ + \eval*{ % circuit 1231 + 2\iter*{ c^{-1}\sqrt{a^2+r^2-2ar + \cos(\theta-\omega t)} } + + \iter*{ c^{-1}\sqrt{2r^2-2r^2 + \cos(2\theta+\omega t)} } + % circuit 1321 + - 2\iter*{ c^{-1}\sqrt{a^2+r^2-2ar + \cos(\theta+\omega t)} } + - \iter*{ c^{-1}\sqrt{2r^2-2r^2 + \cos(2\theta-\omega t)} } + }[ c=30,a=10,r=20,\theta=0.2,\omega=0.2, t=1 ] + $ +\end{verbatim} +$\Longrightarrow$ $ + \eval*{ % circuit 1231 + 2\iter*{ c^{-1}\sqrt{a^2+r^2-2ar + \cos(\theta-\omega t)} } + + \iter*{ c^{-1}\sqrt{2r^2-2r^2 + \cos(2\theta+\omega t)} } + % circuit 1321 + - 2\iter*{ c^{-1}\sqrt{a^2+r^2-2ar + \cos(\theta+\omega t)} } + - \iter*{ c^{-1}\sqrt{2r^2-2r^2 + \cos(2\theta-\omega t)} } + }[ c=30,a=10,r=20,\theta=0.2,\omega=0.2, t=1 ] + $. + +By itself this result is of little interest beyond seeing that \texttt{numerica} +can handle it. What \emph{is} interesting is to find values of $\theta$, +say, given the other parameters and especially the value of $r$, +such that the time difference vanishes. Is there a circuit, despite +the rotation of the disk, such that it takes a signal the same time +to travel in opposite directions around the circuit? That is a job +for \verb`\nmcSolve` (or \verb`\solve`): +\begin{verbatim} + \solve[p=.,var=\theta,vvi=]{$ % circuit 1231 + 2\times\iter*[var=t]{ c^{-1}\sqrt{a^2+r^2-2ar + \cos(\theta-\omega t)} } + + \iter*[var=t]{ c^{-1}\sqrt{2r^2-2r^2 + \cos(2\theta+\omega t)} } + % circuit 1321 + - 2\times\iter*[var=t]{ c^{-1}\sqrt{a^2+r^2-2ar + \cos(\theta+\omega t)} } + - \iter*[var=t]{ c^{-1}\sqrt{2r^2-2r^2 + \cos(2\theta-\omega t)} } + $}[ c=30,a=10,r=20,\theta=0.1,\omega=0.2, {t}=1 ] +\end{verbatim} +$\Longrightarrow$ \solve[p=.,var=\theta,vvi=]{$ % circuit 1231 + 2\times\iter*[var=t]{ c^{-1}\sqrt{a^2+r^2-2ar + \cos(\theta-\omega t)} } + + \iter*[var=t]{ c^{-1}\sqrt{2r^2-2r^2 + \cos(2\theta+\omega t)} } + % circuit 1321 + - 2\times\iter*[var=t]{ c^{-1}\sqrt{a^2+r^2-2ar + \cos(\theta+\omega t)} } + - \iter*[var=t]{ c^{-1}\sqrt{2r^2-2r^2 + \cos(2\theta-\omega t)} } + $}[ c=30,a=10,r=20,\theta=0.1,\omega=0.2, {t}=1 ] + +One point to note here is the use of \verb`\times` (in \verb`2\times\iter*`) +as against the previous example with \verb`\eval*` where \verb`\times` +was not used. In the present case the formula is displayed (\verb`\solve` +wraps around math delimiters); the star on the \verb`\eval` command +in the previous example suppressed display of the formula. Without +the \verb`\times` the `$2$'s would be juxtaposed against the following +decimals, making it look as if the signal travel times were $20.537778$ +and $20.614419$ and no doubt causing perplexity. Also note the \texttt{vvi=} +to suppress display of the vv-list. + +But this is not a research paper on the rotating disk. I wished to +show how the different commands of \texttt{numerica-plus} can be used +to explore a meaningful problem. And although it looks as if a lot +of typing is involved, once $c^{-1}\sqrt{r^{2}+a^{2}-2ra\cos(\theta-\omega t)}$ +has been formed in \LaTeX{} and values specified in the vv-list, much +of the rest is copy-and-paste followed by minor editing. + +\section{Shared syntax of the new commands} + +\texttt{numerica-plus} offers three new commands for three processes: +\verb`\nmcIterate` (short-name form \verb`\iter`) for iterating +functions, \verb`\nmcSolve` (short-name form \verb`\solve`) for +finding the zeros or (local) extrema of functions, and \verb`\nmcRecur` +(short-name form \verb`\recur`) for calculating terms of recurrence +relations. + +All three commands share the syntax of the \verb`\nmcEvaluate` (or +\verb`\eval`) command detailed in the associated document \texttt{numerica-basics.pdf}. +When all options are used then the command looks like +\begin{centred} +\noindent \verb`\nmcIterate*[settings]{expr.}[vv-list][num. format]` +\end{centred} +You can substitute \verb`\nmcSolve`, or \verb`\nmcRecur` for \verb`\nmcIterate` +here. The arguments are similar to those for \verb`\nmcEvaluate`. +\begin{enumerate} +\item \verb`*` optional switch; if present ensures a single number output +with no formatting, or an appropriate error message if the single +number cannot be produced; +\item \verb`[settings]` optional comma-separated list of \emph{key=value +}settings for this particular command and calculation; +\item \verb`{expr.}` the only mandatory argument; the mathematical expression +in \LaTeX{} form that is the object of interest; +\item \verb`[vv-list]` optional comma-separated list of \emph{variable=value +}items; for \verb`\iter` and \verb`\solve` the \emph{rightmost} +(or innermost) variable in the vv-list may have special significance; +\item \verb`[num. format]` optional format specification for presentation +of the numerical result (rounding, padding with zeros, scientific +notation); boolean output is suppressed for these commands. +\end{enumerate} +Boolean output makes little sense for these three commands and is +turned \emph{off}. Entering a question mark in the trailing number-format +option of each command has no effect \textendash{} see §. + +All commands also share with \verb`\nmcEvaluate` changes in the way +the result is displayed depending on whether they wrap around math +delimiters, or are wrapped within math delimiters, or are employed +in the absence of math delimiters. These distinctions are relevant\emph{ +only if the optional star {*} is absent.} +\begin{itemize} +\item When the star option is used, the \emph{result} is a number only without +any formatting or vv-list display, or an error message is displayed. +\item When the star option is not used and one of the following is the case +\begin{itemize} +\item the command wraps around math delimiters, e.g. \verb`\iter{$ expr. $}`, +then the result is displayed in the form \emph{expression~=~result} +or the form \emph{expression~$\rightarrow$~result} as appropriate, +where \emph{result} may be multi-line and may include the vv-list, +\item the command is used within math delimiters, e.g. \verb`\[\iter...\]`, +then only the \emph{result} is presented, where \emph{result} may +be multi-line and may include the vv-list, +\item the command is used in the absence of delimiters, then the result +is presented as if it had been used between \verb`\[` and \verb`\]`. +\end{itemize} +\end{itemize} +Looking at the various examples in the preceding section on the rotating +disk you will see illustrations of all these situations. + +\subsection{Settings} + +\begin{table} +\noindent \centering{}\caption{\protect\label{tab:introSettingsInherited}Inherited settings options} +\noindent \begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}>{\raggedright}p{4cm}} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{dbg}} & {\small int} & {\small debug `magic' integer} & {\small\texttt{0}}\tabularnewline +{\small\texttt{\textasciicircum}} & {\small char} & {\small exponent mark for sci. notation input} & {\small\texttt{e}}\tabularnewline +{\small\texttt{xx}} & {\small int (0/1)} & {\small multi-token variable switch} & {\small\texttt{1}}\tabularnewline +{\small\texttt{()}} & {\small int (0/1/2)} & {\small trig. function arg. parsing} & {\small\texttt{0}}\tabularnewline +{\small\texttt{o}} & & {\small degree switch for trig. funcions} & \tabularnewline +{\small\texttt{log}} & {\small num} & {\small base of logarithms for }{\small{\small\verb`\log`}} & {\small\texttt{10}}\tabularnewline +{\small\texttt{vvmode}} & {\small int (0/1)} & {\small vv-list calculation mode} & {\small\texttt{0}}\tabularnewline +{\small\texttt{vvd}} & {\small tokens} & {\small vv-list display-style spec.} & {\small\texttt{\{,\}\textbackslash mskip 12mu plus 6mu minus 9mu(vv)}}\tabularnewline +{\small\texttt{vvi}} & {\small token(s)} & {\small vv-list text-style spec.} & {\small\texttt{\{,\}\textbackslash mskip 36mu minus 24mu(vv)}}\tabularnewline +{*} & & {\small suppress equation numbering if }{\small\texttt{\textbackslash\textbackslash}}{\small{} +in }{\small\texttt{vvd}} & \tabularnewline +{\small\texttt{p}} & char(s) & {\small punctuation (esp. in display-style)} & {\small\texttt{, (comma)}}\tabularnewline +{\small\texttt{S+}} & {\small int} & {\small extra rounding for stopping criterion for sums} & {\small\texttt{2}}\tabularnewline +{\small\texttt{S?}} & {\small$\text{int}\ge0$} & {\small stopping criterion query terms for sums} & {\small\texttt{0}}\tabularnewline +{\small\texttt{P+}} & {\small int} & {\small extra rounding for stopping criterion for products} & {\small\texttt{2}}\tabularnewline +{\small\texttt{P?}} & {\small$\text{int}\ge0$} & {\small stopping criterion query terms for products} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} +Nearly all the settings available to the \verb`\eval` command are +available to these other commands. To save switching between documents +I reproduce in Table~\ref{tab:introSettingsInherited} the options +found in \texttt{numerica-basics.pdf}, although for discussion of +the options you will need to refer to that document. In addition, +each of the present commands also has settings of its own, discussed +at the relevant parts of the following chapters. + +\subsection{Nesting} + +Provided the starred form of a command actually does produce a numerical +result and not an error message then it can be nested within the main +argument of any one of the commands, including itself. The example +of use, §\ref{sec:introExampleOfUse} above, shows several examples +of this. The starred form can also be used in the vv-list of any one +of the commands, including itself. The associated document \texttt{numerica-basics.pdf} +shows examples of an \verb`\eval*` command being used in the vv-list +of an \verb`\eval` command. + +\chapter{Iterating functions: \texttt{\textbackslash nmcIterate}} + +\label{chap:Iterating-functions}Only in desperation would one try +to evaluate a continued fraction by stacking fraction upon fraction +upon fraction like so: +\[ +1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{1}}}}}}}}}}}} +\] +\texttt{numerica-plus} provides a command for tackling problems like +this sensibly. In such problems a function is repeatedly applied to +itself (\emph{iterated}). This can be achieved in \texttt{numerica} +through the command \verb`\nmcIterate` or (short-name form) \verb`\iter`. +Thus to evaluate this continued fraction we write +\begin{centred} +\verb`\iter[do=15,see=5]{\[ 1+1/x \]}[x=1]` $\Longrightarrow$ \iter[do=15,see=5]{\[ 1+1/x \]}[x=1] +\end{centred} +The \verb`\iter` command evaluates $1+1/x$ when $x=1$ and then +uses this value as a new $x$-value to substitue into $1+1/x$, to +once again evaluate and use as a new $x$-value, and so on. It looks +as if the repeated iterations are approaching \verb`\eval{$ \tfrac{\sqrt{5}+1}2 $}` +$\Longrightarrow$ \eval{$ \tfrac{\sqrt{5}+1}2 $}. + +Increasing the number of iterations in the example from \texttt{do=15} +to, say, \texttt{do=18}, shows that this is indeed the case. I've +taken the opportunity to also put a question mark in the number-format +option to get boolean output in order to show that it has \emph{no} +effect: +\begin{centred} +\verb`\iter[do=18,see=5]{\[ 1+1/x \]}[x=1][?]` $\Longrightarrow$ +\iter[do=18,see=5]{\[ 1+1/x \]}[x=1][?] +\end{centred} +But iteration of functions is not limited to continued fractions. +Particularly since the emergence of chaos theory, iteration has become +an important study in its own right. Any function whose range lies +within its domain can be iterated \textendash{} repeatedly applied +to itself. The cosine, for instance, +\begin{centred} +\verb`\iter[do=20,see=4]{\[ \cos x \]}[x=\pi/2]` $\Longrightarrow$ +\iter[do=20,see=4]{\[ \cos x \]}[x=\pi/2] +\end{centred} +which displays the first one and last four of 20 iterations of $\cos x$ +when $x=\tfrac{\pi}{2}$. It looks as if the cosine is `cautiously' +approaching a limit, perhaps around $0.738$ or $0.739$. You need +to nearly double the number of iterations (\texttt{do=40}) to confirm +that this is so. + +The logistic function $kx(1-x)$ exhibits a variety of behaviours +depending on the value of $k$. For instance, with $k=3.5$ we get +a period-4 cycle: +\begin{centred} +\verb`\iter[do=12,see=8]{\[ kx(1-x) \]}[k=3.5,x=0.5]` $\Longrightarrow$ + \iter[do=12,see=8]{\[ kx(1-x) \]}[k=3.5,x=0.5] +\end{centred} +and with $k=3.1$ we get a period-2 cycle, although it takes many +more iterations to stabilize there: +\begin{centred} +\verb`\iter[do=44,see=8]{\[ kx(1-x) \]}[k=3.1,x=0.5]` $\Longrightarrow$ +\iter[do=44,see=8]{\[ kx(1-x) \]}[k=3.1,x=0.5] +\end{centred} + +\section{Star (\texttt{{*}}) option: fixed points} + +In the first two of these examples, iteration eventually ended at +a \emph{fixed point}. This is a point $x$ where $f(x)=x$ and, by +induction, $f^{n}(x)=x$. Appending a star (asterisk) to the \verb`\iter` +command is the signal for iteration to continue until a fixed point +has been reached at the specified rounding value: +\begin{centred} +\verb`\iter*{ 1+a/x }[a=n(n+1),n=1,x=1]` $\Longrightarrow$ \iter*{ 1+a/x }[a=k(k+1),k=1,x=1] +\end{centred} +(with the default rounding value $6$).\footnote{For your own interest try also putting $n=2,3,4,\ldots$ .} +The star overrides any value for the number of iterations to perform +(the \texttt{do} key) that may have been entered in the settings option. +It also overrides any elements of the display other than the numerical +result. With the star option math delimiters are irrelevant \textendash{} +other than displaying minus signs correctly when \verb`\iter*` is +between them. + +A function may not approach a fixed point when iterated \textendash{} +see the examples with the logistic function above. To prevent an infinite +loop \verb`\iter*` counts the number of iterations performed and +when that number reaches a certain cut-off value \textendash{} the +default is $100$ \textendash{} the loop terminates and a message +is displayed: +\begin{centred} +\verb`\iter*{kx(1-x)}[k=3.5,x=0.5]` $\Longrightarrow$ \iter*{kx(1-x)}[k=3.5,x=0.5] +\end{centred} +In this case we \emph{know} that a fixed point does not exist, but +that may not always be the case. One response is to change parameter +values or starting value of the iteration variable. For instance, +changing the parameter value to $k=1.5$, +\begin{centred} +\verb`\iter*{kx(1-x)}[k=1.5,x=0.5]` $\Longrightarrow$ \iter*{kx(1-x)}[k=1.5,x=0.5], +\end{centred} +and a fixed point is now attained. + +But should a fixed point still not eventuate after `fiddling' with +parameter and start values, there are two general adjustments one +might try: either +\begin{enumerate} +\item reduce the rounding value, from the default $6$ (or the one specified), +to a smaller value, or +\item increase the cut-off figure from the default 100 to some higher value. +\end{enumerate} +The former is done via the trailing \verb`[num format]` optional +argument; the latter is done via the settings option, see §\ref{sec:iterSettings-option}. + +\subsection{Use with \texttt{\textbackslash nmcInfo}} + +It is of interest to know how many iterations are required to reach +a fixed point at a particular rounding value. That knowledge allows +a good guess as to whether a fixed point will be attained at a greater +rounding value. Thus when iterating the function +\[ +f(t_{ij})=c^{-1}\sqrt{r_{i}^{2}+r_{j}^{2}-2r_{i}r_{j}\cos(\theta_{j}-\theta_{i}+\omega t_{ij})} +\] +in §\ref{sec:introExampleOfUse} only $5$ iterations were required +to attain $6$-figure accuracy for the fixed point. That information +came by following the \verb`\iter*` command with \verb`\nmcInfo` +(or \verb`\info`) with the argument \verb`iter`. And generally, +for any `infinite' process, follow the command with an \verb`\info` +command if you want to know how many `steps' \textendash{} in the +present case iterations \textendash{} are required to achieve the +result. So, if $5$ iterations achieve $6$-figure accuracy, presumably +something like $10$ iterations will achieve $12$-figure accuracy: +\begin{verbatim} + \iter*{ c^{-1}\sqrt{r_i^2+r_j^2-2r_i r_j + \cos(\theta_{ij}+\omega t)} + }[ c=30,r_i=10,r_j=20,\theta_{ij}=0.2, + \omega=0.2,t=1 ][12], + \quad\info{iter}. +\end{verbatim} +$\Longrightarrow$ \iter*{ c^{-1}\sqrt{r_i^2+r_j^2-2r_i r_j + \cos(\theta_{ij}+\omega t)} + }[ c=30,r_i=10,r_j=20,\theta_{ij}=0.2, + \omega=0.2,t=1 ][12], +\quad\info{iter}. Only $9$ iterations suffice to achieve $12$-figure accuracy. Or +again, with another earlier example, +\begin{centred} +\verb`$ \iter*{\cos x}[x=\pi/2] $,\ \info{iter}.` $\Longrightarrow$ +$\iter*{\cos x}[x=\pi/2] $,\ \info{iter}. +\end{centred} +That suggests that around $74$ iterations will give $12$-figure +accuracy, well within the cut-off figure of $100$: +\begin{centred} +\verb`$ \iter*{\cos x}[x=\pi/2][12] $,\ \info{iter}.` $\Longrightarrow$ +$\iter*{\cos x}[x=\pi/2][12] $,\ \info{iter}. +\end{centred} + +\section{Settings option} + +\label{sec:iterSettings-option}The settings option is a comma-separated +list of items of the form \emph{key~=~value}. + +\subsection{Inherited settings} + +Nearly all of the keys discussed in the settings\emph{ }option for +\verb`\nmcEvaluate` are available for \verb`\nmcIterate`. Table~\ref{tab:introSettingsInherited} +above lists these, repeating a table from \texttt{numerica-basics.pdf}. +Thus should a quantity in the vv-list depend on the iteration variable, +forcing an implicit mode calculation, simply enter (as with \verb`\eval`) +\texttt{vvmode=1} in the settings option: +\begin{centred} +\verb`\iter*[vvmode=1]{$ 1+f(x) $}[f(x)=a/x,a=12,x=1]` $\Longrightarrow$ +\iter*[vvmode=1]{$ 1+f(x) $}[f(x)=a/x,a=12,x=1]. +\end{centred} +Implicit in this example is the default multi-token setting \texttt{xx=1} +inherited from \verb`\eval` and ensuring that the multi-token variable +$f(x)$ is treated correctly. + +Let's add \verb`dbg=1` to the example: +\begin{centred} +\verb`\iter*[dbg=1,vvmode=1]{$ 1+f(x) $}[f(x)=a/x,a=12,x=1]` $\Longrightarrow$ +\iter*[dbg=1,vvmode=1]{$ 1+f(x) $}[f(x)=a/x,a=12,x=1] +\end{centred} +The multi-token variable \verb`f(x)` has been changed to the single-token +\verb`\_nmcu`. The values of \verb`x` and \verb`\_nmcu` shown are +those of the \emph{final} iteration. + +\subsection{\texttt{\textbackslash iter}-specific settings} + +In addition to the inherited settings there are some specific to \verb`\nmcIterate`. +These are listed in Table~\ref{tab:iterSettings}. + +\subsubsection{Iteration variable} + +In nearly all of the examples so far, the iteration variable has been +the rightmost variable in the vv-list and has not needed to be otherwise +specified. However it is sometimes not feasible to indicate the variable +in this way. In that case, entering +\begin{lyxcode} +var~=~<variable~name> +\end{lyxcode} +in the settings option enables the variable to be specified, irrespective +of what the rightmost variable in the vv-list is. Here, \texttt{<variable +name>} will generally be a character like \texttt{x} or \texttt{t} +or a token like \verb`\alpha`, but it could also be a multi-token +name like {\ttfamily\verb`x'`}\texttt{ }or \texttt{\textbackslash beta\_\{ij\}} +(or even \texttt{Fred} if you so chose). Although the iteration variable +can be independently specified like this, it must still be given an +initial \emph{value} in the vv-list \textendash{} only it need not +be the rightmost variable. + +In the following example the rightmost variable is $a$ which is clearly +\emph{not} the iteration variable: +\begin{centred} +\verb`\iter[var=x'',do=40,see=5]{$ 1+a/x'' $}[x''=a/6,a=6][*]` $\Longrightarrow$ +\iter[var=x'',do=40,see=5]{$ 1+a/x'' $}[x''=a/6,a=6][*] +\end{centred} + +\subsubsection{Extra rounding for fixed-point calculations} + +\begin{table} +\centering{}\caption{\protect\label{tab:iterSettings}Settings for \texttt{\textbackslash nmcIterate}} +\begin{center} +\begin{tabular}{llll} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{var}} & {\small token(s)} & {\small iteration variable} & \tabularnewline +{\small\texttt{+}} & {\small int} & {\small fixed point extra rounding} & {\small\texttt{0}}\tabularnewline +{\small\texttt{max}} & {\small int > 0} & {\small max. iteration count (fixed points)} & {\small\texttt{100}}\tabularnewline +{\small\texttt{do}} & {\small int > 0} & {\small number of iterations to perform} & {\small\texttt{5}}\tabularnewline +{\small\texttt{see}} & {\small int > 0} & {\small number of final iterations to view} & {\small\texttt{4}}\tabularnewline +{\small\texttt{reuse}} & {\small int ($\mathtt{0}/\mathtt{1}/\mathtt{2}$)} & {\small form of result saved with }{\small{\small\verb`\reuse`}} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} +\texttt{numerica} determines that a fixed point has been reached when +the difference between successive iterations vanishes when rounded +to the current rounding value. One might want reassurance that this +really is the correct value by seeking a fixed point at a higher rounding +value than that displayed. This extra rounding is achieved by entering +\begin{lyxcode} ++~=~<integer> +\end{lyxcode} +in the settings option. By default this extra rounding is set to zero. + +We have seen before that $\cos x$ starting at $x=\tfrac{1}{2}\pi$ +takes $37$ iterations to reach a $6$-figure fixed point $0.739085$, +about $6$ iterations per decimal place. By entering \texttt{+=1} +in the settings option the number of iterations is increased to $43$, +$6$ more than $37$ but, reassuringly, the $6$-figure result that +is displayed remains unchanged: +\begin{centred} +\verb`$ \iter*[+=1]{\cos x}[x=\pi/2] $,\ \info{iter}.` $\Longrightarrow$ +$ \iter*[+=1]{\cos x}[x=\pi/2] $,\ \info{iter}. +\end{centred} + +\subsubsection{Maximum {\small iteration count for fixed point searches}} + +To prevent a fixed-point search from continuing indefinitely when +no fixed point exists, there needs to be a maximum number of iterations +specified after which point the search is called off. By default this +number is $100$. To change it enter +\begin{lyxcode} +max~=~<positive~integer> +\end{lyxcode} +in the settings option. + +\subsubsection{Number of iterations to perform} + +To specify the number of iterations to perform enter +\begin{lyxcode} +do~=~<positive~integer> +\end{lyxcode} +in the settings option. Note that if the \verb`*` option is present +this value will be ignored and iteration will continue until either +a fixed point or the maximum iteration count is reached. By default +\texttt{do} is set to $5$. (Note that \texttt{do} can be set to a +greater number than \texttt{max}; \texttt{max} applies only to \verb`\iter*`.) + +\subsubsection{Number of iterations to view} + +To specify the number of final iteations to view enter +\begin{lyxcode} +see~=~<positive~integer> +\end{lyxcode} +in the settings option. By default \texttt{see} is set to $4$. Always +it is the \emph{last} \texttt{see} iterations that are displayed. +If \texttt{see} is set to a greater value than \texttt{do}, all iterations +are shown. If the star option is used the \texttt{see} value is ignored. + +\subsubsection{Form of result saved by \texttt{\textbackslash reuse}} + +By entering +\begin{lyxcode} +reuse~=~<integer> +\end{lyxcode} +in the settings option of the \verb`iter` command it is possible +to specify the form of result that is saved when using \verb`\nmcReuse`. +(This setting has no effect when the star option is used with \verb`\nmcIterate`. +In that case only the numerical result of the fixed point calculation +\textendash{} if successful \textendash{} is saved.) The possibilities +are: +\begin{itemize} +\item \texttt{int=0} (or any integer $\mathtt{\ne1,2}$) saves the display +resulting from the \verb`\iter` command (the default); +\item \texttt{int=1} saves a comma-separated list of pairs of the form:\texttt{ }~\\ +\texttt{\{$k$, value-of-$k$-th-iterate\}}; +\item \texttt{int=2} saves a comma-separated list of iterate values. +\end{itemize} +Note that the number and content of the items in the lists are those +resulting from the \texttt{see} setting (the number of iterations +to view). +\begin{verbatim} + \iter[reuse=1,do=12,see=4] + {\[ kx(1-x) \]}[k=3.5,x=0.5] + \reuse[logistic] +\end{verbatim} +$\Longrightarrow$ \iter[reuse=1,do=12,see=4]{\[ kx(1-x) \]}[k=3.5,x=0.5] \reuse[logistic] + +\noindent whence \verb`\logistic` $\Longrightarrow$ \logistic. +As you can see the control sequence \verb`\logistic` displays as +a comma-separated list of numbers, alternating between the ordinal +of the iterate, and the iterate value. In fact these values are grouped +as braced pairs separated by commas in \verb`\logistic`, as can be +seen by using \TeX 's \verb`\meaning` command: +\begin{centred} +\verb`\meaning\logistic` $\Longrightarrow$ \meaning\logistic +\end{centred} + +\subsection{Changing default values} + +\begin{wraptable}[12]{o}{0.5\columnwidth}% +\centering{}\caption{\protect\label{tab:iterSettingsDefaults}Defaults for \texttt{\textbackslash nmcIterate}} +\begin{center} +\begin{tabular}{ll} +\toprule +{\small key} & {\small default}\tabularnewline +\midrule +{\small iter-extra-rounding} & {\small\texttt{0}}\tabularnewline +{\small iter-max-iterations} & {\small\texttt{100}}\tabularnewline +{\small iter-do} & {\small\texttt{5}}\tabularnewline +{\small iter-see-last} & {\small\texttt{4}}\tabularnewline +{\small iter-reuse} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center}\end{wraptable}% +If you wish to change the default values of the various settings for +\verb`\nmcIterate` this can be done by entering new values in a configuration +file \texttt{numerica.cfg} as described in the chapter on settings +in the associated document \texttt{numerica-basics.pdf}. The relevant +keys are listed in Table~\ref{tab:iterSettingsDefaults}, corresponding +to the \verb`+`, \verb`max`, \verb`do`, \verb`see` and \verb`reuse` +settings of the \verb`\iter` command. (Obviously it makes no sense +to have a default setting for the iteration variable. That will change +from case to case.) + +\section{Errors} + +By errors I refer to \texttt{numerica} errors rather than \LaTeX{} +errors. We have already met one in the discussion of fixed points: +\begin{centred} +\verb`\iter*{kx(1-x)}[k=3.5,x=0.5]` $\Longrightarrow$ \iter*{kx(1-x)}[k=3.5,x=0.5] +\end{centred} +For a function to be iterated indefinitely, its range must lie within +or be equal to its domain. If even part of the range of a function +lies outside its domain, then on repeated iteration there is a chance +that a value will eventually be calculated which lies in this `outside' +region. Iteration cannot continue beyond this point and an error message +is generated. As an example consider the inverse cosine, \verb`\arccos`. +This can be iterated only so far as the iterated values lie between +$\pm1$ inclusive. If we try to iterate \verb`\arccos` at 0 for example, +since $\cos\frac{1}{2}\pi=0$, $\arccos0=\eval{0.5\pi}[4]$ (which +is $\tfrac{1}{2}\pi$) so only a first iterate is possible. But we +could choose an initial value more carefully; $37$ iterations of +the cosine at $\tfrac{1}{2}\pi$ led to a fixed point $0.739085$, +so let's choose $0.739085$ as initial point and perform $37$ iterations: +\begin{centred} +\verb`\iter[do=37,see=4]{\[ \arccos x \]}[x=0.739085]` $\Longrightarrow$ +\iter[do=37,see=4]{\[ \arccos x \]}[x=0.739085] +\end{centred} +The result of the $37$th iteration is greater than $1$. Thus increasing +the number of iterations to 38 should generate an error message: +\begin{centred} +\verb`\iter[do=38,see=4]{\[ \arccos x \]}[x=0.739085]` $\Longrightarrow$\iter[do=38,see=4]{\[ \arccos x \]} [x=0.739085] +\end{centred} +\verb`l3fp` objects when asked to find the inverse cosine of a number +greater than $1$. + +\chapter{Finding zeros and extrema: \texttt{\textbackslash nmcSolve}} + +\texttt{numerica} provides a command\textbf{ }\verb`\nmcSolve` (short-name +form \verb`\solve`) for finding a zero of a function, should it have +one. In the following example, +\begin{centred} +\verb`\solve[p]{\[ e^{ax}-bx^2 \]}[a=2,b=3,{x}=0]` $\Longrightarrow$ +\solve[p]{\[ e^{ax}-bx^2 \]}[a=2,b=3,{x}=0] +\end{centred} +I have sought and found a solution $x$ to the equation $e^{ax/2}-bx^{2}=0$ +when $a=2$ and $b=3$, starting with a trial value $x=0$, entered +as the \emph{rightmost} variable in the vv-list (and em-braced since +I don't want this trial value displaying in the presentation of the +result). Although $x$ has been found to the default six-figure accuracy, +it is evident that the function vanishes only to five figures. Let's +check: +\begin{centred} +\verb`\eval{$ bx^2 $}[b=3,x=x=-0.390647]` $\Longrightarrow$ \eval{$ bx^2 $}[b=3,x=-0.390647], + +\verb`\eval{$ e^{ax} $}[a=2,x=-0.390646]` $\Longrightarrow$ \eval{$ e^{ax} $}[a=2,x=-0.390647]; +\end{centred} +the values agree save in the final digit. + +This discrepancy in the final decimal place or places is a general +feature of solutions found by \verb`\solve`. It is the value of $x$, +not the value of $f(x)$, that is being found (in this case) to six +figures. If the graph of a function crosses the $x$-axis steeply +then the $x$ value (the zero) may be located to a higher precision +than the function value. Conversely, if the graph of a function crosses +the $x$-axis gently (at a shallow angle) then the function value +will vanish to a greater number of decimal places than the zero (the +$x$ value) is located. + +A second example, which we can check with values tabulated in \emph{HMF}, +is +\begin{centred} +\verb`\solve{$ \tan x - \lambda x $}[\lambda=-1/0.8,{x}=1][5]` $\Longrightarrow$ +\solve{$ \tan x - \lambda x $}[\lambda=-1/0.8,{x}=1][5]. +\end{centred} +Table 4.19 of \emph{HMF }lists values of $x$ against $\lambda$ and +this is the value tabulated there. + +\section{Extrema} + +A function may not have a zero or for the given initial trial value +and initial step in the search for a zero there may be a local extremum +in the way. In that case \texttt{numerica} may well locate the local +extremum (maximum or minimum but not a saddle point). For example +for the quadratic $(2x-1)^{2}+3x+1$ the \verb`\solve` command gives +the result +\begin{centred} +\verb`\solve[vvi=]{$ (2x-1)^2+3x+1 $}[x=2]` $\Longrightarrow$\solve[vvi=]{$ (2x-1)^2+3x+1 $}[{x}=2]. +\end{centred} +Since $(2x-1)^{2}+3x+1\ne0$ for any (real number) $x$, we deduce +that the quadratic takes a minimum value $1.9375$ at $x=0.125$ \textendash{} +easily confirmed analytically. This particular minimum is a global +minimum but in general any extremum found is only \emph{local}. The +function may well take larger or smaller values (or vanish for that +matter) further afield. + +It is also worth noting in this example the \verb`vvi=` in the settings +option which suppresses display of the vv-list. (The only member of +the vv-list is the trial value \verb`x=2` which we do not want to +display.) + +\noindent\begin{minipage}[t]{1\columnwidth}% +\begin{shaded}% +Note that the function for which a zero is being sought is \emph{not} +equated to zero when entered in the \verb`\solve` command. It is +\verb`\solve{ f(x) }`, not \verb`\solve{ f(x)=0 }`. This is precisely +because it may be an extremum that is found rather than a zero (if +extremum or zero is found at all \textendash{} think $e^{x}$). The +display of the result makes clear which is which, equating $f(x)$ +to its value, zero or extremum depending on what has been found, as +you can see in the preceding examples.\end{shaded}% +\end{minipage} + +\subsection{The search strategy} + +\label{subsec:solveSearch-strategy}If you have some sense of where +a function has a zero, then choose a trial value in that vicinity. +\verb`\solve` uses a bisection method to home in on the zero. It +therefore needs \emph{two} initial values. For the first it uses the +trial value you specify, call it $a$ and for the second, by default, +it uses $a+1$. (The default value $1$ for the initial step from +the trial value can be changed in the settings option; see §\ref{sec:solveSettings-option}.) +If $f(a)$ and $f(a+1)$ have opposite signs then that is good. Bisection +of the interval $[a,a+1]$ can begin immediately in order to home +in on the precise point where $f$ vanishes. Write $b=a+1$. +\begin{itemize} +\item Let $c=\tfrac{1}{2}(a+b)$; if $f(c)=0$ the zero is found; otherwise +either $f(a),f(c)$ are of opposite signs or $f(c),f(b)$ are of opposite +signs. In the former case write $a_{1}=a,$ $b_{1}=c$; in the latter +case write $a_{1}=c$, $b_{1}=b$ and then redefine $c=\tfrac{1}{2}(a_{1}+b_{1})$. +Continue the bisection process, either until an exact zero $c$ of +$f$ is reached ($f(c)=0$) or a value $c$ is reached where the difference +between $a_{n+1}$ and $b_{n+1}$ is zero at the specified rounding +value. (But note, $f(c)$ may not vanish at that rounding value \textendash{} +the zero might be elsewhere in the interval and $f$ might cross the +axis at a steep slope.) +\end{itemize} +However $f(a)$ and $f(b)=f(a+1)$ may not have opposite signs. If +we graph the function $y=f(x)$ and suppose $f(a),f(b)$ are distinct +but of the same sign, then the line through the points $(a,f(a))$, +$(b,f(b))$ will intersect the $x$-axis to the left of $a$ or the +right of $b$ depending on its slope. We search always \emph{towards +the $x$-axis} in steps of $b-a$ ($=1$ with default values). +\begin{itemize} +\item If the line intersects the axis to the left of $a$ then $c=a-(b-a)$ +and we set $a_{1}=c,b_{1}=a$; if the line intersects the axis to +the right of $b$ then $c=b+(b-a)$ and we set $b_{1}=c,a_{1}=b$. +The hope is that by always taking steps in the direction towards the +$x$-axis that eventually $f(c)$ will be found to lie on the \emph{opposite} +side of the axis from $f(a_{n})$ or $f(b_{n})$, at which point the +bisection process begins. +\item Of course this may not happen. At some point $c$ may lie to the left +of $a_{n}$ but $\left|f(c)\right|>\left|f(a_{n})\right|$, or $c$ +may lie to the right of $b_{n}$ but $\left|f(c)\right|>\left|f(b_{n})\right|$. +The slope has reversed. In that case we halve the step value to $\tfrac{1}{2}(b-a)$ +and try again in the same direction as before from the same point +as before ($a_{n}$ or $b_{n}$ as the case may be). +\item Should we find at some point that $f(a_{n})=f(b_{n})$ then the previous +strategy does not apply. In this case we choose $a_{n+1}$ and \textbf{$b_{n+1}$} +at the quarter and three-quarter marks between $a_{n}$ and $b_{n}$. +Either $f(a_{n+1})$ and $f(b_{n+1})$ will differ and the previous +search strategy can start again or we are on the way to finding an +extremum of $f$. +\end{itemize} +As already noted it is also possible that our function has neither +zeros nor extrema. To prevent the search continuing indefinitely, +\texttt{numerica} uses a cut-off value for the maximum number of steps +pursued \textendash{} by default set at 100. + +\subsubsection{Elusive extrema} + +The strategy `search always towards the $x$-axis' has a consequence: +it means that a local maximum above the $x$-axis will almost certainly +not be found, since `towards the $x$-axis' pulls the search away +from the maximum. Similarly a local minimum below the $x$-axis will +also not be found since `towards the $x$-axis' pulls the search +away from the minimum. + +One way of countering this elusiveness is to add a constant value +(possibly negative) to the function whose zeros and extrema are being +sought. The zeros of the function will change but the abscissae ($x$ +values) of the extrema remain unchanged. If the constant is big enough +it will push a local minimum above the axis where it can be found +or, for a negative constant, push a local maximum below the axis where +it can be found. + +For example $f(x)=x^{3}-x$ has roots at $-1,0,1$, a local maximum +at $-\tfrac{1}{\surd3}$ and a local minimum at $\tfrac{1}{\surd3}$. +To locate the minimum, I have added an unnecessarily large constant +$k$ to $f(x)$. ($k=1$ would have sufficed, but note, $k=0$ fails.) +\begin{centred} +\verb`\solve{$ x^3-x+k $}[k=5,{x}=0.5]` $\Longrightarrow$ \solve{$ x^3-x+k $}[k=5,{x}=0.5]. +\end{centred} +Checking, \verb`\eval{$\tfrac1{\surd 3}$}` $\Longrightarrow$ \eval{$\tfrac1{\surd 3}$}. +There is a discrepancy in the $6$th decimal place which can be eliminated +by using the extra rounding setting; see §\ref{subsec:solveExtraRounding}. + +\section{Star (\texttt{{*}}) option} + +A starred form of the\textbf{ }\verb`\nmcSolve` command suppresses +all elements of display of the result apart from the numerical value. +When nesting a \verb`\solve` command within another command this +is the form to use. Thus with the `elusive' extremum example above, +we can find the actual value of the minimum by nesting the starred +\verb`\solve` command within the vv-list of an \verb`\eval` command: +\begin{centred} +\verb`\eval{$ x^3-x $}[x={\solve*{y^3-y+k}[k=5,y=0.5]}]` $\Longrightarrow$ +\eval{$ x^3-x $}[x={\solve*{y^3-y+k}[k=5,y=0.5]}]. +\end{centred} +(Note the braces around the \verb`\solve*` and arguments to hide +\emph{its} square-bracketed vv-list from the parsing of the vv-list +of the \verb`\eval` command.) The result is to be compared with \verb`$\eval*{x^3-x}[x=\tfrac1{\surd3}]$` +$\Longrightarrow$ $\eval*{x^3-x}[x=\tfrac1{\surd3}]$. + +\section{Settings option} + +\label{sec:solveSettings-option}The settings option is a comma-separated +list of items of the form \emph{key~=~value}. + +\subsection{Inherited settings} + +The keys discussed in the settings\emph{ }option for \verb`\nmcEvaluate` +are also available for \verb`\nmcSolve`. The very first example in +this chapter used the punctuation option \texttt{p} (\verb`\solve[p]{\[... `) +inherited from the \verb`\eval` command to ensure a comma after the +display-style presentation of the result. We also saw in the quadratic +example illustrating extrema the use of \texttt{vvi} with no value +to suppress display of the vv-list: \verb`\solve[vvi=]{$ ...`. + +Putting \verb`dbg=1` produces a familiar kind of display. Using the +function +\[ +ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} +\] +from the rotating disk problem, +\begin{verbatim} + \solve[dbg=1,var=t,p=.,vvd={,}\\(vv)\\,*] + {$ ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} + $}[c=30,a=10,b=20,\beta=1,\omega=0.1,{t}=0][4] +\end{verbatim} +$\Longrightarrow$ \solve[dbg=1,var=t,p=.,vvd={,}\\(vv)\\,*] + {$ ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} + $}[c=30,a=10,b=20,\beta=1,\omega=0.1,{t}=1][4] + +\subsubsection{Multi-line display of the result} + +\label{subsec:solveMulti-line-display}By default the result is presented +on a single line. Unless the star option is being used, this can be +of the form \emph{function = function value, (vv-list) $\rightarrow$ +result}. It takes only a slightly complicated formula and only a few +variables in the vv-list before this becomes a crowded line, likely +to exceed the line width and extend into the margin. To split the +display over two lines choose a \texttt{vvd} specification in the +vv-list like, for instance, \texttt{vvd=\{,\}\textbackslash\textbackslash (vv)}. +The \texttt{\textbackslash\textbackslash} is a trigger for \texttt{numerica} +to replace whatever environment the \texttt{\textbackslash eval} +command is wrapped around with a \texttt{multline} environment. An +asterisk in the vv-list replaces \texttt{multline} with \texttt{multline{*}} +so that no equation number is used: +\begin{verbatim} + \solve[p=.,vvd={,}\\(vv),*] + {$ ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} + $}[c=30,a=10,b=20,\beta=1,\omega=0.1,{t}=0][4] +\end{verbatim} +$\Longrightarrow$ \solve[p=.,vvd={,}\\(vv),*] + {$ ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} + $}[c=30,a=10,b=20,\beta=1,\omega=0.1,{t}=0][4] +\begin{verbatim} + +\end{verbatim} +You could introduce a third line if you wished to display the result +on a line of its own by using the spec. \texttt{vvd=\{,\}\textbackslash\textbackslash (vv)\textbackslash\textbackslash}: +\begin{verbatim} + \solve[p=.,vvd={,}\\(vv)\\,*] + {$ ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} + $}[c=30,a=10,b=20,\beta=1,\omega=0.1,{t}=0][4] +\end{verbatim} +$\Longrightarrow$ \solve[p=.,vvd={,}\\(vv)\\,*] + {$ ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} + $}[c=30,a=10,b=20,\beta=1,\omega=0.1,{t}=0][4] + +The function evaluates to $-0.0015$. Is this a zero that has been +found or an extremum? To find out, the calculation needs to be carried +out to a higher rounding value which is the reason why \verb`\nmcSolve` +has an extra rounding setting; see §\ref{subsec:solveExtraRounding} +below. + +\subsection{\texttt{\textbackslash solve}-specific settings} + +In addition there are some settings peculiar to \verb`\nmcSolve`. +These are listed in Table~\ref{tab:solveSettings}. + +\begin{table} +\centering{}\caption{\protect\label{tab:solveSettings}Settings for \texttt{\textbackslash nmcSolve}} +\begin{center} +\begin{tabular}{llll} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{var}} & {\small token(s)} & {\small equation variable} & \tabularnewline +{\small\texttt{dvar}} & {\small real $\ne0$ } & {\small initial step size} & {\small\texttt{1}}\tabularnewline +{\small\texttt{+}} & {\small int} & {\small extra rounding} & {\small\texttt{0}}\tabularnewline +{\small\texttt{max}} & {\small int > 0} & {\small max. number of steps before cut off} & {\small\texttt{100}}\tabularnewline +{\small\texttt{reuse}} & {\small int ($\mathtt{0}/\mathtt{1}$)} & {\small form of result saved with }{\small{\small\verb`\reuse`}} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} + + +\subsubsection{Equation variable} + +By default the equation variable is the \emph{rightmost} variable +in the vv-list. This may not always be convenient. A different equation +variable can be specified by entereing +\begin{lyxcode} +var~=~<variable~name> +\end{lyxcode} +in the vv-list. \texttt{<variable name>} will generally be a single +character or token \textendash{} $x$, $t$, $\alpha$, $\omega$ +\textendash{} but is not necessarily of this kind. Multi-token names +are perfectly acceptable (with the default \texttt{xx=1} multi-token +setting). + +\subsubsection{Initial step size} + +The vv-list must contain the equation variable set to some trial value. +But \verb`\solve` needs \emph{two} initial values to begin its search +for a zero or extremum; see §\ref{subsec:solveSearch-strategy}. If +the equation variable is set to a trial value $a$ then by default +the second value is $a+1$. The `$+1$' here can be changed by entering +in the settings option +\begin{lyxcode} +dvar~=~<non-zero~real~number> +\end{lyxcode} +For instance, \texttt{dvar=-1}, or \texttt{dvar=\textbackslash pi} +are two valid specifications of initial step size. + +The notation is prompted by the use of expressions like $x+dx$ in +calculus. + +An example where the default step value is too big and a smaller one +needs to be specified is provided by Planck's radiation function (\emph{HMF +}Table 27.2), +\[ +f(x)=\frac{1}{x^{5}(e^{1/x}-1)}. +\] +From the (somewhat coarse-grained) table in \emph{HMF }it is clear +that there is a maximum of about 21.2 when $x$ is a little more than +$0.2$. This is a maximum above the $x$-axis and hence `elusive'. +To find it, substract $100$ (say) from the formula and again use +the ability to nest commands to display the result. Note the \verb`dvar=0.1` +in the settings option of the \verb`\solve*` command: +\begin{verbatim} + \eval[p=.]{\[ \frac1{x^5(e^{1/x}-1)} \]} + [ x={ \solve*[dvar=0.1] + { \frac1{y^5(e^{1/y}-1)}-100 }[y=0.1] + } ] +\end{verbatim} +$\Longrightarrow$ \eval[p=.]{\[ \frac1{x^5(e^{1/x}-1)} \]} + [ x={ \solve*[dvar=0.1] + { \frac1{y^5(e^{1/y}-1)}-100 }[y=0.1] + } ] + +\noindent The maximum is indeed a little over $21.2$ and the $x$ +value a little more than $0.2$. + +The default \verb`dvar=1` is too big for this problem. From the table +in \emph{HMF},\emph{ }$f(0.1)=4.540$ and $f(1.1)=0.419$. By subtracting +$100$ from $f(x)$ the `towards the $x$-axis' search strategy +leads to negative values of $x$, an artifact of the subtraction. + +\subsubsection{Extra rounding} + +\label{subsec:solveExtraRounding}\verb`\solve` determines that a +zero or an extremum has been reached when the difference between two +successive bisection values or step values vanishes at the specified +rounding value (the value in the final trailing optional argument +of the \verb`\solve` command; $6$ by default). If our function is +$f(x)$ then $\abs{x_{n+1}-x_{n}}=0$ to the specified rounding value +and (assuming $x_{n+1}>x_{n}$) there is a critical value $x_{c}\in[x_{n},x_{n+1}]$ +such that $f(x_{c})=0$ (to all 16 places of decimals that \texttt{l3fp} +works to). But in general the critical value $x_{c}$ will not coincide +with $x_{n}$ or $x_{n+1}$. If $f(x)$ crosses the $x$-axis at a +steep angle it may well be that although $f(x_{c})$ vanishes to all +$16$ places of decimals, $f(x_{n}),f(x_{n+1})$ may well not vanish +at the (generally smaller) specified rounding value. For instance, +suppose $f(x)=1000x-3000$. +\begin{centred} +\verb`\solve[vvi=]{$ 1000x-3000 $}[x=e][4*]` $\Longrightarrow$ \solve[vvi=]{$ 1000x-3000 $}[x=e][4*]. +\end{centred} +In this example, although the difference between successive $x$ values +vanishes to $4$ places of decimals, $f(x)$ does not, not even to +$2$ places. + +This suggests it would be helpful to be able to use two rounding values, +one to determine when a zero has been found and one for the visible +display. This is done through the extra rounding key in the settings +option. Enter +\begin{lyxcode} ++~=~<integer> +\end{lyxcode} +in the settings option of the \verb`\solve` command to add \texttt{<integer>} +to the rounding value determining the conclusion of the calculation. +By default the setting is \texttt{+=}0. The extra rounding setting +leaves the display rounding unaffected. + +With this option available it is easy to check that \verb`+=3` suffices +to ensure that both $x$ and $f(x)$ vanish to $4$ places of decimals, +\begin{centred} +\verb`\solve[+=3]{$ 1000x-3000 $}[x=e][4*]` $\Longrightarrow$ \solve[+=3]{$ 1000x-3000 $}[x=e][4*], +\end{centred} +and that \texttt{+=2} does not, i.e., we need to locate the zero to +$4+3=7$ figures to ensure the function vanishes to $4$ figures. + +There is no need for the \texttt{<integer>} to be positive. In fact +negative values can illuminate what is going on. In the first of the +following, the display is to $10$ places but the calculation is only +to $10-4=6$ places. In the second, the display is again to $10$ +places, but the calculation is to $10-3=7$ places. +\begin{centred} +\verb`\solve[+=-4]{$ 1000x-3000 $}[x=e][10*]` $\Longrightarrow$ +\solve[+=-4]{$ 1000x-3000 $}[x=e][10*], + +\verb`\solve[+=-3]{$ 1000x-3000 $}[x=e][10*]` $\Longrightarrow$ +\solve[+=-3]{$ 1000x-3000 $}[x=e][10*]. +\end{centred} +Only in the second does $f(x)=1000x-3000$ vanish when rounded to +$4$ figures. + +Returning to an earlier example (§\ref{subsec:solveMulti-line-display}) +in which it was not entirely clear whether a zero or an extremum had +been found, we can now resolve the confusion. Use the extra rounding +setting (and pad with zeros to emphasize the $4$-figure display by +adding an asterisk in the trailing optional argument): +\begin{verbatim} + \solve[+=2,vvd={,}\\(vv),*] + {$ + ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} + $}[c=30,a=10,b=20,\beta=1,\omega=0.1,{t}=0][4*] +\end{verbatim} +$\Longrightarrow$ \solve[+=2,vvd={,}\\(vv),*] + {$ + ct-\sqrt{a^{2}+b^{2}-2ab\cos(\beta+\omega t)} + $}[c=30,a=10,b=20,\beta=1,\omega=0.1,{t}=0][4*] + +\subsubsection{Maximum number of steps before cut-off} + +Once two function values have been found of opposite sign, bisection +is guaranteed to arrive at a result. The problem is the \emph{search} +for two such values. This may not terminate \textendash{} think of +functions like $e^{x}$or $1/x$ which lack both zeros and extrema. +To prevent an infinite loop, \verb`\solve` cuts off the search after +$100$ steps. This cut-off value can be changed for a calculation +by entering +\begin{lyxcode} +max~=~<positive~integer> +\end{lyxcode} +in the settings option. + +To illustrate, we know that $1/x$ has neither zero nor extremum, +but we do not get an infinite loop; we get an error message if we +attempt to `solve' $1/x$: +\begin{centred} +\verb`\solve{ 1/x }[x=1]` $\Longrightarrow$ \solve{ 1/x }[x=1] +\end{centred} + +\subsubsection{Form of result saved by \texttt{\textbackslash reuse}} + +As wth \verb`\eval` and \verb`\iter` it is possible to specify to +some extent what is saved to file when using \verb`\reuse` after +a \verb`\solve` command. The form of entry in the settings option +is +\begin{lyxcode} +reuse~=~<integer> +\end{lyxcode} +If the star option is used with the \verb`\solve` command the numerical +result is the only thing saved, but in the absence of the star option, +\begin{itemize} +\item \texttt{reuse=0} saves\emph{ the form that is displayed}. For example, +if the display is of the form \emph{function = function value, (vv-list) +$\rightarrow$ result} then that is what is saved; this is the default +behaviour; +\item \texttt{reuse=1} (or any non-zero integer) saves only the numerical +result. +\end{itemize} + +\subsection{Changing default values} + +\begin{wraptable}[12]{o}{0.5\columnwidth}% +\centering{}\caption{\protect\label{tab:solveSettingsDefaults}Defaults for \texttt{\textbackslash nmcSolve}} +\begin{center} +\begin{tabular}{ll} +\toprule +{\small key} & {\small default}\tabularnewline +\midrule +{\small solve-first-step} & 1\tabularnewline +{\small solve-extra-rounding} & {\small\texttt{0}}\tabularnewline +{\small solve-max-steps} & {\small\texttt{100}}\tabularnewline +{\small solve-reuse} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center}\end{wraptable}% +If you wish to change the default values of the various settings for +\verb`\nmcSolve` this can be done by entering new values in a configuration +file \texttt{numerica.cfg} as described in the chapter on settings +in the associated document \texttt{numeric-basics.pdf}. The relevant +keys are listed in Table~\ref{tab:solveSettingsDefaults}, corresponding +to the \verb`dvar`, \verb`+`, \verb`max` and \verb`reuse` settings +of the \verb`\solve` command. (Obviously it makes no sense to have +a default setting for the solution variable. That will change from +case to case.) + +\chapter{Recurrence relations: \texttt{\textbackslash nmcRecur}} + +One of the simplest recurrence relations is that determining the Fibonacci +numbers, $f_{n+2}=f_{n+1}+f_{n}$, with initial values $f_{0}=f_{1}=1$. +The command \verb`\nmcRecur`, short-name form \verb`\recur`, allows +calculation of the terms of this sequence: +\begin{verbatim} + $ \nmcRecur[do=8,see1=8,...] + { f_{n+2}=f_{n+1}+f_{n} } + [f_{1}=1,f_{0}=1] $ +\end{verbatim} +$\Longrightarrow$ $\nmcRecur[do=8,see1=8,...] + { f_{n+2}=f_{n+1}+f_{n} } + [f_{1}=1,f_{0}=1]$ + +The recurrence relation is entered in the main argument (between braces), +the initial values in the vv-list trailing the main argument, and +the display specification is placed in the settings option: \texttt{do=8} +terms to be calculated, all $8$ to be viewed (\texttt{see1=8}), and +the display to be concluded by an ellipsis to indicate that the sequence +continues (but those are three dots/periods/full stops in the settings +option). + +A more complicated recurrence relation determines the Legendre polynomials: +\[ +(n+2)P_{n+2}(x)-(2n+3)xP_{n+1}(x)+(n+1)P_{n}(x)=0. +\] +For the purposes of \verb`\recur` we need $P_{n+2}$ expressed in +terms of the lower order terms: +\[ +P_{n+2}(x)=\frac{1}{n+2}\left((2n+3)xP_{n+1}(x)-(n+1)P_{n}(x)\right). +\] + It is this standard form \textendash{} the term to be calculated +on the left, equated to an expression involving a fixed number of +lower-order terms on the right \textendash{} that \texttt{numerica} +works with. For $P_{0}(x)=1,~P_{1}(x)=x$ and $x=0.5$, the terms +are calculated thus: +\begin{verbatim} + \recur[p,do=11,see1=4,see2=2,vvd={,}\\(vv)\\,*] + {\[ P_{n+2}(x)=\frac{1}{n+2} + \Bigl((2n+3)xP_{n+1}(x)-(n+1)P_{n}(x)\Bigr) + \]}[P_{1}(x)=x,P_{0}(x)=1,x=0.5] +\end{verbatim} +$\Longrightarrow$ \recur[p,do=11,see1=4,see2=2,vvd={,}\\(vv)\\,*] + {\[ P_{n+2}(x)=\frac{1}{n+2} + \Bigl((2n+3)xP_{n+1}(x)-(n+1)P_{n}(x)\Bigr) + \]}[P_{1}(x)=x,P_{0}(x)=1,x=0.5] + +\noindent where $P_{9}(0.5)$ and $P_{10}(0.5)$ are the last two +displayed values (and to $6$-figures are the values listed in \emph{HMF +}Table 8.1). + +These examples also illustrate a common behaviour of the \texttt{numerica} +commands: when wrapped around math delimiters: the display is of the +\emph{expression=result} form, and when placed between math delimiters +the display is simply of the \emph{result}. When used without math +delimiters, \texttt{numerica} treats the command as if it had been +placed between \texttt{\textbackslash{[} \textbackslash}{]}. + +\section{Notational niceties} + +More than the other commands in \texttt{numerica}, \verb`\nmcRecur` +depends on getting the notation into a standard form. +\begin{itemize} +\item The terms of the recurrence must be \emph{subscripted}: $f_{n}$, +$P_{n}(x)$ are examples. +\item The recurrence relation is placed in the main (mandatory) argument +of \verb`\nmcRecur` in the form: \emph{high-order term=function of +lower-order terms}. +\item The initial-value terms in the vv-list must occur left-to-right in +the order \emph{high }to \emph{low} order. +\item The recurrence variable changes by $1$ between successive terms. +\end{itemize} +The example for Legendre polynomials in particular shows what is required. +The Fibonacci example is simpler, since the recurrence variable does +not occur independently in the recurrence relation as it does with +the Legendre polynomials. In both cases though the recurrence variable +is absent from the vv-list. + +\subsection{Vv-list and recurrence variable} + +The recurrence variable is required in the vv-list only when an implicit +mode calculation is undertaken. Suppose we write $A$ and $B$ for +the coefficients $2n+3$ and $n+1$ respectively in the Legendre recurrence. +$A$ and $B$ will now need entries in the vv-list which means the +recurrence variable will need a value assigned to it there too, and +we will need to add \texttt{vvmode=1} to the settings option. +\begin{verbatim} + \recur[p,vvmode=1,do=11,see1=4,see2=2,vvd={,}\\(vv)\\,*] + {\[ P_{n+2}(x)=\frac{1}{n+2} + \Bigl(AxP_{n+1}(x)-BP_{n}(x)\Bigr) + \]}[P_{1}(x)=x,P_{0}(x)=1,x=0.5,A=2n+3,B=n+1,n=0] +\end{verbatim} +$\Longrightarrow$ \recur[p,vvmode=1,do=11,see1=4,see2=2,vvd={,}\\(vv)\\,*] + {\[ P_{n+2}(x)=\frac{1}{n+2} + \Bigl(AxP_{n+1}(x)-BP_{n}(x)\Bigr) + \]}[P_{1}(x)=x,P_{0}(x)=1,x=0.5,A=2n+3,B=n+1,n=0] + +Since the vv-list is evaluated from the right, the left-to-right high-to-low +ordering of the initial-value terms means the value of the lowest +order term is read first. Although \texttt{numerica} depends on this +order of occurrence of the terms, they do not need to be \emph{consecutive} +as in the examples so far (although it is natural to enter them in +this way). \texttt{numerica} reads the value of the subscript of only +the right-most term (the lowest order term), increments it by $1$ +when reading the next recurrence term to the left, and so on. The +reading of the subscript of the lowest order term in the vv-list provides +the initial value of the recurrence variable. + +In the following example I have placed other items between $P_{1}(x)$ +and $P_{0}(x)$ in the vv-list (but maintained their left-to-right +order) and given the recurrence variable $n$ a ridiculous initial +value $\pi^{2}/12$. (Because of the order in which things get done +`behind the scenes', \emph{some} value is necessary so that the +$n$ in `$B=n+1$' does not generate an `unknown token' message.) +The result is unchanged. +\begin{verbatim} + \recur[p,vvmode=1,do=11,see1=4,see2=2,vvd={,}\\(vv)\\,*] + {\[ P_{n+2}(x)=\frac{1}{n+2} + \Bigl(AxP_{n+1}(x)-BP_{n}(x)\Bigr) + \]}[A=2n+3,P_{1}(x)=x,B=n+1,n=\pi^2/12,P_{0}(x)=1,x=0.5] +\end{verbatim} +$\Longrightarrow$ \recur[p,vvmode=1,do=11,see1=4,see2=2,vvd={,}\\(vv)\\,*] + {\[ P_{n+2}(x)=\frac{1}{n+2} + \Bigl(AxP_{n+1}(x)-BP_{n}(x)\Bigr) + \]}[A=2n+3,P_{1}(x)=x,B=n+1,n=\pi^2/12,P_{0}(x)=1,x=0.5] + +\subsection{Form of the recurrence relation} + +As noted earler, the form of the recurrence must be entered in the +main argument in the form: \emph{highest order term = function of +consecutive lower order terms}. The number of lower\emph{ }order terms +is the order of the recurrence. The Fibonacci and Legendre polynomial +recurrences are both second order and presented in the form: \emph{$n+2$-th +term = function of $n+1$-th term and $n$-th term}. We could equally +have done +\begin{verbatim} + \nmcRecur[p,do=8,see1=8,...] + {$ f_{n}=f_{n-1}+f_{n-2} $} + [f_{1}=1,f_{0}=1] +\end{verbatim} +$\Longrightarrow$ \nmcRecur[p,do=8,see1=8,...] + {$ f_{n}=f_{n-1}+f_{n-2} $} + [f_{1}=1,f_{0}=1] where now the recurrence is of the form $n$\emph{-th term = function +of $n-1$-th term and $n-2$-th term}, or (adjusting the coefficients +as well as the recurrence terms), +\begin{verbatim} + \recur[p=.,do=10,see1=4,see2=2,vvd={,}\\(vv)\\,*]{\[ + P_{n+1}(x)=\frac{1}{n+1} + \Bigl((2n+1)xP_{n}(x)-nP_{n-1}(x)\Bigr) + \]}[P_{2}(x)=-0.125,P_{1}(x)=x,x=0.5] +\end{verbatim} +$\Longrightarrow$ \recur[p=.,do=10,see1=4,see2=2,vvd={,}\\(vv)\\,*]{\[ + P_{n+1}(x)=\frac{1}{n+1} + \Bigl((2n+1)xP_{n}(x)-nP_{n-1}(x)\Bigr) + \]}[P_{2}(x)=-0.125,P_{1}(x)=x,x=0.5] + +\noindent The recurrence here is of the form $n+1$\emph{-th term += function of $n$-th term and $n-1$-th term}. This last example +has one further `wrinkle'. I've made $P_{1}(x)$ the lowest order +term and decreased the number of terms to calculate by $1$ accordingly. + +\subsection{First order recurrences (iteration)} + +The recurrence relations for both the Fibonacci sequence and Legendre +polynomials are second order. There is no reason why the recurrence +should not be of third or higher order or, indeed, lower. A first +order recurrence provides an alternative means of iterating functions. +\verb`\recur` therefore provides a means to display the results of +an iteration in a different form from \verb`\iter`. + +Iterating $1+a/x$ in this way, $16$ terms gives the sequence +\begin{verbatim} + \recur[do=16,see1=0,see2=3,...]{$ + x_{n+1}=1+a/x_{n} + $}[x_{0}=1,a=1] +\end{verbatim} +$\Longrightarrow$ \recur[do=16,see1=0,see2=3,...]{$ + x_{n+1}=1+a/x_{n} + $}[x_{0}=1,a=1] + +\noindent to be compared with the example near the start of Chapter~\ref{chap:Iterating-functions}. +(\emph{That} effected $15$ iterations; \emph{this} uses $16$ terms +because of the extra $x_{0}=1$ term.) + +\section{Star (\texttt{{*}}) option} + +When the star option is used with the \verb`\nmcRecur` command, only +a single term, the \emph{last}, is presented as the result. Repeating +the last calculation, but with the star option produces +\begin{verbatim} + \recur*[p=.,do=10]{\[ + P_{n+1}(x)=\frac{1}{n+1} + \Bigl((2n+1)xP_{n}(x)-nP_{n-1}(x)\Bigr) + \]}[P_{2}(x)=-0.125,P_{1}(x)=x,x=0.5] +\end{verbatim} +$\Longrightarrow$ \recur*[p=.,do=10]{\[ + P_{n+1}(x)=\frac{1}{n+1} + \Bigl((2n+1)xP_{n}(x)-nP_{n-1}(x)\Bigr) + \]}[P_{2}(x)=-0.125,P_{1}(x)=x,x=0.5] + +Although punctuation (a full stop) was specified in the settings, +it has been ignored in the display of the result. Other settings would +also have been ignored with the exception of the \verb`do` key which +is required to know exactly which term to calculate. The star option +produces a purely numerical answer without any trimmings. + +\section{Settings} + +The settings option is a comma-separated list of items of the form +\emph{key~=~value}. + +\subsection{Inherited settings} + +Because recurrence terms are necessarily multi-token, the multi-token +key is hard-coded in \verb`\recur` to \texttt{xx=1}. + +\subsubsection{Multi-line formatting of result} + +When the \verb`\recur` command wraps around math delimiters, the +\texttt{vvd} setting is available to split display of the result over +two or more lines. For example, \texttt{vvd=\{,\}\textbackslash\textbackslash (vv)}pushes +the vv-list and sequence of calculated values to a second line; or, +\texttt{vvd=\{,\}\textbackslash qquad(vv)\textbackslash\textbackslash} +pushes only the sequence of calculated values to a second line; or +\texttt{vvd=\{,\}\textbackslash\textbackslash (vv)\textbackslash\textbackslash} +pushes the vv-list, centred, to a second line and the sequence of +values, right aligned, to a third line. The \texttt{{*}} setting is +available to suppress equation numbering (by substituting \verb`multline*` +for \verb`multline`). +\begin{verbatim} + \nmcRecur[do=8,see1=8,...,vvd={,}\qquad(vv)\\,*] + {$ f_{n+2}=f_{n+1}+f_{n} $} + [f_{1}=1,f_{0}=1] +\end{verbatim} +$\Longrightarrow$ \nmcRecur[do=8,see1=8,...,vvd={,}\qquad(vv)\\,*] + {$ f_{n+2}=f_{n+1}+f_{n} $} + [f_{1}=1,f_{0}=1] + +\subsection{\texttt{\textbackslash recur}-specific settings} + +\label{subsec:recurSpecific-settings} + +\subsubsection{Number of terms to calculate} + +By entering +\begin{lyxcode} +do~=~<integer> +\end{lyxcode} +in the settings option you can specify how many terms of a recurrence +to calculate. The default is set to $7$ (largely to show a sufficient +number of terms of the Fibonacci series to begin to be interesting). +Note that \texttt{<integer>} will generally not correspond to the +subscript on the last term calculated since that also depends on the +value of the subscript of the lowest order term in the vv-list. + +\subsubsection{Number of terms to display} + +\begin{table} +\centering{}\caption{\protect\label{tab:solveSettings-1}Settings for \texttt{\textbackslash nmcRecur}} +\begin{center} +\begin{tabular}{llll} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{do}} & {\small int$\ge0$} & {\small number of terms to calculate} & {\small\texttt{7}}\tabularnewline +{\small\texttt{see1}} & {\small int$\ge0$} & {\small number of initial terms to display} & {\small\texttt{3}}\tabularnewline +{\small\texttt{see2}} & {\small int$\ge0$} & {\small number of final terms to display} & {\small\texttt{2}}\tabularnewline +{\small\texttt{...}} & {\small chars} & {\small follow display of values with an ellipsis} & \tabularnewline +{\small\texttt{reuse}} & {\small int ($\mathtt{0}/\mathtt{1}/\mathtt{2}$)} & {\small form of result saved with }{\small{\small\verb`\reuse`}} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} +By entering +\begin{lyxcode} +see1~=~<integer1>,~see2=<integer2> +\end{lyxcode} +in the settings option, you can specify how many initial terms of +the recurrence and how many of the final terms calculated you want +to view. If the sum of these settings is less than the \texttt{do} +setting, then the terms are displayed with an intervening ellipsis. +If the sum is greater than the \texttt{do} setting, then the values +are adjusted so that their sum equals the \texttt{do} setting and +all terms are displayed. + +The adjustment is preferentially to \texttt{see1}. Suppose \texttt{do=}7, +\texttt{see1=5}, \texttt{see2=4}. Then \texttt{see2} is left unchanged +but \texttt{see1} is reduced to \texttt{7-4=3}. If, say, \texttt{do=}7, +\texttt{see1=5}, \texttt{see2=8}, then \texttt{see2} is reduced to +\texttt{7} and \texttt{see1} to \texttt{-1} (rather than zero, for +technical reasons). The reason for preserving \texttt{see2} over \texttt{see1} +is for the functioning of the \texttt{reuse} setting (see above). + +The default value for \texttt{see1} is $3$; the default value for +\texttt{see2} is $2$. + +\subsubsection{Ellipsis} + +Including three dots in the settings option +\begin{lyxcode} +... +\end{lyxcode} +ensures that a (proper) ellipsis is inserted after the final term +is displayed. An example is provided by the display of the Fibonacci +sequence at the start of this chapter. By default this option is turned +off. + +\subsubsection{Form of result saved by \texttt{\textbackslash reuse}} + +By entering +\begin{lyxcode} +reuse~=~<integer> +\end{lyxcode} +it is possible to specify the form of result that is saved when using +\verb`\nmcReuse`. (This setting has no effect when the star option +is used with \verb`\nmcRecur`. In that case only the numerical result +of the final term calculated is saved.) There are three different +outputs possible: +\begin{itemize} +\item \texttt{int=0} (or any integer $\mathtt{\ne1,2}$) saves the full +display (the default); +\item \texttt{int=1} saves a comma-separated list of braced pairs of the +form: \texttt{\{$k$, value-of-term-$k$\}} for the last \texttt{see2} +terms calculated; +\item \texttt{int=2} saves a comma-separated list of the values of the last +\texttt{see2} terms calculated. +\end{itemize} +As an example, using \texttt{reuse=1}, +\begin{verbatim} + \recur[reuse=1,p=.,vvmode=1,do=11,see1=4,see2=2, + vvd={,}\\(vv)\\,*] + {\[ P_{n+2}(x)=\frac{1}{n+2} + \Bigl(kxP_{n+1}(x)-(n+1)P_{n}(x)\Bigr) + \]}[k=2n+3,n=123,P_{1}(x)=x,P_{0}(x)=1,x=0.5] + \reuse[legendre] +\end{verbatim} +$\Longrightarrow$ \recur[reuse=1,p=.,vvmode=1,do=11,see1=4,see2=2, + vvd={,}\\(vv)\\,*] + {\[ P_{n+2}(x)=\frac{1}{n+2} + \Bigl(kxP_{n+1}(x)-(n+1)P_{n}(x)\Bigr) + \]}[k=2n+3,n=123,P_{1}(x)=x,P_{0}(x)=1,x=0.5] + \reuse[legendre] + +\noindent Now check to see what has been saved: +\begin{centred} +\verb`$\legendre$` $\Longrightarrow$ $ \legendre$. +\end{centred} +As you can see, the final two (because of \texttt{see2=2}) of the +$12$ Legendre polynomials calculated have been saved, each value +preceded by its index value. If the setting had been \texttt{reuse=2}, +only the two values would have been saved. The \verb`\legendre` control +sequence contains the values as comma-separated braced pairs, as can +be seen by using \TeX 's \verb`\meaning` command: +\begin{centred} +\verb`\meaning\legendre` $\Longrightarrow$ \meaning\legendre +\end{centred} + +\subsection{Changing default values} + +\begin{wraptable}[12]{o}{0.5\columnwidth}% +\centering{}\caption{\protect\label{tab:recurSettingsDefaults}Defaults for \texttt{\textbackslash nmcRecur}} +\begin{center} +\begin{tabular}{ll} +\toprule +{\small key} & {\small default}\tabularnewline +\midrule +{\small recur-do} & {\small\texttt{7}}\tabularnewline +{\small recur-see-first} & {\small\texttt{3}}\tabularnewline +{\small recur-see-last} & {\small\texttt{2}}\tabularnewline +{\small recur-reuse} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center}\end{wraptable}% +If you wish to change the default values of the various settings for +\verb`\nmcRecur` this can be done by entering new values in a configuration +file \texttt{numerica.cfg} as described in the chapter on settings +in the associated document \texttt{numerica-basics.pdf}. The relevant +keys are listed in Table~\ref{tab:recurSettingsDefaults}, corresponding +to the \verb`do`, \verb`see1`, \verb`see2` and \verb`reuse` settings +of the \verb`\recur` command. + +\subsection{Orthogonal polynomials} + +I've used Legendre polynomials in examples above, but orthogonal polynomials +generally lend themselves to the \verb`\recur` treatment. Quoting +from \emph{HMF} 22.7, orthogonal polynomials $f_{n}$ satisfy recurrence +relations of the form +\[ +a_{1n}f_{n+1}(x)=(a_{2n}+a_{3n}x)f_{n}(x)-a_{4n}f_{n-1}(x), +\] +or in the standard form required by \verb`\recur`, +\[ +f_{n+1}(x)=\frac{a_{2n}+a_{3n}x}{a_{1n}}f_{n}(x)-\frac{a_{4n}}{a_{1n}}f_{n-1}(x). +\] +\emph{HMF} 22.7 provides a listing of the coefficients $a_{in}$ for +the polynomials of Jacobi, Chebyshev, Legendre, Laguerre, Hermite +and others, and tables for these polynomials. + +For example, Laguerre polynomials satisfy the recurrence +\[ +L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)-\frac{n}{n+1}L_{n-1}(x). +\] +with initial values $L_{0}(x)=1$ and $L_{1}(x)=1-x$. So let's calculate +the first $13$ Laguerre polynomials for, say, $x=0.5$: +\begin{verbatim} + \recur[do=13,see1=4,see2=2,vvd={,}\\(vv)\\,*]{\[ + L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)- + \frac{n}{n+1}L_{n-1}(x) + \]}[L_{1}(x)=1-x,L_{0}(x)=1,x=0.5] +\end{verbatim} +$\Longrightarrow$ \recur[do=13,see1=4,see2=2,vvd={,}\\(vv)\\,*]{\[ + L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)- + \frac{n}{n+1}L_{n-1}(x) + \]}[L_{1}(x)=1-x,L_{0}(x)=1,x=0.5] + +\noindent and for $x=5$: +\begin{verbatim} + \recur[p=.,do=13,see1=4,see2=2,vvd={,}\\(vv)\\,*]{\[ + L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)- + \frac{n}{n+1}L_{n-1}(x) + \]}[L_{1}(x)=1-x,L_{0}(x)=1,x=5] +\end{verbatim} +$\Longrightarrow$ \recur[p=.,do=13,see1=4,see2=2,vvd={,}\\(vv)\\,*]{\[ + L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)- + \frac{n}{n+1}L_{n-1}(x) + \]}[L_{1}(x)=1-x,L_{0}(x)=1,x=5] + +\noindent The results (reassuringly) coincide with those provided +in \emph{HMF }Table 22.11. + +\subsection{Nesting} + +It is possible to use the \verb`\recur*` command (but only the starred +form) in the \verb`\eval`, \verb`\iter`, and \verb`\solve` commands, +and indeed in \verb`\recur` itself, but with this caveat: if \verb`\recur*` +is nested within another command, the initial terms of the recurrence +\textendash{} e.g., $f_{1}=1,f_{0}=1$, for the Fibonacci series, +or $L_{1}(x)=1-x,L_{0}(x)=1$ for the Laguerre polynomials \textendash{} +\emph{must be located in the vv-list of that inner }\verb`\recur*`\emph{ +command}. Other shared variables can often be shifted to the vv-list +of the outer command, but not these initial terms. + +\noindent\begin{minipage}[t]{1\columnwidth}% +\begin{shaded}% +The terms of a recurrence relation are multi-token variables but \texttt{numerica} +requires single tokens for its calculations. The problem for \verb`\recur` +is that the terms in the recurrence relation in the main (mandatory) +argument differ from the terms in the vv-list: for instance $f_{n}$ +in the main argument, $f_{0}$ in the vv-list. If left like that, +when \texttt{numerica} does its conversion from multi-token to single +token variables, $f_{n}$ would not be found since it differs from +$f_{0}$. Hence a crucial first step for \verb`\recur` is to reconcile +the different forms, which it does by converting the forms in the +vv-list to the forms in the recurrence in the main argument. To be +available for this form change, they must reside in the \emph{inner} +vv-list. In the outer vv-list they would be inaccessible to the inner +command. + +{*}{*}{*} + +This suggests an alternative way of proceeding: write the inital values +of the recurrence terms in the \emph{same} form in which they occur +in the recurrence relation, together with an initial value for the +recurrence variable: $f_{n+1}=1,f_{n}=1,n=0$, say. This is not how +mathematicians write the initial values in recurrence relations, which +is why I did not pursue it, but it neatly sidesteps what is otherwise +an initial awkwardness. \end{shaded}% +\end{minipage} + +In the following example I multiply together (rather futilely) the +third and fourth members of the sequence of Laguerre polynomials for +$x=5$ (the answer expected is \verb`$ \eval{3.5\times2.666667} $` +$\Longrightarrow$ $ \eval{3.5\times2.666667} $). Note that although +it is tempting to shift the shared vv-lists of the inner \verb`\recur*` +commands to the vv-list of the outer \verb`\eval` command, in fact +only the \verb`x=5` entry has been transferred: +\begin{verbatim} + \eval[p=.]{$ + \recur*[do=3] + { L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)- + \frac{n}{n+1}L_{n-1}(x)} + [L_{1}(x)=1-x,L_{0}(x)=1] + \times + \recur*[do=4] + { L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)- + \frac{n}{n+1}L_{n-1}(x)} + [L_{1}(x)=1-x,L_{0}(x)=1] + $}[x=5] +\end{verbatim} +$\Longrightarrow$ \eval[p=.]{$ + \recur*[do=3] + { L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)- + \frac{n}{n+1}L_{n-1}(x)} + [L_{1}(x)=1-x,L_{0}(x)=1,x=5] + \times + \recur*[do=4] + { L_{n+1}(x)=\frac{2n+1-x}{n+1}L_{n}(x)- + \frac{n}{n+1}L_{n-1}(x)} + [L_{1}(x)=1-x,L_{0}(x)=1,x=5] + $} + +\chapter{Reference summary} + +\section{Commands defined in \texttt{numerica-plus}} +\begin{enumerate} +\item \texttt{\textbackslash nmcIterate, \textbackslash iter} +\item \texttt{\textbackslash nmcSolve, \textbackslash solve} +\item \textbackslash\texttt{nmcRecur, \textbackslash recur} +\end{enumerate} + +\section{Settings for the three commands} + +\subsection{Settings for \texttt{\textbackslash nmcIterate}} + +Settings option of \verb`\nmcIterate`: + +\begin{center} +\begin{tabular}{llll} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{var}} & {\small token(s)} & {\small iteration variable} & \tabularnewline +{\small\texttt{+}} & {\small int} & {\small fixed point extra rounding} & {\small\texttt{0}}\tabularnewline +{\small\texttt{max}} & {\small int > 0} & {\small max. iteration count (fixed points)} & {\small\texttt{100}}\tabularnewline +{\small\texttt{do}} & {\small int > 0} & {\small number of iterations to perform} & {\small\texttt{5}}\tabularnewline +{\small\texttt{see}} & {\small int > 0} & {\small number of final iterations to view} & {\small\texttt{4}}\tabularnewline +{\small\texttt{reuse}} & {\small int ($\mathtt{0}/\mathtt{1}/\mathtt{2}$)} & {\small form of result saved with }{\small{\small\verb`\reuse`}} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} + +Configuration settings for \verb`\nmcIterate`: + +\begin{center} +\begin{tabular}{ll} +\toprule +{\small key} & {\small default}\tabularnewline +\midrule +{\small iter-extra-rounding} & {\small\texttt{0}}\tabularnewline +{\small iter-max-iterations} & {\small\texttt{100}}\tabularnewline +{\small iter-do} & {\small\texttt{5}}\tabularnewline +{\small iter-see-last} & {\small\texttt{4}}\tabularnewline +{\small iter-reuse} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} + +\subsection{Settings for \texttt{\textbackslash nmcSolve}} + +Settings option of \verb`\nmcSolve`: + +\begin{center} +\begin{tabular}{llll} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{var}} & {\small token(s)} & {\small equation variable} & \tabularnewline +{\small\texttt{dvar}} & {\small real $\ne0$} & {\small initial step size} & {\small\texttt{1}}\tabularnewline +{\small\texttt{+}} & {\small int} & {\small extra rounding} & {\small\texttt{0}}\tabularnewline +{\small\texttt{max}} & {\small int > 0} & {\small max. number of steps before cut off} & {\small\texttt{100}}\tabularnewline +{\small\texttt{reuse}} & {\small int ($\mathtt{0}/\mathtt{1}$)} & {\small form of result saved with }{\small{\small\verb`\reuse`}} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} + +Configuration settings for \verb`\nmcSolve`: + +\begin{center} +\begin{tabular}{ll} +\toprule +{\small key} & {\small default}\tabularnewline +\midrule +{\small solve-first-step} & 1\tabularnewline +{\small solve-extra-rounding} & {\small\texttt{0}}\tabularnewline +{\small solve-max-steps} & {\small\texttt{100}}\tabularnewline +{\small solve-reuse} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} + +\subsection{Settings for \texttt{\textbackslash nmcRecur}} + +Settings option of \verb`\nmcRecur`: + +\begin{center} +\begin{tabular}{llll} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{do}} & {\small int$\ge0$} & {\small number of terms to calculate} & {\small\texttt{7}}\tabularnewline +{\small\texttt{see1}} & {\small int$\ge0$} & {\small number of initial terms to display} & {\small\texttt{3}}\tabularnewline +{\small\texttt{see2}} & {\small int$\ge0$} & {\small number of final terms to display} & {\small\texttt{2}}\tabularnewline +{\small\texttt{...}} & {\small chars} & {\small follow display of values with an ellipsis} & \tabularnewline +{\small\texttt{reuse}} & {\small int ($\mathtt{0}/\mathtt{1}/\mathtt{2}$)} & {\small form of result saved with }{\small{\small\verb`\reuse`}} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} + +Configuration settings for \verb`\nmcRecur`: + +\begin{center} +\begin{tabular}{ll} +\toprule +{\small key} & {\small default}\tabularnewline +\midrule +{\small recur-do} & {\small\texttt{7}}\tabularnewline +{\small recur-see-first} & {\small\texttt{3}}\tabularnewline +{\small recur-see-last} & {\small\texttt{2}}\tabularnewline +{\small recur-reuse} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{document} |