支持 PHP 5.5.9 的矩阵操作 PHP 类

2.1.1 2021-01-21 13:53 UTC

README

有哪些变更?

增加了对 PHP 5.5.9 的支持

处理矩阵的 PHP 类

主分支: 构建状态

开发分支: 构建状态

Matrix Transform

矩阵变换

此库目前提供以下操作

  • 加法
  • 直接和
  • 减法
  • 乘法
  • 除法(使用 [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 对象,不能是数组。