|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- PHPMatrix
- ==========
-
- ---
-
- PHP Class for handling Matrices
-
- [![Build Status](https://travis-ci.org/MarkBaker/PHPMatrix.png?branch=1.2)](http://travis-ci.org/MarkBaker/PHPMatrix)
-
- [![Matrix Transform](https://imgs.xkcd.com/comics/matrix_transform.png)](https://xkcd.com/184/)
-
- Matrix Transform
-
- ---
-
- This library currently provides the following operations:
-
- - addition
- - direct sum
- - subtraction
- - multiplication
- - division (using [A].[B]<sup>-1</sup>)
- - division by
- - division into
-
- together with functions for
-
- - adjoint
- - antidiagonal
- - cofactors
- - determinant
- - diagonal
- - identity
- - inverse
- - minors
- - trace
- - transpose
- - solve
-
- Given Matrices A and B, calculate X for A.X = B
-
- and classes for
-
- - Decomposition
- - LU Decomposition with partial row pivoting,
-
- such that [P].[A] = [L].[U] and [A] = [P]<sup>|</sup>.[L].[U]
- - QR Decomposition
-
- such that [A] = [Q].[R]
-
- ## TO DO
-
- - power() function
- - Decomposition
- - Cholesky Decomposition
- - EigenValue Decomposition
- - EigenValues
- - EigenVectors
-
- ---
-
- # Usage
-
- To create a new Matrix object, provide an array as the constructor argument
-
- ```php
- $grid = [
- [16, 3, 2, 13],
- [ 5, 10, 11, 8],
- [ 9, 6, 7, 12],
- [ 4, 15, 14, 1],
- ];
-
- $matrix = new Matrix\Matrix($grid);
- ```
- The `Builder` class provides helper methods for creating specific matrices, specifically an identity matrix of a specified size; or a matrix of a specified dimensions, with every cell containing a set value.
- ```php
- $matrix = Matrix\Builder::createFilledMatrix(1, 5, 3);
- ```
- Will create a matrix of 5 rows and 3 columns, filled with a `1` in every cell; while
- ```php
- $matrix = Matrix\Builder::createIdentityMatrix(3);
- ```
- will create a 3x3 identity matrix.
-
-
- Matrix objects are immutable: whenever you call a method or pass a grid to a function that returns a matrix value, a new Matrix object will be returned, and the original will remain unchanged. This also allows you to chain multiple methods as you would for a fluent interface (as long as they are methods that will return a Matrix result).
-
- ## Performing Mathematical Operations
-
- To perform mathematical operations with Matrices, you can call the appropriate method against a matrix value, passing other values as arguments
-
- ```php
- $matrix1 = new Matrix\Matrix([
- [2, 7, 6],
- [9, 5, 1],
- [4, 3, 8],
- ]);
- $matrix2 = new Matrix\Matrix([
- [1, 2, 3],
- [4, 5, 6],
- [7, 8, 9],
- ]);
-
- var_dump($matrix1->multiply($matrix2)->toArray());
- ```
- or pass all values to the appropriate function
- ```php
- $matrix1 = new Matrix\Matrix([
- [2, 7, 6],
- [9, 5, 1],
- [4, 3, 8],
- ]);
- $matrix2 = new Matrix\Matrix([
- [1, 2, 3],
- [4, 5, 6],
- [7, 8, 9],
- ]);
-
- var_dump(Matrix\multiply($matrix1, $matrix2)->toArray());
- ```
- You can pass in the arguments as Matrix objects, or as arrays.
-
- If you want to perform the same operation against multiple values (e.g. to add three or more matrices), then you can pass multiple arguments to any of the operations.
-
- ## Using functions
-
- When calling any of the available functions for a matrix value, you can either call the relevant method for the Matrix object
- ```php
- $grid = [
- [16, 3, 2, 13],
- [ 5, 10, 11, 8],
- [ 9, 6, 7, 12],
- [ 4, 15, 14, 1],
- ];
-
- $matrix = new Matrix\Matrix($grid);
-
- echo $matrix->trace();
- ```
- or you can call the function as you would in procedural code, passing the Matrix object as an argument
- ```php
- $grid = [
- [16, 3, 2, 13],
- [ 5, 10, 11, 8],
- [ 9, 6, 7, 12],
- [ 4, 15, 14, 1],
- ];
-
- $matrix = new Matrix\Matrix($grid);
- echo Matrix\trace($matrix);
- ```
- When called procedurally using the function, you can pass in the argument as a Matrix object, or as an array.
- ```php
- $grid = [
- [16, 3, 2, 13],
- [ 5, 10, 11, 8],
- [ 9, 6, 7, 12],
- [ 4, 15, 14, 1],
- ];
-
- echo Matrix\trace($grid);
- ```
- As an alternative, it is also possible to call the method directly from the `Functions` class.
- ```php
- $grid = [
- [16, 3, 2, 13],
- [ 5, 10, 11, 8],
- [ 9, 6, 7, 12],
- [ 4, 15, 14, 1],
- ];
-
- $matrix = new Matrix\Matrix($grid);
- echo Matrix\Functions::trace($matrix);
- ```
- Used this way, methods must be called statically, and the argument must be the Matrix object, and cannot be an array.
-
- ## Decomposition
-
- The library also provides classes for matrix decomposition. You can access these using
- ```php
- $grid = [
- [1, 2],
- [3, 4],
- ];
-
- $matrix = new Matrix\Matrix($grid);
-
- $decomposition = new Matrix\Decomposition\QR($matrix);
- $Q = $decomposition->getQ();
- $R = $decomposition->getR();
- ```
-
- or alternatively us the `Decomposition` factory, identifying which form of decomposition you want to use
- ```php
- $grid = [
- [1, 2],
- [3, 4],
- ];
-
- $matrix = new Matrix\Matrix($grid);
-
- $decomposition = Matrix\Decomposition\Decomposition::decomposition(Matrix\Decomposition\Decomposition::QR, $matrix);
- $Q = $decomposition->getQ();
- $R = $decomposition->getR();
- ```
|