# MathPHP Change Log

## v2.5.0 - 2021-11-21

### New Features
* Special function `logbeta`
* Special function `logGamma`
* Special function `logGammaCorr`
* Special function `stirlingError`

### Improvements
* Improvements in StudentT continuous distribution
* Improvements in special function `gamma`
* Improvements in special function `beta`

### Bug Fixes
* Issue 393 (regularizedIncompleteBeta NAN)
* Issue 429 (Linear regression CI division by zero)

## v2.4.0 - 2021-07-27

### New Features
* Complex Exponential (`exp`)
* Complex Exponentiation (`pow`)
* Zipf's Law Discrete Distribution
* Generalized harmonic non-integer sequence

### Improvements
* Fixed Complex `polarForm` to compute the right values
* Fixed `hyperharnomic` non-integer sequence. Previously was computing the wrong thing
* Fixed how `ArbitraryInterger` handles `pow` of negative exponents

### Backwards Incompatible Changes
* Complex `polarForm` now returns an array rather than a Complex number, as the Complex return was incorrect
* Interface to `hyperharmonic` non-integer sequence changed due to previous implementation being incorrect

## v2.3.0 - 2021-07-14

### New Features
* Matrix SVD (Singular Value Decomposition)
* Polynomial companion matrix

## v2.2.0 - 2021-07-11

### New Features
* PLS (Partial Least Squares Regression)

### Improvements
* Add custom `__debugInfo` to `NumericMatrix`

## v2.1.0 - 2021-07-07

### New Features
* Quaternion numbers

## v2.0.0 - 2021-05-09

### New Features
* Matrix Improvements
  * `walk` method to map a function to all values without mutation or returning a value
  * `MatrixFactory` creates more matrix types
  * `MatrixFactory::createNumeric` to create `NumericMatrix` types
  * `MatrixFactory::createFromRowVector`
  * `MatrixFactory::createFromColumnVector`
  * Internal `ObjectMatrix` improvements
    * Add `trace`
    * Add `scalarMultiply`
  * Add initial `ComplexMatrix`
* Sample data People

### Improvements
* Bug fixes
  * Issue 414 fixed - PCA/Eigenvalue convergence
  * Issue 413 fixed - matrix solve with singular matrix using RREF

## Migration - Upgrading to v2.0 from v1.0
* PHP minimum version now 7.2 (was 7.0)
* Deprecated code removed (backwards-incompatible change)
  * `MathPHP\Statistics\Distance::kullbackLeiblerDivergence` removed (Use `MathPHP\Statistics\Divergence::kullbackLeibler` instead)
  * `MathPHP\Statistics\Distance::jensenShannonDivergence` removed (Use `MathPHP\Statistics\Divergence::jensenShannon` instead)
  * Matrix Decompositions no longer implement `\ArrayAccess` interface to access decomposition matrixes. Use properties instead.
    * `MathPHP\LinearAlgebra\Decomposition\Cholesky`
      * `$cholesky['L']`, `$cholesky['Lᵀ']`, `$cholesky['LT']` removed, use `$cholesky->L`, `$cholesky->Lᵀ`, `$cholesky->LT` instead.
    * `MathPHP\LinearAlgebra\Decomposition\Crout`
      * `$crout['L']`, `$crout['U']` removed, use `$crout->L`, `$crout->U` instead.
    * `MathPHP\LinearAlgebra\Decomposition\LU`
      * `$LU['L']`, `LU['U']`, `LU['P']` removed, use `$LU->L`, `$LU->U`, `$LU->P` instead.
    * `MathPHP\LinearAlgebra\Decomposition\QR`
      * `$QR['Q']`, `$QR['R']` removed, use `$QR->Q`, `$QR->R` instead.
* Methods renamed (backwards-incompatible change)
  * `MathPHP\Statistics\Distance::bhattacharyyaDistance` renamed to `MathPHP\Statistics\Distance::bhattacharyya`
  * `MathPHP\Statistics\Distance::hellingerDistance` renamed to `MathPHP\Statistics\Distance::hellinger`
* Moved Functionality (backwards-incompatible change)
  * `MathPHP\Functions\Polynomial` moved to `MathPHP\Expression\Polynomial`
  * `MathPHP\Functions\Piecewise` moved to `MathPHP\Expression\Piecewise`
* Matrix internal refactoring
  * Note: These changes will not affect any client code as long as matrices were created using `MatrixFactory`.
  * `Matrix` is not a base abstract class for all matrix classes to extend
  * `Matrix` renamed `NumericMatrix`
  * `Matrix` base method `createZeroValue`
    * Use case is various `ObjectMatrix` classes that implement `ObjectArithmetic`
  * `RowVector` removed. Use `MatrixFactory::createFromRowVector` instead
  * `ColumnVector` removed. Use `MatrixFactory::createFromColumnVector` instead

## v1.11.0 - 2021-05-09

### Improvements
* Bugfix (Issue 413): Matrix solve with singular matrix using RREF
* Bugfix (Issue 414): PCA/Eigenvalue convergence

## v1.10.0 - 2020-12-19

### Improvements
* Bugfix (Issue 356): Fix Finance IRR NANs

## v1.9.0 - 2020-12-13

### New Features
* Vector min and max
* Arithmetic isqrt (integer square root)

### Improvements
* Remove Travis CI (Moved CI to Github Actions in v1.8.0 release)
* Rearrange non-code files

## v1.8.0 - 2020-12-11

### Improvements
* Improve permutations algorithm to be more efficient and more numerically stable
* Qualify PHP function names with root namespace
* Move CI to Github Actions

## v1.7.0 - 2020-11-15

### New Features
* Algebra linear equation of one variable
* Rational number inverse
* Rational number pow

### Improvements
* Improve combinations algorithm to be more efficient and more numerically stable
* Internal Matrix class reorganization

## v1.6.0 - 2020-10-22

### New Features
* Special function regularized lower incomplete gamma
* Cereal sample data set

### Improvements
* Define boundary condition for lower incomplete gamma function

## v1.5.0 - 2020-10-12

### New Features
* Matrix LU solve
* Matrix QR solve

### Improvements
* Bugfix (Issue 386) Matrix solve improvements
* Matrix solve has optional method parameter to force a solve method
* Bugfix ArbitraryInteger multiplication sign not taken into account

## v1.4.0 - 2020-10-02

### New Features
* Multivariate Regular Grid Interpolation
* Jensen-Shannon Distance
* Canberra Distance
* Search Sorted
* Search ArgMax
* Search NanArgMax
* Search ArgMin
* Search NanArgMin
* Search NonZero

### Improvements
 * Divergence factored out of Distance into new Divergence class

### Backwards Incompatible Changes
 * Legacy Distance divergences marked as deprecated (To be removed in v2.0.0)

## v1.3.0 - 2020-08-24

### New Features
* LinearAlgebra\Vector
  * Angle between two vectors
  * L¹ distance of two vectors
  * L² distance of two vectors
  * Minkowski distance of two vectors
* Statistics\Distance
  * Minkowski distance
  * Euclidean distance (L² distance)
  * Manhattan distance (Taxicab geometry, L¹ distance, etc.)
  * Cosine distance
  * Cosine similarity

## v1.2.0 - 2020-07-24

### New Features
* Ranking
  * Ordinal ranking
  * Standard competition ranking
  * Modified competition ranking
  * Fractional ranking

### Improvements
* (Issue 380) Fixed Spearman's Rho calculation when there are rank ties

## v1.1.0 - 2020-04-19

### New Features
- Arithmetic modulo

### Improvements
- Improved matrix multiplication performance using cache-oblivious algorithm optimization

## v1.0.0 - 2020-04-14

Initial version 1.0.0 release!

## v0.62.0 - 2020-04-08

### Improvements
- Internal improvements

## v0.61.0 - 2020-03-22

### New Features
* Multivariate Hypergeometric distribution

## v0.60.0 - 2020-02-27

### New Features
- Sample Data
  - MtCars
  - Iris
  - ToothGrowth
  - PlantGrowth
  - UsArrests

## v0.59.0 - 2020-02-19

### New Features
- Add population and sample kurtosis
- Changed default kurtosis algorithm to the more common population kurtosis
- kurtosis now takes an optional parameter to set the kurtosis type algorithm

## v0.58.0 - 2020-02-06

### Improvements
* Changed default skewness algorithm to the more common sample skewness
* skewness now takes an optional parameter to set the skewness type algorithm
* Improvements to skewness algorithms

## v0.57.0 - 2020-01-07

### New Features
* Number\Rational basic getters
  * getWholePart
  * getNumerator
  * getDenominator
* Set Theory n-ary Cartesian product

### Improvements
* Data direction control for Matrix meanDeviation and covarianceMatrix
* Algebra factors performance improvement

## v0.56.0 - 2019-12-03

### New Features
* Number Theory
  * isDeficientNumber
  * isAbundantNumber
  * aliquotSum
  * radical
  * totient
  * cototient
  * reducedTotient
  * mobius
  * isSquarefree
  * isRefactorableNumber
  * isSphenicNumber
  * numberOfDivisors
  * sumOfDivisors

### Improvements
* Optimization of prime factorization algorithm

## v0.55.0 - 2019-11-19

### New Features
- Arbitrary length integers

### Improvements
- Factorial optimization

## v0.54.0 - 2019-10-12

### New Features
- Matrix isNilpotent
- Matrix isRectangularDiagonal
- Matrix mapRows
- MathPHP logo

### Improvements
* MatrixFactory random matrix custom lower and upper bounds for random number
* PSR-12 style compliance
* Bugfix: powerIteration random failure - [Issue 346](https://github.com/markrogoyski/math-php/issues/346)

## v0.53.0 - 2019-09-09

### New Features
* Matrix QR decomposition using Householder reflections
* Matrix Householder transformation
* MatrixFactory random matrix
* MatrixFactory givens rotation matrix
* Matrix isIdempotent
* Matrix Eigenvalue power iteration
* Matrix Eigenvalue jacobi method
* Arithmetic root (nᵗʰ root)
* Vector arithmetic multiply and divide
* Vector Iterator interface

### Improvements
* Internal improvements to Matrix
* Matrix decompositions returned as objects
* Matrix Cholesky decomposition provides L transpose

## v0.52.0 - 2019-07-11

### New Features
* Grubb's test for statistical outliers

## v0.51.0 - 2019-06-05

### New Features
* Matrix rowSums
* Matrix columnSums
* Matrix rowMeans
* Matrix columnMeans
* Matrix isNormal
* MatrixFactory diagonal matrix creation method
* MatrixFactory vandermonde matrix creation method

### Improvements
* Set custom Matrix tolerances
* Various internal improvements

### Backwards Incompatible Changes
* Remove Matrix sampleMeans (use rowMeans or columnMeans instead)
* MatrixFactory create method only works with 2d arrays. 1d arrays no longer work. (use diagonal and vandermonde factory methods instead)
* Statistics methods throw exceptions instead of returning null on bad input
* Change return type of LagrangePolynomial to Polynomial

## v0.50.0 - 2019-04-22

### New Features
* Matrix isOrthogonal
* Matrix isEqual
* Harmonic sequence
* Hyperharmonic sequence
* Map\Single reciprocal

### Improvements
* Support methods for almost equal
* Matrix getDiagonalElements works for non-square matrices
* Use more efficient algorithm in Matrix isSymmetric
* Use more efficient algorithm in Matrix isSkewSymmetric

### Backwards Incompatible Changes
* Statistics methods throw exceptions instead of returning null on bad input

## v0.49.0 - 2019-02-23

### New Features
- Matrix augmentAbove
- Matrix augmentLeft

### Improvements
- Object matrix multiplication

## v0.48.0 - 2018-12-15

### New Features
- Matrix submatrix
- Mahalanobis distance
- Bernoulli distribution mean, median, mode and variance
- Binomial distribution mean and variance
- Geometric distribution mean, median, mode and variance
- Hypergeometric distribution mode and variance
- NegativeBinomial (Pascal) distribution CDF, mean, mode and variance
- Poisson distribution mean, median, mode and variance
- Discrete Uniform distribution variance

### Improvements
- Binomial distribution PMF uses more numerically stable multiplication method
- Fix potential divide by zero in TheilSen regression

### Backwards Incompatible Changes
- Multinomial distribution moved from Discrete to Multivariate namespace

## v0.47.0 - 2018-11-21

### New Features
* Beta distribution median, mode, variance
* Cauchy distribution variance
* ChiSquared distribution mode, variance
* Exponential distribution median, mode, variance
* F distribution mode, variance
* Gamma distribution median, mode, variance
* Laplace distribution mode, variance
* Logistic distribution mode, vaiance
* LogLogistic distribution median, mode, variance
* LogNormal distribution mode, variance
* Normal distribution mode, variance
* StandardNormal distribution mode, variance
* StudentT distribution mode, variance
* Uniform distribution median, mode, variance
* Weibull distribution median, mode

### Improvements
* Normal distribution rand algorithm changed to Box–Muller transform

## v0.46.0 - 2018-10-28

### New Features
* NumberTheory isPerfectNumber
* Sequence perfectNumber

### Improvements
* Improve README documentation for continuous distributions
* Updates to build tools
* General improvements

## v0.45.0 - 2018-09-24

### Improvements
- Add Beta distribution inverse quantile function
- Improvements to Weibull distribution
- Improvements to Cauchy distribution
- Improvements to Laplace distribution
- Improvements to Logistic distribution
- Improvements to LogNormal distribution
- Improvements to Normal distribution
- Improvements to Pareto distribution
- Improvements to Algebra cubic/quartic complex root handling

## v0.44.0 - 2018-08-29

### Improvements
- [[Issue 271]](https://github.com/markrogoyski/math-php/issues/271) Improvements to documentation
- [[Issue 269]](https://github.com/markrogoyski/math-php/issues/269) Add closed-form inverse function for Exponential distribution

## v0.43.0 - 2018-05-21

### New Features
* Arithmetic copySign
* Matrix negate
* Matrix isSkewSymmetric

## v0.42.0 - 2018-05-09

### New Features
* Weighted mean
* Weighted sample variance
* Weighted covariance
* Weighted correlation coefficient

### Improvements
* Minor code improvements

## v0.41.0 - 2018-04-23

### New Features
* Arithmetic almostEqual

### Improvements
* Statistics\Average::mode improved to work with non-integer values
* Various minor code improvements

## v0.40.0 - 2018-03-22

### New Features
* Simpler interface for Significance ```tTest``` for one and two samples

### Improvements
* T test for two samples uses more robust Welch test
* Improvements to Normal and Standard Normal continuous distributions
* General improvements to continuous distributions

## v0.39.0 - 2018-02-27

### Improvements
* Upgrade unit testing framework to PHPUnit 6
* Update unit tests for PHPUnit 6 compatibility
* Add PHP 7.2 to continuous integration tests

## v0.38.0 - 2017-12-10

### Improvements
* Percentile reimplemented to use linear interpolation between closest ranks method - Second variant, C = 1
* General code improvements
* Better error and exception handling

## v0.37.0 - 2017-10-23

### Improvements
- Change probability distributions to be objects instead of static methods

### Backwards Incompatible Changes
- Change probability distributions to be objects instead of static methods

## v0.36.0 - 2017-09-26

### New Features
* Rational number
* Gamma distribution mean

### Improvements
* Add .gitignore file

## v0.35.0 - 2017-08-20

### New Features
* Matrix isTridiagonal
* Matrix isUpperHessenberg
* Matrix isLowerHessenberg
* Matrix getSuperdiagonalElements
* Matrix getSubdiagonalElements

### Improvements
* [Issue 242 - documentation improvement](https://github.com/markrogoyski/math-php/issues/242)

## v0.34.0 - 2017-08-12

### New Features
- Multivariate normal distribution

## v0.33.0 - 2017-08-04

### New Features
- Kernel density estimation

## v0.32.0 - 2017-07-24

### New Features
* Matrix Crout decomposition
* Categorical discrete distribution

## v0.31.0 - 2017-07-02

### New Features
* Hypergeometric distribution
* Discrete uniform distribution

## v0.30.0 - 2017-06-11

### New Features
* Dirichlet multivariate distribution
* Gamma distribution
* Initial eigenvalue matrix method
* Initial eigenvector matrix method
* Confidence ellipse

### Improvements
* Internal Bitwise addition

## v0.29.0 - 2017-05-21

### New Features
- Matrix rank
- ObjectArithmetic interface
- Polynomial implements ObjectArithmetic
- ObjectSquareMatrix
- Polynomial negate

### Improvements
- Refactor Matrix REF algorithm
- Refactor Matrix RREF algorithm
- Support functions for better handling of infinitesimal floating-point zero-like quantities
- Fix bug in Polynomial degree calculation
- Refactored Polynomial::add() to be simpler and faster

## v0.28.0 - 2017-05-02

### New Features
* Matrix adjugate
* Polynomial subtract

### Improvements
* Internal refactoring/improvements
  * Tests namespace for unit tests
  * Standardize method naming convention
  * Update PHPUnit exception assertion
  * Replace class strings in tests with class constants

## v0.27.0 - 2017-04-23

### New Features
* Matrix
  * Cholesky decomposition
  * isRref
  * Exchange matrix
  * isInvolutory
  * isSignature
  * Hilbert matrix
  * isUpperBidiagonal
  * isLowerBidiagonal
  * isBidiagonal
* Quartic function roots
* Trigonometry unit circle
* Integer
  * isOdd
  * isEven

## v0.26.0 - 2017-04-15

### New Features
* Initial Complex number class
* Complex number support to quadratic and cubic equations
* Initial Eigenvalue strategy class (2x2 and 3x3 matrices using root equations)
* Matrix
  * isLowerTriangular
  * isUpperTriangular
  * isTriangular
  * isDiagonal
* Beta function convenience method

### Improvements
* Add BadDataException to LeastSquares regression method trait if degrees of freedom is 0
* Complex Root of Quadratic Function

## v0.25.0 - 2017-04-01

### New Features
* Matrix
  * isSingular
  * isNonsingular
  * isInvertible
  * leadingPrincipalMinor
  * isPositiveDefinite
  * isPositiveSemidefinite
  * isNegativeDefinite
  * isNegativeSemidefinite
* Number Theory
  * Integer coprime
* Arithmetic
  * digitSum
  * digitalRoot
* Basic sequences
  * digitSum
  * digitalRoot

## v0.24.0 - 2017-03-26

### New Features
* Arithmetic cube root
* Algebra cubic equation
* Matrix Kronecker sum
* Vector Kronecker product
* Number theory prime factorization

### Improvements
* Improved quadratic equation edge case handling

## v0.23.0 - 2017-03-12

### New Features
* Number Theory - Integers
 * Perfect powers
* Advanced Sequences
 * Perfect powers
 * Not perfect powers
 * Primes up to n
* Algebra
 * Quadratic equation

## v0.22.0 - 2017-01-31

### New Features
* Circular statistics (directional statistics)
 * Circular mean
 * Resultant length
 * Mean resultant length
 * Circular variance
 * Circular standard deviation
 * Describe
* Finance profitability index

### Improvements
* Update Finance payback to be both simple and discounted payback

## v0.21.0 - 2017-01-23

### New Features
* Finance interest payment
* Finance principle payment on an annuity
* Finance payback
* Make files for unit tests, linting, and code coverage

## v0.20.0 - 2017-01-12

### New Features
* Finance net present value
* Finance rate function
* Finance internal rate of return
* Finance modified internal rate of return
* Finance payment periods of an annuity

### Improvements
* Update Newton's Method to handle non-convergence and infinite slopes.

## v0.19.0 - 2016-12-31

### New Features
* Matrix sample mean
* Matrix mean deviation form
* Covariance matrix
* Matrix representation as array of column vectors
* Finance future value
* Finance present value

## v0.18.0 - 2016-12-28

### New Features
* Joint entropy
* Rényi entropy
* Perplexity
* Matrix scalar division
* Finance: Annual Equivalent Rate (AER)

### Improvements
* Fix vector pnorm to take absolute value of each element

### Backwards Incompatible Changes
* Refactor distances and divergences from InformationTheory\Entropy to Statistics\Distance

## v0.17.0 - 2016-12-21

### New Features
* Two-sample z significance test

## v.0.16.0 - 2016-12-18

### New Features
* Information Theory
 * Shannon entropy (bits, nats, hartleys)
 * Cross entropy
 * Bhattacharyya distance
 * Kullback-Leibler divergence
 * Hellinger distance
 * Jensen-Shannon divergence
* Linear Algebra
 * vectorMultiply method on Matrix to return Vector when multiply with a Vector

## v0.15.0 - 2016-11-10

### New Features
* Lazy caterer's sequence
* Magic squares sequence

## v0.14.0 - 2016-10-28

### New Features
* Look-and-say sequence

## v0.13.0 - 2016-10-17

### New Features
* Custom exception classes

### Improvements
* Refactor exceptions to use custom exception classes

## v0.12.0 - 2016-10-06

### New Features
* Softmax function
* Effect size η² (Eta-squared)
* Effect size η²p (Partial eta-squared)
* Effect size ω² (omega-squared)
* Effect size Cohen's ƒ²
* Effect size Cohen's q
* Effect size Cohen's d
* Effect size Hedges' g
* Effect size Glass' Δ (glass' delta)

### Improvements
* Replace mt_rand with random_int

## v0.11.0 - 2016-10-01

### Backwards Incompatible Changes
* Change root namespace from Math to MathPHP
  * (Run composer update to update autoloader)

## v0.10.0 - 2016-09-28

### New Features
* Clamped Cubic Spline Interpolation
* Custom variable in Polynomial class

## v0.9.0 - 2016-09-27

### New Features
* Natural cubic spline interpolation
* Vector direct product

## v0.8.0 - 2016-09-22

### New Features
* Set Theory
* Matrix kronecker product
* Matrix augment below

### Backwards Incompatible Changes
* Some null return values changed to NAN when computation is invalid


## v0.7.0 - 2016-09-19

### New Features
* Matrix solve linear system of equations
* Noncentral T distribution
* Piecewise function class
* Initial Finance class (pmt function)
* Vector scalar multiplication
* Vector normalization
* Vector scalar division
* Vector perpendicular operator
* Vector projections
* Vector perp and perp dot product

### Improvements
* Add getters to Polynomial for degree and coefficients
* Improvements to gamma function

## v0.6.1 - 2016-09-11

### Improvements
* Fix matrix determinant calculation

## v0.6.0 - 2016-09-10

### New Features
* Polynomial class
* Vector cross product

## v0.5.0 - 2016-09-07

### New Features
* Numerical Differentiation (\Math\NumericalAnalysis\NumericalDifferentiation)
  * Three Point Formula (\Math\NumericalAnalysis\NumericalDifferentiation\ThreePointFormula)
  * Five Point Formula (\Math\NumericalAnalysis\NumericalDifferentiation\FivePointFormula)
  * SecondDerivativeMidpointFormula (\Math\NumericalAnalysis\NumericalDifferentiation\SecondDerivativeMidpointFormula)
* Two-way ANOVA (\Math\Statistics\ANOVA)

## v0.4.0 - 2016-09-07

### New Features

* Nevilles Method (\Math\NumericalAnalysis\Interpolation)
* Newton Polynomial (\Math\NumericalAnalysis\Interpolation)

## v0.3.0 - 2016-09-06

### New Features

* Lagrange polynomials (\Math\NumericalAnalysis\Interpolation)
* Function arithmetic (\Math\Functions\Arithmetic)

## v0.2.0 - 2016-09-05

### New Features

* One-way ANOVA (```Math\Statistics\ANOVA```)
* χ² Table (```Math\Probability\Distribution\Table```)
* Five number summary (```Math\Statistics\Descriptive```)
* Simple sum of squares (```Math\Statistics\RandomVariable```)

### Improvements

* Refactor probability distribution tables (```Math\Probability\Distribution\Table```)
* Minor refactors

### Backwards Incompatible Changes

* Move probability distribution tables to new namespace
  * From ```Math\Probability``` to ```Math\Probability\Distribution\Table```

## v0.1.0 - 2016-09-02

### New Features

 * Algebra
 * Functions
   - Map
   - Special Functions
 * Linear Algebra
   - Matrix
   - Vector
 * Numerical Analysis
   - Numerical Integration
   - Root Finding
 * Probability
     - Combinatorics
     - Distributions
         * Continuous
         * Discrete
     - Standard Normal Table (Z Table)
     - t Distribution Table
 * Sequences
     - Basic
     - Advanced
 * Statistics
     - Averages
     - Correlation
     - Descriptive
     - Distributions
     - Experiments
     - Random Variables
     - Regressions
     - Significance Testing