Stand-alone Linear Algebra Library for PHP
composer require mcordingley/LinearAlgebra
Alternately, include this in your composer.json and then update:
"mcordingley/linearalgebra": "^1.3.0"
If Composer isn't an option for you, clone this repository and run build-phar.php to generate a phar
archive that you can include into your project. PHP will autoload classes from inside the archive as needed.
Start with a use statement for the class:
use mcordingley\LinearAlgebra\Matrix;
Then, instantiate a new instance of the matrix class like so:
$matrix = new Matrix([
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
]);
You can also generate an identity matrix with the identity factory function:
$threeByThreeIdentityMatrix = Matrix::identity(3);
With the matrix instance, you can retrieve individual elements with get using
the zero-based indices of the row and column that you want:
$element = $matrix->get($row, $column);
It's also possible to find out how large the matrix is with getRowCount() and getColumnCount():
$rows = $matrix->getRowCount();
$columns = $matrix->getColumnCount();
You can also add, subtract, and multiply the matrix with scalar values and other matrices. All operations return a new Matrix and do not modify the underlying matrix:
$addedScalar = $matrix->addScalar(3);
$addedMatrix = $matrix->addMatrix($anotherMatrix);
$subtractedScalar = $matrix->subtractScalar(2);
$subtractedMatrix = $matrix->subtractMatrix($anotherMatrix);
$multipliedByScalar = $matrix->multiplyScalar(4);
$multipliedByMatrix = $matrix->multiplyMatrix($anotherMatrix);
Matrices can be compared with equals to see if they're equal:
if ($matrix1->equals($matrix2)) {
// Equality for all!
}
In addition to these basic operations, the Matrix class offers other common matrix operations:
$matrix->inverse()
$matrix->adjoint()
$matrix->determinant()
$matrix->trace()
$matrix->transpose()
$matrix->submatrix()
It's also possible to run a map over the matrix:
$squaredElements = $matrix->map(function($element, $row, $column, $matrix) {
return $element * $element
});
If you need to combine together matrices, you can do so by calling the concatenation methods:
$m1 = new Matrix([
[1,2,3],
[4,5,6],
]);
$m2 = new Matrix([
[7],
[8],
]);
$m3 = new Matrix([[3,2,1]]);
$m4 = $m1->concatenateRight($m2);
// [
// [1,2,3,7],
// [4,5,6,8],
// ]
$m5 = $m1->concatenateBottom($m3);
// [
// [1,2,3],
// [4,5,6],
// [3,2,1],
// ]
-
2.0.0 (future)
- Drop support for PHP 5.x
- Introduce strict scalar type hints
- Drop deprecated functions and properties.
- Tighten up interface with the
finalandprivatekeywords.
-
1.4.0 (future)
- Add
entrywise()to compute the Hadamard product.
- Add
-
1.3.2
- Deprecate
__toString()magic method. - Deprecate
isSymmetric().
- Deprecate
-
1.3.1
- Deprecate use of the
ArrayAccessinterface. - More internal code style fixes.
- Deprecate use of the
-
1.3.0
- Fix typo in names of
concatenateRight()andconcatenateBottom() - Remove generated Phar file. Users who need it should use the
build-phar.phpscript to generate one. - Refactor LUDecomposition to have a less awkward constructor.
- Split
add()intoaddMatrix()andaddScalar(). Deprecateadd(). - Split
subtract()intosubtractMatrix()andsubtractScalar(). Deprecatesubtract(). - Split
multiply()intomultiplyMatrix()andmultiplyScalar(). Deprecatemultiply(). - Add
getRowCount()andgetColumnCount()accessors. - Deprecate
rowsandcolumnsproperties.
- Fix typo in names of
-
1.2.0
- Added
concatenateBottom($other) - Added
concatencateRight($other)
- Added
-
1.1.0
- Added
diagonal().
- Added
-
1.0.0
- Switch to PSR-4 from PSR-0.
- Take
isSymmetric()public. - Rearrange source in
Matrix.phpto be more readable and PSR-compliant.
-
0.9.1
- Fix several bugs with the Cholesky decomposition and inverse.
-
0.9.0
- Bump version up to represent that this is close to it's final form.
- Merged PR for faster
inversecalculations - KISS
Vectorclass good-bye. - Renamed
eqtoequals. - Removed
setfunction, so instantiated objects are immutable.
-
0.3.0
- Added the
identityfactory function - Using Cholesky decomposition for faster matrix inversions for applicable matrices
- Added
eqfunction to test equality of matrices - Implemented the ArrayAccess interface
- Added the
-
0.2.0
- Created the Vector type
\MCordingleynamespace is now\mcordingley- Matrix functions that return a new Matrix now return a new instance of the called class
-
0.1.0
- Created the Matrix type
- Scalar Addition
- Scalar Subtraction
- Scalar Multiplication
- Matrix Addition
- Matrix Subtraction
- Matrix Multiplication
- Inverse
- Adjoint
- Determinant
- Trace
- Transpose
- Submatrix
- Map