You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.6 KiB
71 lines
1.6 KiB
4 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* Class for the creating "special" Matrices
|
||
|
*
|
||
|
* @copyright Copyright (c) 2018 Mark Baker (https://github.com/MarkBaker/PHPMatrix)
|
||
|
* @license https://opensource.org/licenses/MIT MIT
|
||
|
*/
|
||
|
|
||
|
namespace Matrix;
|
||
|
|
||
|
/**
|
||
|
* Matrix Builder class.
|
||
|
*
|
||
|
* @package Matrix
|
||
|
*/
|
||
|
class Builder
|
||
|
{
|
||
|
/**
|
||
|
* Create a new matrix of specified dimensions, and filled with a specified value
|
||
|
* If the column argument isn't provided, then a square matrix will be created
|
||
|
*
|
||
|
* @param mixed $value
|
||
|
* @param int $rows
|
||
|
* @param int|null $columns
|
||
|
* @return Matrix
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public static function createFilledMatrix($value, $rows, $columns = null)
|
||
|
{
|
||
|
if ($columns === null) {
|
||
|
$columns = $rows;
|
||
|
}
|
||
|
|
||
|
$rows = Matrix::validateRow($rows);
|
||
|
$columns = Matrix::validateColumn($columns);
|
||
|
|
||
|
return new Matrix(
|
||
|
array_fill(
|
||
|
0,
|
||
|
$rows,
|
||
|
array_fill(
|
||
|
0,
|
||
|
$columns,
|
||
|
$value
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create a new identity matrix of specified dimensions
|
||
|
* This will always be a square matrix, with the number of rows and columns matching the provided dimension
|
||
|
*
|
||
|
* @param int $dimensions
|
||
|
* @return Matrix
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public static function createIdentityMatrix($dimensions)
|
||
|
{
|
||
|
$grid = static::createFilledMatrix(null, $dimensions)->toArray();
|
||
|
|
||
|
for ($x = 0; $x < $dimensions; ++$x) {
|
||
|
$grid[$x][$x] = 1;
|
||
|
}
|
||
|
|
||
|
return new Matrix($grid);
|
||
|
}
|
||
|
}
|