Tip revision: c1688b3
``````# Package PRACMA

## Introduction

This package provides R implementations of more advanced functions in
numerical analysis, with a special view on on optimization and time
series routines. Uses Matlab/Octave function names where appropriate
to simplify porting.

Some of these implementations are the result of courses on Scientific
Computing (``Wissenschaftliches Rechnen'') and are mostly intended to
demonstrate how to implement certain algorithms in R/S. Others are
implementations of algorithms found in textbooks.

## Details

The package encompasses functions from all areas of numerical analysis,
for example:

* Root finding and minimization of univariate functions,
e.g. Newton-Raphson, Brent-Dekker, Fibonacci or `golden ratio' search.
* Handling polynomials, including roots and polynomial fitting,
e.g. Laguerre's and Muller's methods.
* Interpolation and function approximation,
barycentric Lagrange interpolation, Pade and rational interpolation,
Chebyshev or trigonometric approximation.
* Some special functions,
e.g. Fresnel integrals, Riemann's Zeta or the complex Gamma function,
and Lambert's W computed iteratively through Newton's method.
* Special matrices, e.g. Hankel, Rosser, Wilkinson
* Numerical differentiation and integration,
Richardson approach and ``complex step'' derivatives, adaptive
* Solvers for ordinary differential equations and systems,
Euler-Heun, classical Runge-Kutta, ode23, or predictor-corrector method
* Some functions from number theory,
such as primes and prime factorization, extended Euclidean algorithm.
* Sorting routines, e.g. recursive quickstep.
* Several functions for string manipulation and regular search,
all wrapped and named similar to their Matlab analogues.

## Goals

It serves three main goals:

* Collecting R scripts that can be demonstrated in courses on
Numerical Analysis or Scientific Computing using R/S as the chosen
programming language.
* Wrapping functions with appropriate Matlab names to simplify
porting programs from Matlab or Octave to R.
* Providing an environment in which R can be used as a full-blown
numerical computing system.

Besides that, many of these functions could be called in R applications
as they do not have comparable counterparts in other R packages (at least
at this moment, as far as I know).

All referenced books have been utilized in one way or another.
Web links have been provided where reasonable.

## Emulated MATLAB Functions

The following 220 functions are emulations of correspondingly named Matlab
functions and bear the same signature as their Matlab cousins if possible:

accumarray, acosd, acot, acotd, acoth, acsc, acscd, acsch, and, angle, ans,
arrayfun, asec, asecd, asech, asind, atand, atan2d,
beep, bernoulli, blank, blkdiag, bsxfun,
cart2pol, cart2sph, cd, ceil, circshift, clear, compan, cond, conv,
cosd, cot, cotd, coth, cross, csc, cscd, csch, cumtrapz,
eig, eigint, ellipj, ellipke, eps, erf, erfc, erfcinv, erfcx, erfi, erfinv,
errorbar, expint, expm, eye, ezcontour, ezmesh, ezplot, ezpolar, ezsurf,
fact, fftshift, figure, findpeaks, findstr, flipdim, fliplr, flipud,
fminbnd, fmincon, fminsearch, fminunc, fplot, fprintf, fsolve, fzero,
hadamard, hankel, harmmean, hilb, histc, humps, hypot,
idivide, ifft, ifftshift, inpolygon, integral, integral2, integral3,
interp1, interp2, inv, isempty, isprime,
kron,
legendre, linprog, linspace, loglog, logm, logseq, logspace, lsqcurvefit,
lsqlin, lsqnonlin, lsqnonneg, lu,
magic, meshgrid, mkpp, mldivide, mod, mrdivide,
nchoosek, ndims, nextpow2, nnz, normest, nthroot, null, num2str, numel,
ode23, ode23s, ones, or, orth,
pascal, pchip, pdist, pdist2, peaks, perms, piecewise, pinv, plotyy,
pol2cart, polar, polyfit, polyint, polylog, polyval, pow2, ppval,
primes, psi, pwd,
rad2deg, randi, randn, randsample, rat, rats, regexp, regexpi,
regexpreg, rem, repmat, roots, rosser, rot90, rref, runge,
sec, secd, sech, semilogx, semilogy, sinc, sind, size, sortrows, sph2cart,
sqrtm, squareform, std, str2num, strcat, strcmp, strcmpi,
strfind, strfindi, strjust, subspace,
tand, tic, toc, trapz, tril, trimmean, triplequad, triu,
vander, vectorfield, ver,
what, who, whos, wilkinson,
zeros, zeta

The following Matlab function names have been capitalized in `pracma' to
avoid shadowing functions from R base or one of its recommended packages
(on request of Bill Venables and because of Brian Ripley's CRAN policies):

Diag, factos, finds, Fix, Imag, Lcm, Mode, Norm, nullspace (<- null),
Poly, Rank, Real, Reshape, strRep, strTrim, Toeplitz, Trace, uniq (<- unique).

To use `ans` instead of `ans()` -- as is common practice in Matlab --
type (and similar for other Matlab commands):

makeActiveBinding("ans", function() .Last.value, .GlobalEnv)
makeActiveBinding("who", who(), .GlobalEnv)

### Note

The R package `matlab' contains some of the basic routines from Matlab,
but unfortunately not any of the higher math routines.

## References

Abramowitz, M., and I. A. Stegun (1972). Handbook of Mathematical Functions
(with Formulas, Graphs, and Mathematical Tables). Dover, New York.
URL: www.math.ubc.ca/~cbm/aands/notes.htm

Arndt, J. (2010). Matters Computational: Ideas, Algorithms, Source Code.
Springer-Verlag, Berlin Heidelberg Dordrecht.
FXT: a library of algorithms: <https://www.jjj.de/fxt/>.

Cormen, Th. H., Ch. E. Leiserson, and R. L. Rivest (2009). Introduction
to Algorithms. Third Edition, The MIT Press, Cambridge, MA.

Encyclopedia of Mathematics (2012). Editor-in-Chief: Ulf Rehmann.
<https://encyclopediaofmath.org/wiki/Main_Page>.

Gautschi, W. (1997). Numerical Analysis: An Introduction.
Birkhaeuser, Boston.

Gentle, J. E. (2009). Computational Statistics.
Springer Science+Business Media LCC, New York.

Hazewinkel, M., Editor (2002). Encyclopaedia of Mathematics.
Springer-Verlag, Berlin Heidelberg New York.

MathWorld.com (2011).
Wolfram MathWorld: <https://mathworld.wolfram.com/>.
Matlab Central: <https://www.mathworks.com/matlabcentral/>.

NIST: National Institute of Standards and Technology.
Olver, F. W. J., et al. (2010). NIST Handbook of Mathematical Functions.
Cambridge University Press.
Internet: NIST Digital Library of Mathematical Functions,
<https://dlmf.nist.gov/>;
Dictionary of Algorithms and Data Structures,
<https://www.nist.gov/>;
Guide to Available Mathematical Software, <https://gams.nist.gov/>

Press, W. H., S. A. Teukolsky, W. T Vetterling, and B. P. Flannery (2007).
Numerical Recipes: The Art of Numerical Computing. Third Edition, incl.
Numerical Recipes Software, Cambridge University Press, New York.
URL: numerical.recipes/book/book.html

Quarteroni, A., R. Sacco, and F. Saleri (2007). Numerical Mathematics.
Second Edition, Springer-Verlag, Berlin Heidelberg.

Skiena, St. S. (2008). The Algorithm Design Manual. Second Edition,
Springer-Verlag, London. The Stony Brook Algorithm Repository:
<https://algorist.com/algorist.html>.

Stoer, J., and R. Bulirsch (2002). Introduction to Numerical Analysis.
Third Edition, Springer-Verlag, New York.

Strang, G. (2007). Computational Science and Engineering.
Wellesley-Cambridge Press.

Weisstein, E. W. (2003). CRC Concise Encyclopedia of Mathematics.
Second Edition, Chapman & Hall/CRC Press.

Zhang, S., and J. Jin (1996). Computation of Special Functions.
John Wiley & Sons.
``````