busybrain / matrix
一个简单的用于操作矩阵的PHP库
Requires
- php: ^7.2
- illuminate/container: ^7.11
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-22 21:05:48 UTC
README
简单PHP库,用于矩阵操作
本项目关注简单性、美观的语法和速度。它允许您在PHP中无缝地操作矩阵。它附带了一些方法,您可以使用它们来编写自己的矩阵逻辑
入门
您可以使用new关键字创建类的实例,并立即调用set方法,将矩阵值设置到类中以便进行操作。每个矩阵实例必须是一个多维数组。
<?php
use Busybrain\Matrix\Matrix;
$matrix = new Matrix;
$matrix->set([
[1,2,3],
[5,6,7]
]);
您还可以在矩阵类上使用静态的make方法。这个方法接收一个矩阵实例作为参数,并执行与之前代码相同的事情,返回一个类创建的实例
<?php
$matrix = Matrix::make([
[1,2,3],
[5,6,7]
]);
您还可以使用setScalar方法设置标量值,该方法是用于需要标量的操作。该库允许方法链。
<?php
$matrix->set([
[1,2,3],
[5,6,7]
])->setScalar(2);
单位矩阵
您可以通过矩阵类中的单位矩阵方法创建单位矩阵
<?php
$matrix->identity($row,$col);
将标量转换为矩阵您可以使用scalarToMatrix方法将标量转换为n行m列的矩阵
<?php
$matrix->scalarToMatrix($value,$row,$col);
操作
该库目前支持以下操作,并且还在开发其他操作
- 加法 ----------------------- add
- 减法 -------------------- subtract
- 乘法 -----------------multiply
- 行列式----------------------det
- 转置------------------------ transpose
您可以通过首先设置具有所有所需参数的矩阵,然后在该矩阵上调用它们的端点来使用每个操作。除了行列式,结果是一个标量,其他操作在端点作为方法而不是属性调用时返回矩阵类的实例。因此,我们可以将多个操作链接在一起。当您在加法或减法操作上调用setScalar方法时,标量将转换为矩阵并包含在操作中
<?php
//addition
$matrix->set([
[1,2,3],
[5,6,7]
])
->set([
[1,2,3],
[5,6,7]
])
->add;
//subtraction
$matrix->set([
[1,2,3],
[5,6,7]
])
->set([
[1,2,3],
[5,6,7]
])
->subtract;
//multiplication
$matrix->set([
[1,2,3],
[5,6,7]
])
->set([
[1,2,3],
[5,6,7]
])->multiply;
//tranpose
$matrix->set([
[1,2,3],
[5,6,7]
])->transpose;
//determinant
$matrix->set([
[1,2,3],
[5,6,7]
])->det;
其他方法
<?php
$matrix->set([
[1,2,3],
[5,6,7]
])->set([
[1,2,3],
[5,6,7]
])->add()->transpose; //sums the matrix then transpose the result
$matrix->set([
[1,2,3],
[5,6,7]
])
->set([
[1,2,3],
[5,6,7]
])
->add()->transpose()->set([[1,2,3]])->add()->transpose()->det();
//sums the matrix, takes the transpose of the result , add the new matrix to the result, takes the transpose and calculates the determinant.
有一些方法可以提供有关矩阵的详细信息。您可以在矩阵实例上调用它们。
您可以使用validate方法对矩阵运行验证,以检查它是否满足一组属性。目前支持的验证选项有
<?php
$matrix->first() : array //returns the first matrix on the matrix instance
$matrix->howManyMatrix():int //returns the number of matrix set on the matrix instance
$matrix->rowCount() : int //returns the number of rows present on the array
$matrix->columnCount() : int //returns the number of column present on the array
$matrix->pickRow(int $row):array //returns the selcted row
$matrix->pickColumn($col) : array //returns the selected column
$matrix->lu() : array //returns a multidimensional array of the lower and upper triangular matrix
$matrix->rowDel($row) : array // returns a new matrix with the given row deleted
$matrix->colDel($col) : array //returns a new matrix with the given column deleted
$matrix->dimensions() : array //returns an array of [row,column]
}
?>
验证
您可以使用validate方法对矩阵运行验证,以检查它是否满足一组属性。目前支持的验证选项有
dim:row,col ------- 检查矩阵维度是否与给定选项匹配 square --------- 检查矩阵是否为方阵 singualr ------- 检查矩阵是否为奇异矩阵
<?php
$matrix = Matrix::make([[1,2,3],[4,5,6]]);
$matrix->validate(['square','singular','dim:2,3']);
您还可以编写基于闭包的验证。它接受两个参数,第一个是要验证的矩阵,第二个是当验证返回false时调用的函数,以传递适当的验证信息
<?php
$matrix->validate([functiion($matrix,$fail){
if($matrix->rowCount() < 1){
return $fail('matrix row count less than 1');
}
return true;
}]);
validate方法返回一个布尔结果。出于调试目的,该包还有一个返回验证错误的方法。请使用validateWithMessage代替
<?php
$matrix->validateWithMessage(['square','dim:2,3',functiion($matrix,$fail){
if($matrix->rowCount() < 1){
return $fail('matrix row count less than 1');
}
return true;
}]);
该方法返回一个包含验证错误的数组。如果验证通过,则返回空数组