mykola-ivashchuk-gl / matrix
支持 PHP 5.5.9 的矩阵操作 PHP 类
2.1.1
2021-01-21 13:53 UTC
Requires
- php: ^7.1 || ^8.0
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^0.7.0
- phpcompatibility/php-compatibility: ^9.0
- phpdocumentor/phpdocumentor: 2.*
- phploc/phploc: ^4.0
- phpmd/phpmd: 2.*
- phpunit/phpunit: ^7.0 || ^8.0 || ^9.3
- sebastian/phpcpd: ^4.0
- squizlabs/php_codesniffer: ^3.4
README
有哪些变更?
增加了对 PHP 5.5.9 的支持
处理矩阵的 PHP 类
矩阵变换
此库目前提供以下操作
- 加法
- 直接和
- 减法
- 乘法
- 除法(使用 [A].[B]^-1)
- 除以
- 分割
以及以下函数
- 伴随矩阵
- 反斜对角线
- 余子式
- 行列式
- 对角线
- 单位矩阵
- 逆矩阵
- 小矩阵
- 迹
- 转置
待办事项
- power()
- 特征值
- 特征向量
- 分解
用法
要创建一个新的 Matrix 对象,请将数组作为构造函数的参数提供
$grid = [
[16, 3, 2, 13],
[ 5, 10, 11, 8],
[ 9, 6, 7, 12],
[ 4, 15, 14, 1],
];
$matrix = new Matrix\Matrix($grid);
The Builder
类提供了一些辅助方法来创建特定的矩阵,特别是指定大小的单位矩阵;或者一个指定维度的矩阵,每个单元格包含一个设定值。
$matrix = new Matrix\Builder::createFilledMatrix(1, 5, 3);
这将创建一个 5 行 3 列的矩阵,每个单元格填充了 1
,而
$matrix = new Matrix\Builder::createIdentityMatrix(3);
将创建一个 3x3 的单位矩阵。
Matrix 对象是不可变的:每次调用方法或传递一个网格到返回矩阵值的函数时,都会返回一个新的 Matrix 对象,而原始对象将保持不变。这也允许你像流畅接口那样链式调用多个方法(只要它们会返回 Matrix 结果)。
执行数学运算
要使用矩阵执行数学运算,你可以针对矩阵值调用适当的方法,传递其他值作为参数
$matrix1 = new Matrix([
[2, 7, 6],
[9, 5, 1],
[4, 3, 8],
]);
$matrix2 = new Matrix([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]);
echo $matrix1->multiply($matrix2);
或将所有值传递给适当的函数
$matrix1 = new Matrix([
[2, 7, 6],
[9, 5, 1],
[4, 3, 8],
]);
$matrix2 = new Matrix([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]);
echo Matrix\multiply($matrix1, $matrix2);
你可以将参数作为 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\trace($matrix);
当使用函数以过程方式调用时,你可以将参数作为 Matrix 对象或数组传递。
$grid = [
[16, 3, 2, 13],
[ 5, 10, 11, 8],
[ 9, 6, 7, 12],
[ 4, 15, 14, 1],
];
echo Matrix\trace($grid);
作为替代,也可以直接从 Functions
类调用方法。
$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);
以这种方式使用时,方法必须静态调用,并且参数必须是 Matrix 对象,不能是数组。