mathC
mathC is a set of subroutines, either in ANSI C or C++,
for various mathematical problems. It is used by almost all our
software, hence we found it convenient to create a separate
download package for it instead of bundling it with all our
software packages.
The subroutines in mathC are based on many mathematical
textbooks and publications, on personal communications and hard
experience. Some subroutines were taken from the literature as
they are, some were signifcantly improved by us. Unless indicated
otherwise in the top portions of the source files, we do not
claim authorship.
Installation requirements
 C version: an ANSI C compiler capable of handling dynamic
libraries (GNU gcc and HPUX cc are known to work)
 C++ version: a C++ compiler capable of handling dynamic
libraries (GNU g++ is known to work)
 the make command (a standard feature of UNIX and Linux)
 the mathC source files
Installation
 Unpack the mathC archive:
gzip cd mathc.tar.gz  tar xvf 
This creates the directories math/C and math/C++.
 Make platformspecific changes for the C version:
cd math/C
./configure
 Build the library:
make
 Repeat the last two steps for the C++ version.
Note: The recent configure script recognizes Linux and
MacOS only. If you have a different operating system, you may
have to modify the configure script.
Please send us your configure script, and we will build your
changes into the official distribution.
Contents (C++ version)

minimization, curve fitting
 min_brent: local minimum of a 1dimensional
function, parabola minimum
 fit_marquardt: modified Marquardt—Levenberg
method
 fit_powell: Powell's sequential minimization
method
 fit_simplex: simplex method of Nelder and
Mead
 min_scan1: absolute minimum of a 1dimensional
function

differentiation
 diff_gradient: gradient of an ndimensional
function, Romberg's method
 diff_hessian: Hessian of an ndimensional
function, Romberg's method
 diff_ridders: derivative of an 1dimensional
function, Ridder's method
 diff_romberg: derivative of an 1dimensional
function (also bounded!), Romberg's method
 diff_x: derivative of an 1dimensional function
confined to [0; 1]
 diff_2all: 2dimensional function, all
derivatives up to given order

differential equations
 ode_ck: 1st degree ordinary ODE,
Cash–Karp method
 ode_runge_kutta: 1st degree ordinary ODE,
Runge–Kutta method

functions
 f_bessel_sph: spherical Bessel function
(= J_{l+1/2}(x))
 f_dfac: factorial (as double precision)
 f_ibinom_c: binomial coefficients (as integers)
 f_legendre: Legendre polynomials (function values or
coefficients)

integration
 int_gauss: Gauss' method
 int_romberg: Romberg's iterative method
 int_simpson: Simpson's and Newton's rules
 int_spline: integral over a cubic spline
function
 int_trapez: trapezoidal method

interpolation
 ipl_akima: Akima polynomials
 ipl_spline: natural cubic spline polynomials
 ipl_eval: evaluation of Akima or spline
polynomials
 ipl_pspline: periodic cubic spline polynomials
 ipl_peval: evaluation of periodic cubic spline
polynomials
 ipl_lagrange: calculation of Lagrange
polynomials
 ipl_reinsch: smoothing natural cubic spline
polynomials
 ipl_track: polynomial intra/extrapolation of
tables

linear algebra
 lin_gauss: systems of linear equations, Gauss
elimination
 lin_jacobi: eigenvalues and eigenvectors of
symmetric matrices, Jacobi algorithm
 lin_matinv: matrix inversion, Gauss—Jordan
algorithm
 lin_rayleigh: nearest eigenvalue and associated
eigenvector of symmetric matrices, Rayleigh quotient
algorithm

nonlinear equations
 eqn_quadratic: linear or quadratic equation
 eqn_cubic: cubic equation (faster than Cardano's
algorithm!)
description [U. K. Deiters and
R. MacíasSalinas, Ind. Eng. Chem. Res. 53 (2014) 2529–2536]
supplement
 eqn_quartic: quartic polynomial equation
 eqn_quintic: 5th order polynomial equation
 eqn_polynomial: polynomial equation of arbitrary
order
 eqn_regulafalsi: nonlinear equation by
regula falsi,
Illinois method
 eqn_steffensen: nonlinear equation, Steffensen's
substitution method

random numbers
 ran_cgr48: improved random number generator
doing 48bit randomization (portable version, requires
64bit integers)
 ran_seed: initialization of a random number
generator
 ran_shuffle: similar to ran_cgr48, invokes
drand48(3C)
 ran_stauffer: random number generator of
D. Stauffer (famous theoretical physicist from Cologne)
 ran_ecuyer: random number generator of
P. l'Ecuyer (with shuffling)
 ran_vector: unit vector with random
orientation

vector/matrix algebra
 numerous operations implemented as member functions of
our own Vector and Matrix template classes

other
 sort_index: sort elements of a vector,
merge sort method
Some of these subroutines are not available in the C version, and
some are there under a different name.
