busybrain/matrix

一个简单的用于操作矩阵的PHP库

v1.0.1 2020-05-21 00:21 UTC

This package is auto-updated.

Last update: 2024-09-22 21:05:48 UTC


README


一个简单、流畅且稳定的PHP库,用于矩阵操作

Build Status

简单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);

操作

该库目前支持以下操作,并且还在开发其他操作

  1. 加法 ----------------------- add
  2. 减法 -------------------- subtract
  3. 乘法 -----------------multiply
  4. 行列式----------------------det
  5. 转置------------------------ 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;
	}]);

该方法返回一个包含验证错误的数组。如果验证通过,则返回空数组