Changes in version 2.4.6 (2025-10-22) - Corrected erfz() with erfz(0) = 0. - simpson() DeepSeek code for the 1/3 Simpson rule. Changes in version 2.4.5 - Changed midpoint() to run without Richardson approximation. - In fmincon(), added '...' variables for the numerical gradient. Changes in version 2.4.4 (2023-11-09) - gcd(), Lcm() now require integers as input (G. Rücker reported). - Corrections (missing brackets) in several Rd files. Changes in version 2.4.3 - Corrected a bug in the help file of nelder_mead(). - Added stereographic projection and its inverse as functions stereographic() and stereographic_inv(). Changes in version 2.4.2 (2022-09-22) - Corrected a bug in logit() - 'length_1 error' again. - Replaced 'class() =' with 'inherits(...)' in function ppval(). Changes in version 2.4.1 - Added an example of using inequality constraints with anms(). - Added more vectorized 'distmat2' to the help page of 'distmat'. Changes in version 2.4.0 - hessvec() approximates the multiplication of Hessian and vector (thanks to Ravi Varadhan for pointing out Pearlmutter's method). - hessdiag() computes the diagonal of Hessian (finite differences). Changes in version 2.3.9 - Spherical coordinates better explained in help files. - Deprecated option 'fast' was removed from circlefit(). Changes in version 2.3.8 (2022-03-04) - 'length_1 eror' for logical operators on integral() help page. - Bug in pinv() for complex input, reported by Stephane Laurent. Changes in version 2.3.7 - Added lu_crout(), Crout's algorithm for LU matrix decomposition. - Corrected a small bug in randi(), thanks to Luke Cherveny. Changes in version 2.3.6 (2021-12-07) - Corrected randortho() with return value 'q %% diag(ph) # %% q', as researched and reported by Daniel Kessler; thanks a lot. - Function deeve() requires the x-coordinates to be sorted. - Removed the Nile data (without warning). Changes in version 2.3.5 - Corrected a bug in subspace() - thanks to David Fleischer. - Corrected a small but annoying bug in steep_descent(). - Allows for complex matrices in pinv() (and mldivide()). Changes in version 2.3.4 - Small correction in 'movavg()': default type now is 's'. Changes in version 2.3.3 (2021-01-23) - Forgot to correct URL addresses in the Readme.md file. Changes in version 2.3.2 - Removed and corrected URL addresses from 'http' to 'https'. Changes in version 2.3.1 - 'ellipke' help page: compute circumference of an ellipse. - 'Mode()' now handling all types of NAs (thx. Michael Henry). Changes in version 2.3.0 - circlefit(): option 'fast' is deprecated and will not be used. - gammainc(0, a) returns 0, thanks to Mark Chappell for reporting. - ndims() now returns 1 for vectors and 0 for empty objects. Changes in version 2.2.9 (2019-12-15) - Changed URL reference of Abramowitz and Stegun (link missing). - Fixed warning with the 'try' construct in several functions using 'if(inherits(e, "try-error"))' (help from Bert Gunter). - Link to R Base HTML help page gave a warning (for Windows). Changes in version 2.2.8 - erfi() returns real values when the input values are all real. - hypot() now allows for scalar plus numeric vector as inputs. Changes in version 2.2.7 - Polynomial division with polydiv(); for two plynomials polygcf() finds the greatest common factor; and rootmult() returns the multiplicity of a polynomial root (or 0). - polyroots() refines the result of roots() in case of roots with multiplicities (where roots() is quite inaccurate). Changes in version 2.2.6 - All polynomial functions now accept complex coefficients, esp. roots() finds roots for complex polynomials. - Fixed a bug in laguerre() for zeros of complex polynomials. Changes in version 2.2.5 (2019-04-09) - fsolve() and broyden() are no longer applicable to univariate functions (Morrison-Sherman formula not working in this case). - Alias cgmin() and option 'dfree=F' in fminsearch() are removed, both have been deprecated since half a year. Changes in version 2.2.4 - qpsolve() minimizes quadratic forms such as 0.5 t(x) x - d x with linear quality and inequality constraints. - fmincon() now has an 'augmented Lagrangian' option with a 'variable metric' approach as inner solver. Changes in version 2.2.3 - linearproj() linear projection onto a linear subspace, and affineproj() linear projection onto an affine subspace of R^n. Changes in version 2.2.2 (2018-12-02) - Corrected "length > 1 in coercion to logical" in expm(). Changes in version 2.2.1 - fminunc() unconstrained minimization of nonlinear objective function, based on stripped-down 'Rvmmin' code by John Nash. - 'fmincon()' minimization of nonlinear objective function with constraints; wraps suggested package NlcOptim with SQP method. Changes in version 2.2.0 - Reintroduced 'nelder_mead()' and 'hooke_jeeves()'. - fminsearch() now calls 'Nelder-Mead' or 'Hooke-Jeeves', i.e., derivative-free methods only; 'dfree=F' gets deprecated. Changes in version 2.1.9 - Renamed 'cgmin()' to its original name 'fletcher_powell', alias 'cgmin' is deprecated since this version. - Removed alias 'normest2' that was anyway non-existing. Changes in version 2.1.8 (2018-10-16) - Corrected a bug in hessenberg() reported by Ben Ubah. Changes in version 2.1.7 - Removed the deprecated 'rortho' function, use randortho() instead. Changes in version 2.1.6 - Si(), Ci() sine and cosine integral functions added. - Added dot notation for brent(), bisect(), newton(), halley(), and ridders() -- on request of John Nash for the histRalg project. Changes in version 2.1.4 (2018-01-30) - shubert() implements one-dimensional Shubert-Piyavskii method. - fminsearch() and anms() stop for one-dimensional minimization. Changes in version 2.1.3 - bsxfun() now uses sweep() for matrices in search of higher speed. - direct1d() removed because slow and not effective. Changes in version 2.1.2 - poisson2disk() approximate Poisson disk distribution - Corrected small bug in findpeaks(), reported by Mike Badescu. Changes in version 2.1.1 (2017-11-21) - Added a field "Authors@R" in the DESCRIPTION, deleted others. - Added README.md and NEWS.md (for a future Github repository). - Needed a new version for resubmitting (because of 'survivalsvm') Changes in version 2.1.0 - Package 'quadprog' is now suggested, not imported; the functions quadprog() and lsqlincon() work only when 'quadprog' is installed. Changes in version 2.0.9 - Package byte-compiled on loading (Requires R version >= 3.1.0). Changes in version 2.0.8 - findpeaks() function not checking for NAs (reported by Wesley Burr). - fplot() extra parameters were not handed over to plotting routine. Changes in version 2.0.7 (2017-06-21) - bernstein() generates the Bernstein polynomial B_,_(). - legendre(n,_) corrected for n=0, thanks to Peter W. Marcy. - cgmin() alias for fletcher_powell(), a constraint gradient method. Changes in version 2.0.6 - polyvalm() evaluates a polynomial in the matrix sense. - arnoldi() Arnoldi iteration (incl. Hessenberg matrix). Changes in version 2.0.5 - integral() redesigned, less methods, several starting intervals with regular or random intermediate nodes (similar to MATLAB). - quadgr() corrected as functions vectorized with Vectorize() did not behave as expected with apply(); still needs vectorization. - Help page of quadgk() did not mention the need for vectorization. Changes in version 2.0.4 (2017-04-03) - hessenberg() computes the Hessenberg form of a matrix through Householder transformations (this is named hess() in MATLAB). Changes in version 2.0.3 - Corrected functions with conditions in control statements with conditions of length greater than one: rem(). Changes in version 2.0.2 - isposdef() test for positive definiteness of a (real) matrix. - hooke_jeeves() removed; similar implementations are available in packages 'dfoptim::hjk[b]' and 'adagio::hookejeeves'. Changes in version 2.0.1 - nelder_mead() replaced by an adaptive Nelder-Mead implementation, anms(), following F. Gao and L. Han. - fminsearch() now calls this new version of Nelder-Mead. Changes in version 2.0.0 - incgam(x,a) computes the incomplete upper gamma function using the R function pgamma for higher precision than gammainc(). - Corrected a small oversight in hurstexp(), thnx George Ostrouchov. Changes in version 1.9.9 (2017-01-11) - Slightly changed the description lines on request of CRAN. Changes in version 1.9.8 - whittaker() finally implemented avoiding the sparse matrix package. - nelder_mead() now applies adaptive parameters for the simplicial search, depending on the dimension of the problem space. - psinc(x,n), the so-called periodic sinc function. Changes in version 1.9.7 - shooting() implements the shooting method for boundary value problems of second order differential equations. - interp2() corrected the help page with size(z) = length(y) length(x). - Corrected a small oversight on the help page of Gauss-Laguerre. Changes in version 1.9.6 - haversine() Haversine formula for geographical distances on earth. - trigonometric functions accepting degrees instead of inputs in radians: sind cosd tand cotd secd cscd asind acosd atand acotd asecd acscd atan2d Changes in version 1.9.5 (2016-09-06) - fprintf() mimicks MATLAB's function of the same name. - Added ezsurf(), an easy surface plot following MATLAB. - fplot() is almost an alias for ezplot(); please note that in future versions ez...() will be renamed to f...() according MATLAB 2016/17. Changes in version 1.9.4 - rortho() renamed to randortho(), the underlying code was buggy (not truely random) and has been replaced, thanks to Jan Tuitman. - an error in the final step of calculating approx_energy() was corrected, thanks to Daniel Krefl. Changes in version 1.9.3 (2016-05-29) - bvp() now solves boundary value problems for linear 2nd order ODEs using a 'finite differences' approach and a tridiagonal solver. - polyfit2() has been removed, use polyfix() instead. Changes in version 1.9.2 - romberg() corrected an error estimation that diminished the accuracy. - trapzfun() realizes trapezoidal integration with iterated calculations. Changes in version 1.9.1 - fractalcurve() generates some fractal curves of order n, i.e. the Hilbert, Sierpinski, Snowflake, Dragon, and Molecule curves. - ode23(), ode23s() changed the size of the returned components, now it is similar to what is returned by ode45() and ode78(). - arclength() corrected a boundary condition ('on the left'), added an example how to generate an arc-length parametrization of a curve. Changes in version 1.9.0 - quadprog() solves quadratic programming problems (QP) with linear equality and inequality constraints, based on package 'quadprog'. - lsqlincon() solves linear least-squares problems with linear equality and inequality constraints (as well as bound constraints). - pracma now imports package 'quadprog'. Changes in version 1.8.9 - polyfix() fits a polynomial that exactly passes through given fixed points. polyfit2() will be deprecated in future versions. - Important bug fix for polyApprox() (thanks to Max Marchi). Changes in version 1.8.8 (2015-11-27) - Option 'minpeakdistance' for function findpeaks() added (thanks to Razvan Chereji for providing a workable approach). Changes in version 1.8.7 - Removed invperm(). - 'linear' is now the default method for interp1(). - Cases n = 0, 1 for legendre() corrected (thanks to Nuzhdin Yury). Changes in version 1.8.6 (2015-07-14) - Removed two non-existing links pointing to Gander's pages at the ETHZ. - Removed a link explaining approximate entropy. Changes in version 1.8.5 - Added 'Imports' field in description and 'import' in namespace, as requested for the new R development version. - strrep() renamed to strRep(), because of a new function in R Base. Changes in version 1.8.4 - bernoulli() calculates the Bernoulli numbers and polynomials. - factorial2() the product of all even resp. odd integers below n. Changes in version 1.8.3 (2015-02-08) - Deleted some URLs that were not working properly anymore. Changes in version 1.8.2 - Special functions gathered under topics 'specfun' resp. 'specmat'. Changes in version 1.8.1 - sumalt() accelerating (infinite) alternating sums. - Option 'fast=FALSE' in circlefit() to avoid optim(). - Added Gauss' AGM-based computation of pi to agmean(). Changes in version 1.8.0 - hurstexp() amended for vectors of uneven length. Changes in version 1.7.9 (2014-11-15) - qpspecial() special quadratic programming solver. - Reintroduces the 'tol' keyword in fminbnd() for compatibility. Changes in version 1.7.8 - bulirsch_stoer() Bulirsch-Stoer method for solving ordinary differential equations with high accuracy. - midpoint() implements the midpoint rule for solving ODEs combined with Richardson extrapolation for high accuracy. Changes in version 1.7.7 (2014-11-03) - lufact() LU factorization with partial pivoting; lusys() solves linear systems through Gaussian elimination. Changes in version 1.7.6 - ode23s() for stiff ordinary differential equations refining Rosenbrock's method (supply Jacobian if available). - euler_heun() Euler-Heun ODE solver has been corrected. Changes in version 1.7.5 - fminbnd() much improved implementation of Brent's method; added challenging example by Trefethen to the help page. - lambertWn() for the second (real) branch of Lambert W. - Function name alias cintegral() removed. Changes in version 1.7.4 - hooke_jeeves() replaced by a much more efficient implementation and equipped with a special approach to bound constraints. - nelder_mead() replaced by a much more efficient implementation and utilizing a transformation to handle bound constraints; functions nelmin() and nelminb() are not exported anymore. Changes in version 1.7.3 (2014-10-12) - quadinf() now uses the double exponential method with the tanh-sinh quadrature scheme for (semi-)infinite intervals. - Removed the not-exported and too slow .quadcc() function. - brent() alias for brentDekker(), newton() for newtonRaphson(). Changes in version 1.7.2 - pchipfun() function wrapper around pchip(); missing error handling in pchip() was added. - hurst() removed, functionality merged with hurstexp(). - Nile overflow data set 1871--1984 added as time series. Changes in version 1.7.1 - bits() binary representation of a number as string. - agmean() returns AGM, no of iterations, and estimated precision. - trapz() tiny improvement on error handling. Changes in version 1.7.0 (2014-07-01) - ode45() ODE solver using Dormand-Prince (4,5) coefficients. - ode78() ODE solver using Fehlberg (7,8) coefficients. - cintegral() renamed to line_integral(). Changes in version 1.6.9 - Version 1.6.8 "Failed to build" on R-Forge. [Maybe it's time to move pracma to a github repository.] Changes in version 1.6.8 - nelmin() a more efficient and accurate version of Nelder-Mead. - nelminb() Nelder-Mead in bounded regions (applies a transformation). Changes in version 1.6.7 - trisolve() stopping for singular tridiagonal matrices. - romberg() slightly improved accuracy and speed. Changes in version 1.6.6 - Corrected rref() (as pointed out by Peter Audano). Changes in version 1.6.5 - lsqnonneg() changed to an active-set approach. - bisect() trimmed bisection to return almost exact results. Changes in version 1.6.4 (2014-02-06) - halley() Halley's variant of the Newton-Raphson method. - numderiv() corrected Richardson's method by breaking the loop. Changes in version 1.6.3 - lambertWp() improved inner accuracy from 1e-12 to 1e-15. - complexstepJ() renamed to jacobian_csd(); introduced grad_csd(). - hessian_csd() applies Richardson's method as the second step, and the same for laplacian_csd(). Changes in version 1.6.2 - Removed zeroin(); for fzero() a variation of Brent-Dekker is used, that applies cubic instead of quadratic interpolation. - Corrected an oversight in newtonRaphson(). - brentDekker() returns a list now. Changes in version 1.6.1 (2014-01-14) - samp_entropy() complements approx_entropy() for short time series. - Removed NEWS.Rd and NEWS.pdf in favour of NEWS. Changes in version 1.6.0 - integral3() now handles functions as inner interval limits. - poly_crossings() calculates crossing points of two polygons. - erfz() complex error function vectorized (thanks to Michael Lachmann). Changes in version 1.5.9 - muller() implements Muller's root-finding method [Mueller, 1956], especially suited for polynomials and complex functions. - Inserted a safeguard for the distmat() function to prevent different results on Mac OS X, (Ubuntu) Linux, and Windows operating systems. - Removed pltcross() and kmeanspp(). Changes in version 1.5.8 (2013-11-28) - interp1() with option method ``spline'' now computes Moler's spline functions, for compatibility with MATLAB (hint by Boudewijn Klijn). Changes in version 1.5.7 - Corrected parameter 'waypoints' in cintegral(). Changes in version 1.5.6 - odregress() orthogonal distance (or: total least-squares) regression. - Changed maintainer name to its long form (CRAN request). Changes in version 1.5.5 (2013-09-15) - L1linreg() L1 (a.k.a. LAD or median) linear regression. - geo_median() geometric median (minimizes sum of distances). Changes in version 1.5.4 - rectint() rectangular intersection areas (MATLAB style). - cumtrapz() cumulative trapezoidal integration (MATLAB style). - Some corrections to help pages and function names. Changes in version 1.5.3 - arclength() length of a parametrized curve in n-dimensional space, w/ improved convergence by applying Richardson's extrapolation method. - legendre() associated Legendre functions (MATLAB style). Changes in version 1.5.2 - poly_center() calculates the center coordinates of a polygon. - poly_length() calculates the (euclidean) length of a polygon. - polyarea() corrected, returns the true, not the absolute value. Changes in version 1.5.1 - fsolve() will use broyden() if m = n; fzsolve() the same; additionally, improved broyden() and gaussNewton(). - ezplot() can draw markers on the line, with equal distances measured along the curve length. Changes in version 1.5.0 (2013-08-10) - gmres() generalized minimum residual method. - nearest_spd() finds nearest symmetric positive-definite matrix. - eps() floating point relative accuracy. Changes in version 1.4.9 - lapacian() now works in n dimensions, not only for n = 2. - mldivide(), mrdivide() corrected a severe typo. - numderiv(), numdiff() start with h = 1/2 instead of h = 1. - figure() platform-independent by using dev.new(). Changes in version 1.4.8 - findzeros() now finds 'quadratic' roots, too. - pdist2() added as an alias for distmat(), while pdist(X) now is distmat(X, X) (MATLAB style). Changes in version 1.4.7 - histcc() histogram with optimized number of bins. - Example of correction term for the trapz() integration. Changes in version 1.4.6 - psi() Psi polygamma function (MATLAB style). - rosenbrock() and rastrigin() functions removed. Changes in version 1.4.5 (2013-03-25) - quadcc() new, iterative Clenshaw-Curtis quadrature. - squareform() formats distance matrix (MATLAB style). Changes in version 1.4.4 - integral2() implements the two-dimensional numerical integration approach `TwoD', i.e. Gauss-Kronrod (3, 7)-points on rectangles. - integral3() three-dimensional integration based on integral2(). - triplequad() 3-dim. integration based on dblquad() (MATLAB style). Changes in version 1.4.3 - integral() combines adaptive numerical integration procedures. - cintegral() complex line integrals (rectangles and curves). Changes in version 1.4.2 - linprog() linear programming solver for linear equality and inequality constraints. Changes in version 1.4.1 - romberg() Romberg integration completely rewritten. - idivide() integer division with different roundings. Changes in version 1.4.0 (2013-02-12) - fderiv(), taylor() expanded to higher orders. - itersolve() iteration methods for solving linear systems. - lu() LU decomposition with different schemes (w/o pivoting). Changes in version 1.3.9 - pdist() as an alias for distmat() (MATLAB style). - fftshift(), ifftshift() shifting Fourier frequencies. - Improved grad(), jacobian(), hessian(), and laplacian(). Changes in version 1.3.8 (2013-01-11) - Smaller corrections, e.g., removed deprecated 'is.real'; no startup messages anymore. - geomean(), harmmean(), trimmean() geometric, harmonic, and trimmed arithmetic mean (MATLAB style). - agmean() algebraic-geometric mean. Changes in version 1.3.7 - mexpfit() multi-exponentiell fitting, separating linear and nonlinear parts of the problem. Changes in version 1.3.6 - lsqsep() separable least-squares fitting. - lsqcurvefit() nonlinear least-squares curve fitting. Changes in version 1.3.5 - cd(), pwd() directory functions (MATLAB style). - rand(), randn() changed to accept size() as input. - whos(), what() corrected for empty lists resp. directories. Changes in version 1.3.4 - what(), who(), whos(), ver() (MATLAB style). - semilogx(), semilogy(), loglog() logarithmic plots (MATLAB style) Changes in version 1.3.3 (2012-12-13) - quadv() vectorized integration. - ezpolar() easy access to the polar() function. - sortrows() sorting rows of matrices (MATLAB style). - null() alias for nullspace function (MATLAB style). - eigjacobi() Jacobi's method for eigenvalues and eigenvectors. Changes in version 1.3.2 - ellipke(), ellipj() elliptic and Jacobi elliptic integrals. - expint() implements E1 and Ei, the exponential integrals, with aliases expint_E1() and expint_Ei(). - li() the logarithmic integral (w/o offset). Changes in version 1.3.1 (2012-12-07) - Explicitely listing about 200 MATLAB-emulating function( name)s. - Dismissed matlab(), using it now for infos only, not assigning any MATLAB function names to the environment (because of CRAN policies). Changes in version 1.3.0 - cot(), csc(), sec() cotangens, cosecans, and secans functions. - acot(), acsc(), asec() inverse cotangens, cosecans, secans functions. - coth(), csch(), sech() hyperbolic cotangens, cosecans, secans functions. - acoth(), acsch(), asech() inverse hyperbolic cotangens, cosecans, and secans functions. Changes in version 1.2.9 - bvp() changed to solve second order boundary value problems. - trisolve() solves tridiagonal linear equation systems. - curvefit() fits points in the plane with a polynomial curve. Changes in version 1.2.8 - lsqlin() least-squares solver with linear equality constraints. - pinv() now works like MASS::ginv() for singular matrices. - Added the end-';' feature to str2num(). - toc() added invisible return value. Changes in version 1.2.7 - procrustes() solving the Procrustes problem, and kabsch() implements the Kabsch algorithm. - kriging() ordinary and simple Kriging interpolation. - Corrected some stupid errors in str2num(). Changes in version 1.2.6 - akimaInterp() univariate Akima interpolation. - Moved transfinite() to package 'adagio'. Changes in version 1.2.5 (2012-11-08) - histc() Histogram-like counting (MATLAB style). - Added warning to complexstep() if imaginary part is zero. Changes in version 1.2.4 - Added option 'pinv' to mldivide() to return same results as MATLAB. - str2num(), num2str() conversion functions (MATLAB style). - Removed some 'author' entries on help pages. Changes in version 1.2.3 - Renamed mrank() to Rank(). - Corrected nullspace() [thanks to Stephane Laurent], which now agrees with Octave's null() function (MASS:Null appears buggy, too). - Corrected gaussNewton() and fsolve() [thanks to Etienne Chamayou]. Changes in version 1.2.2 - bsxfun() apply binary function elementwise (MATLAB style). - added the analytic solution for the example in bvp(). Changes in version 1.2.1 - rosenbrock() added, moved testfunctions to 'adagio' package. - euler_heun() improved Euler method for solving ODEs. - logit() function added to sigmoid(). - Keyword 'ode' introduced. Changes in version 1.2.0 (2012-09-27) - matlab() can reinstall MATLAB function names. Changes in version 1.1.9 - gcd(), lcm() greatest common divisor, least common multiple now working on a vector of integers. - Removed number-theoretic functions: eulersPhi(), moebiusFun(), mertensFun(), sigma(), tau(), omega(), Omega(), primes2(), twinPrimes(), nextPrime(), previousPrime(), modpower(), modorder(), modinv(), modlin(), primroot(), contfrac(), coprime(), GCD(), LCM(), extGCD(), (these functions are now available in the 'numbers' package). Changes in version 1.1.8 - ezcontour(), ezmesh() wrappers for contour(), image(), persp(). - erfi() imaginary error function. Changes in version 1.1.7 - moler() Moler matrix Changes in version 1.1.6 (2012-07-20) - Removed '.Rapphistory' from the tests directory (again) [and use "--as-cran" for the checks]. - disp() display text or array (MATLAB Style), i.e. cat() with newline. Changes in version 1.1.5 - Renamed functions with capital first letter to avoid name clashes: mtrace -> Trace, mdiag -> Diag, strtrim -> strTrim, vnorm -> Norm, reshape -> Reshape, find -> finds, fix -> Fix, poly ->Poly, mode -> Mode, real -> Real, imag -> Imag, toeplitz -> Toeplitz. Changes in version 1.1.4 - gammainc() (lower and upper) incomplete gamma function, also the regularized gamma function, all allowing negative x values. - polylog() the polylogarithm functions for |z| < 1 and n >= -4 . Changes in version 1.1.3 - fminsearch() now implements Nelder-Mead (similar to optim), and Fletcher-Powell when "dfree=FALSE" is chosen. - Test functions rosenbrock() and rastrigin(). Changes in version 1.1.2 - nelder_mead() implements Nelder-Mead for nonlinear optimization. - hooke-jeeves() Hooke-Jeeves algorithm for direct search. - fletcher_powell() Davidon-Fletcher-Powell method for function minimization (alternative to BFGS approach). - steep_descent() minimization of functions using steepest descent. Changes in version 1.1.1 - fminbnd() now implements Brent's function minimization algorithm with golden section search and parabolic interpolation (same as optimize). - transfinite() transformation function between bounded and unbounded (box constraint) regions. Changes in version 1.1.0 (2012-06-06) - hurst(), hurstexp() calculate the Hurst exponent of a time series. - Updated the NEWS.Rd file. Changes in version 1.0.9 - lsqnonneg() solves nonnegative least-squares problems by using the trick "x --> exp(x)" and applying lsqnonlin(); example function lsqcurvefit() for nonlinear curve fitting. - Renamed ridder() to ridders(), thanks to Robert Monfera for pointing it out (he also suggested a multi-dimensional variant). Changes in version 1.0.8 - movavg() moving average of types "simple", "weighted", "modified", "exponential" (EMA), or "triangular". - modlin() solves modular linear equations. Changes in version 1.0.7 - lsqnonlin() solves nonlinear least-squares problems using the Levenberg-Marquardt approach. - renamed froots() to findzeros(), and fmins() to findmins(). Changes in version 1.0.6 - fornberg() finite difference (i.e., polynomial) approximation of derivatives for unevenly spaced grid points -- Fornberg's method. Changes in version 1.0.5 (2012-04-19) - randsample() randomly sampling, alias for sample (MATLAB style). - rands() generates uniform random points on an N-sphere. - Added tic(), toc() measuring elapsed time (MATLAB style). - previousPrime() finds the next prime below a number. Changes in version 1.0.4 - invlap() computes the inverse Lapacian numerically. - ppfit() piecewise polynomial fitting procedure. Changes in version 1.0.3 - cubicspline() interpolating cubic spline (w/ endpoint conditions). - mkpp() and ppval() for piecewise polynomial structures. Changes in version 1.0.2 - accumarray() resembles the related MATLAB function more closely. - invperm() returns the inverse of a permutation. - randperm() changed to make it more MATLAB-like. Changes in version 1.0.1 (2012-03-12) - plotyy() corrected right ordinate, prettying the labels. - peaks() peaks function (MATLAB style). Changes in version 1.0.0 - Updated the NEWS.Rd file. Changes in version 0.9.9 - qrSolve solves overdetermined system of linear equations. - DSCsearch() removed, now in package 'pracopt'. - randp() found a better, non-selective approach. Changes in version 0.9.8 - gramSchmidt() modified Gram-Schmidt process. - householder() Householder reflections and QR decomposition. - givens() Givens rotation and QR decomposition. - corrected a small error in ridder() (thanks to Roger Harbord); new example of how to use ridder() with Rmpfr for multiple precision. Changes in version 0.9.7 - erf() corrected, erfc() and erfcx() as new functions, including their inverses erfinv() and erfcinv(). - hypot() now numerically more stable (thanks to Jerry Lewis). Changes in version 0.9.6 (2012-01-26) - Changed third example for dblquad() [new Windows toolchain problem]. - Deactivated the test for gammaz() because of problems on Solaris. Changes in version 0.9.5 - kmeanspp() kmeans++ clustering algorithm. - hampel() with new option, fuelled by a blog entry of Ron Pearson. Changes in version 0.9.4 - DSCsearch() Davies-Swann-Campey search in one dimension. - Improved modpower() through modular exponentiation. added lehmann_test() Lehmann's primality test as example. - Corrected polar() and andrewsplot(). Changes in version 0.9.3 - direct1d() one-dimensional version of the DIRECT algorithm for global function minimization. Changes in version 0.9.2 - approx_entropy() approximate entropy of a time series. - circshift() circularly shifting arrays (MATLAB Style). Changes in version 0.9.1 (2011-12-16) - plotyy() plots curves with y-axes on both left and right side. - fplot() plots components of a multivariate function. Changes in version 0.9.0 - errorbar() routine for plotting error bars in both directions. - whittaker() Whittaker-Henderson smoothing** Not yet running** . - rref() reduced row echelon form. Changes in version 0.8.9 - cutpoints() automatically finds cutting points based on gaps. - hausdorff_dist calculates the Hausdorff distance / Hausdorff dimension. - nnz() number of non-zeros elements (MATLAB style). Changes in version 0.8.8 - polar() for polar plots (MATLAB style), see the example plots. - andrewsplot() plots Andrews curves in polar coordinates. - Vectorized: cart2sph(), sph2cart(), cart2pol(), pol2cart(). Changes in version 0.8.7 - deg2rad(), rad2deg(). - figure() MATLAB style and pltcross() plotting crosses. Changes in version 0.8.6 (2011-11-22) - ridder() Ridder's method for zero finding of univariate functions. Changes in version 0.8.5 - sqrtm() matrix square root, based on Denman-Beavers iteration, rootm() matrix p-th root, computing a complex contour integral, signm() matrix sign function. o fzero() now uses the new zeroin() function, i.e., a Brent-Dekker approach instead of refering to uniroot(). - twinPrimes() twin primes in a given interval, and nextPrime() will find the next higher prime. Changes in version 0.8.4 - Transformations between cartesian, spherical, polar and cylindrical coordinate systems: cart2sph(), sph2cart(), cart2pol(), pol2cart(). - randp() uniformly random points in the unit circle. Changes in version 0.8.3 - accumarray() grouping elements and applying a function to each group. - uniq() MATLAB-style 'unique' function, allsums() in the examples. - small correction to fsolve(), mentioned on the 'check summary' page. Changes in version 0.8.2 - newmark() Newmark's method for solving second order differential equations of the form y''(t) = f(t, y(t), y'(t)) on [t1, t2]. - cranknic() Crank-Nicolson 'ivp' solver, combining the forward and backward Euler methods for ordinary differential equations. Changes in version 0.8.1 (2011-11-02) - Corrected pinv() for (nearly) singular matrices. - Renamed ifactor() to factors(). Changes in version 0.8.0 - Minor corrections and improvements to the 'pracma.pdf' manual, incl. numdiff(), refindall(), trigApprox(), and subspace(). Changes in version 0.7.9 - spinterp() monotonic (and later on shape-preserving) interpolation following the approach of Delbourgo and Gregory. Changes in version 0.7.8 - bvp() solves boundary value problems of the following kind: -u''(x) + c1 u'(x) + c2 u(x) = f(x) for x in [a, b]. Changes in version 0.7.7 - primes2(n1, n2) will return all prime numbers betweeen n1 and n2 (without storing the numbers from sqrt(n2) up to n2). Changes in version 0.7.6 - gaussNewton() for function minimization and solving systems of nonlinear equations. fsolve() as a wrapper for it. - fzsolve() for root finding of complex functions. - softline() Fletcher's inexact linesearch algorithm. Changes in version 0.7.5 (2011-07-27) - Put NEWS.Rd in the /inst subdirectory (and NEWS.pdf in /doc), thanks to Kurt Hornik; slightly changed the version numbering. Changes in version 0.7-4 - rortho() generate random orthogonal matrix of size n. - Titanium data set for testing fitting procedures. Changes in version 0.7-3 (2011-07-23) - erf() and erfc() error and complementary error functions (MATLAB style) as (almost) aliases for pnorm(). - erfz() complex error function. Changes in version 0.7-2 - broyden() quasi-Newton root finding method for systems of nonlinear equations. Changes in version 0.7-1 - cross() has been vectorized (remark on R-help). Changes in version 0.7-0 - Sigmoid and Einstein functions. Changes in version 0.6-9 - Runge-Kutta-Fehlberg method of order (5,4). Changes in version 0.6-8 - triquad() Gaussian quadrature over triangles. - cotes() Newton-Cotes integration formulae for 2 to 8 nodes. Changes in version 0.6-7 - lagrangeInterp(), newtonInterp() Lagrange and Newton polynomial interpolation, neville() Neville's methods. - tril(), triu() extracting triangular matrices (MATLAB style). Changes in version 0.6-6 - charpoly() computes the characteristic polynomial, the determinant, and the inverse for matrices that are relativly small, applying the Faddejew-Leverrier method. - froots() to find all roots (also of second or higher order) of a univariate function in a given interval. The same with fmins() to find all minima. Changes in version 0.6-5 - Adams-Bashford and Adams-Moulton (i.e., multi-step) methods for ordinary differential equations in function abm3pc(). Changes in version 0.6-4 - Changed the description to be more precise about the package. Changes in version 0.6-3 (2011-06-29) - rationalfit() rational function approximation - ratinterp() rational interpolation a la Burlisch-Stoer. Changes in version 0.6-2 - pade() Pade approximation. Changes in version 0.6-1 - quadgk() adaptive Gauss-Kronrod quadrature. Changes in version 0.6-0 - Added differential equation example to expm()'s help page. - Changed NEWS file to become simpler (no subsections). Changes in version 0.5-9 - quadl() recursive adaptive Gauss-Lobatto quadrature. - simpadpt() another recursively adaptive Simpson's rule. - Added testing procedures for all integration routines; corrected, refined some of these procedures. Changes in version 0.5-8 - quadgr() Gaussian Quadrature with Richardson extrapolation, can handle singularities at endpoints and (half-)infinite intervals. Changes in version 0.5-7 - expm() for matrix exponentials. - clenshaw_curtis() the Clenshaw-Curtis quadrature formula. Changes in version 0.5-6 - simpson2d() as non-adaptive 2-dimensional Simpson integration. - dblquad() twofold application of internal function integrate(). Changes in version 0.5-5 - gaussHermite() and gaussLaguerre() for infinite intervals. - Fresnel integrals fresnelS() and frenelC(). Changes in version 0.5-4 - gaussLegendre() computes coefficients for Gauss Quadrature, and quad2d() uses these weights for 2-dimensional integration. - quadinf() wrapper for integrate() on infinite intervals. Changes in version 0.5-3 (2011-06-08) - ode23() solving first order (systems of) differential equations. - barylag2d() 2-dimensional barycentric Lagrange interpolation. Changes in version 0.5-2 - interp2() for two-dimensional interpolation. - gradient() now works in two dimensions too. Changes in version 0.5-1 - fzero(), fminbnd(), fminsearch(), fsolve() as aliases for uniroot(), optimize(), optim() with Nelder-Mead, newtonsys(). Changes in version 0.5-0 - Corrections to help pages. Changes in version 0.4-9 - romberg() and gauss_kronrod() for numerical integration. - Richardson's extrapolation in numderiv(), numdiff(). - Discrete numerical derivatives (one dimension): gradient(). Changes in version 0.4-8 - Numerical function derivatives: fderiv(), grad(). - Specialized operators: hessian(), laplacian(). - Application: taylor(). Changes in version 0.4-7 - plot vector fields: quiver() and vectorfield(). - findintervals(). - Corrections in deval(), deeve(), using findintervals(). Changes in version 0.4-6 - Laguerre's method laguerre(). - rk4() and rk4sys() classical fourth order Runge-Kutta. - deval(), deeve() evaluate ODE solutions. Changes in version 0.4-5 - Lebesgue coefficient: lebesgue(). - poly2str() for string representation of a polynomial. Changes in version 0.4-4 - Dirichlet's eta() and Riemann's zeta() function. - rmserr() different accuracy measures; std_err() standard error. Changes in version 0.4-3 - polypow() and polytrans() for polynomials. - polyApprox() polynomial approximation using Chebyshev. - trigPoly(), trigApprox() for trigonometric regression. Changes in version 0.4-2 - segm_intersect() and segm_distance() segment distances. - inpolygon(). Changes in version 0.4-1 - polyadd() polynomial addition. - conv() and deconv() time series (de)convolution. - detrend() removes (piecewise) linear trends. - ifft() for normalized inverse Fast Fourier Transform. Changes in version 0.4-0 (2011-05-11) - Added tests for functions since version 0.3-7. Changes in version 0.3-9 - and() and or(). Changes in version 0.3-8 - pchip() and option `cubic' for interp1() interpolation. - The complex gamma functions gammaz(). - hadamard() and toeplitz() matrices. Changes in version 0.3-7 - Rank of a matrix, mrank(), and nullspace() for the kernel. - orth(), orthogonal basis of the image space, and subspace() determines the angle between two subspaces. - normest() for estimating the (Frobenius) norm of a matrix, and cond() determines the condition number of a matrix. Changes in version 0.3-6 - fact(), more accurate than the R internal function `factorial'. - ezplot() as an alias for curve(), but with option ``fill = TRUE''. - aitken() for accelerating iterations. - Renamed polycnv() to polymul(). - Renamed outlierMAD() to hampel(). Changes in version 0.3-5 - Lambert W function lambertWp() for the real principal branch. - ``Complex Step'' derivation with complexstep() and complexstepJ(). Changes in version 0.3-4 - Barycentric Lagrange interpolation through barylag(). - polyfit2() fits a polynomial that exactly meets one additional point. - Added more references to the help entry `pracma-package.Rd'. Changes in version 0.3-3 - hornerdefl() for also returning the deflated polynomial. - newtonHorner() combining Newton's method and the Horner scheme for root finding for polynomials. - jacobian() computes the Jacobian of a function R^n --> R^m as simple numerical derivative. - newtonsys() applies Newton's method to functions R^n --> R^n with special application to root finding of complex functions. - newton() renamed to newtonRaphson(). Changes in version 0.3-2 - Sorting functions: bubbleSort(), insertionSort(), selectionSort(), shellSort(), heapSort(), mergeSort(), mergeOrdered(), quickSort(), quickSortx(), is.sorted(), and testSort(). - Functions from number theory: eulersPhi(), moebiusFun() and the mertensFun(), sigma(), tau(), omega(), and Omega(). Changes in version 0.3-1 - Chebyshev polynomials of the first kind: chebPoly(), chebCoeff(), and chebApprox(). Changes in version 0.3-0 (2011-04-10) - New version of NEWS.Rd, NEWS.pdf. - More test functions for root finding and quadrature. Changes in version 0.2-9 - fnorm() and the Runge function runge(). - contfrac(), rat(), and rats() for continuous fractions. - meshgrid() and magic(). Changes in version 0.2-8 - quad() adaptive Simpson quadrature. - Minimum finding with fibsearch() and golden_ratio(). - Root finding with newton(), secant(), and brentDekker(). Changes in version 0.2-7 - Regular expression functions regexp(), regexpi(), regexprep() and refindall(). Changes in version 0.2-6 - String functions blanks(), strtrim(), deblank(), strjust(), strrep(). - interp1() one-dimensional interpolation (incl. spline) Changes in version 0.2-5 - MATLAB functions mode(), clear() and beep(). Changes in version 0.2-4 - primroot() finds the smallest primitive root modulo a given n; needed functions are modpower() and modorder(). - humps() and sinc(): MATLAB test functions. - Root finding through bisection: bisect(), regulaFalsi(). - outlierMAD(), findpeaks(), and piecewise(). - polycnv() for polynomial multiplication. - Functions extgcd(), gcd(), and lcm() have been renamed to extGCD(), GCD(), and LCM() respectively. Changes in version 0.2-3 - strfind(), strfindi(), and findstr(). - circlefit() fitting a circle to plane points. - mldivide() and mrdivide(), emulating the MATLAB backslash operator. Changes in version 0.2-2 (2011-03-19) - vnorm() vector norm - Warning about a nasty "non-ASCII input" in the savgol.RD file resolved. Changes in version 0.2-1 - horner() implementing the horner scheme for evaluating a polynomial and its derivative. - savgol() Savitzki-Golay smoothing and needed pseudoinverse pinv(). Changes in version 0.2-0 - Package renamed to 'pracma' to avoid name clashes with packages such as 'matlab' that are sticking closer to the original. - Added 'pracma-package' section to the manual. Changes in version 0.1-9 - reshape(), repmat(), and blkdiag() matrix functions. - combs() chooses all combinations of k elements out of n, and randcomb() generates a random selection. - perms() generates all permutations, randperm() a random permutation. - Pascal triangle as pascal(); nchoosek() returns binomial coefficients. - Some string functions: strcmp(), strcmpi(), strcat(). Changes in version 0.1-8 - std() as refinement of the standard deviation function. - ceil() and fix() as aliases for ceiling() and trunc(). [floor() and round() already exist in R.] - Modulo functions mod(), rem() and integer division idiv(). - Integer functions related to the Euclidean algorithm: extgcd(), gcd(), lcm(), coprime(), and modinv(). - distmat() and crossn(), the vector product in n-dimensional space. Changes in version 0.1-7 - size(), numel(), ndims(), isempty(), and find(). - eye(), ones(), zeros(). - Functions returning random numbers: rand(), randn(), randi(). - linspace(), logspace(), and logseq() for linearly, logarithmically, and exponentially spaced sequences. Changes in version 0.1-6 - Matrix functions mdiag() and mtrace() added. inv() is introduced as an alias for solve() in R. - Generate special matrices hankel(), rosser(), and wilkinson(). kron() is an alias for the R function kronecker(). - Renamed factors() to ifactor() to distinguish it more clearly from factors as used in R. Changes in version 0.1-5 - Added function for flipping or rotating numeric and complex matrices: flipdim(). flipud(), fliplr(), and rot90(). Changes in version 0.1-4 - Added functions for generating sequences of (log-)linearly spaced numeric values: linspace() and logspace(). - Added basic complex functions real(), imag(), conj(), and angle() which are essentially only aliases of the R functions Re(), Im(), or Conj(). angle() returns the angle of a complex number in radians. The R function Mod() is here only available as abs(). Changes in version 0.1-3 - Added compan() function for the `companion' matrix; the eig() function is an alias for the R eigen()values function. - Added the polynomial functions poly(), polyder(), polyfit(), polyint(), and polyval(). - roots() returns real and complex roots of polynomials. - Simplified the trapz() function. Changes in version 0.1-2 - Added functions from number theory: primes(), isprime() and factors(). The corresponding function for factors() in MATLAB/Octave is called factor(), but that name should not be shadowed in R! - Added the polyarea() and trapz() functions. Changes in version 0.1-1 - Added some simple functions such as nthroot(), pow2(), and nextpow2(). - dot() and cross() functions for scalar and vector product. - Generate matrices through vander() and hilb(). Changes in version 0.1-0 INSTALLATION - 'pracma' will be a pure R package without using any source code. Therefore, installation will be immediate on all platforms. INTENTION - This package provides R implementations of more advanced math functions from MATLAB and Octave (and the Euler Math Toolbox) with a special view on optimization and time series routines.