markbaker / matrix
PHP矩阵操作类
Requires
- php: ^7.1 || ^8.0
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: dev-master
- phpcompatibility/php-compatibility: ^9.3
- phpdocumentor/phpdocumentor: 2.*
- phploc/phploc: ^4.0
- phpmd/phpmd: 2.*
- phpunit/phpunit: ^7.0 || ^8.0 || ^9.0
- sebastian/phpcpd: ^4.0
- squizlabs/php_codesniffer: ^3.7
README
PHP矩阵处理类
矩阵变换
此库目前提供以下操作:
- 加法
- 直接和
- 减法
- 乘法
- 除法(使用[A].[B]-1)
- 除以
- 分配到
包括以下函数:
-
伴随矩阵
-
反对角线
-
余子式
-
行列式
-
对角线
-
单位矩阵
-
逆矩阵
-
小矩阵
-
迹
-
转置
-
求解
给定矩阵A和B,计算X,使得A.X = B
和以下类的操作:
- 分解
-
LU分解(部分行置换),
使得[P].[A] = [L].[U]并且[A] = [P]^|.[L].[U]
-
QR分解
使得[A] = [Q].[R]
-
待办事项
- power()函数
- 分解
- Cholesky分解
- 特征值分解
- 特征值
- 特征向量
安装
composer require markbaker/matrix:^3.0
重要BC注意
如果您之前一直使用此库(markbaker/matrix)的函数和操作的程序调用,那么从版本3.0开始,您应使用MarkBaker/PHPMatrixFunctions(在Packagist上作为markbaker/matrix-functions提供)代替。
您需要在您的composer.json
文件中将markbaker/matrix
替换为新库,但除此之外,命名空间或您过去调用矩阵函数的方式不应有任何差异,因此不需要实际的代码更改。
composer require markbaker/matrix-functions:^1.0
您不应在您的composer.json
中引用此库(markbaker/matrix),Composer会为您处理。
使用方法
要创建一个新的Matrix对象,请将数组作为构造函数参数提供
$grid = [ [16, 3, 2, 13], [ 5, 10, 11, 8], [ 9, 6, 7, 12], [ 4, 15, 14, 1], ]; $matrix = new Matrix\Matrix($grid);
Builder
类提供了创建特定矩阵的辅助方法,特别是指定大小的单位矩阵;或者具有指定维度的矩阵,每个单元格包含一个设定值。
$matrix = Matrix\Builder::createFilledMatrix(1, 5, 3);
将创建一个5行3列的矩阵,每个单元格填充了1
;而
$matrix = Matrix\Builder::createIdentityMatrix(3);
将创建一个3x3的单位矩阵。
Matrix对象是不可变的:每次您调用一个方法或将网格传递给返回矩阵值的函数时,都会返回一个新的Matrix对象,而原始对象将保持不变。这也允许您像使用流畅接口一样链式调用多个方法(只要它们是会返回Matrix结果的函数)。
执行数学运算
要使用矩阵执行数学运算,您可以调用矩阵值上的相应方法,传递其他值作为参数
$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());
或将所有值传递给相应的方法
$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\Operations::multiply($matrix1, $matrix2)->toArray());
您可以将参数作为Matrix对象或数组传递。
如果您要对多个值执行相同的操作(例如,添加三个或更多矩阵),则可以将多个参数传递给任何操作。
使用函数
在调用任何矩阵值的可用函数时,您可以调用Matrix对象的相关方法
$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对象或数组作为参数传递
$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);
$grid = [ [16, 3, 2, 13], [ 5, 10, 11, 8], [ 9, 6, 7, 12], [ 4, 15, 14, 1], ]; echo Matrix\Functions::trace($grid);
分解
此库还提供了矩阵分解的类。您可以通过以下方式访问这些类
$grid = [ [1, 2], [3, 4], ]; $matrix = new Matrix\Matrix($grid); $decomposition = new Matrix\Decomposition\QR($matrix); $Q = $decomposition->getQ(); $R = $decomposition->getR();
或者使用分解
工厂,并确定您想使用的分解形式
$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();