public static function eye(int $m, int $n, int $k, $x = 1) : Matrix
{
if ($n < 0 || $m < 0 || $k < 0) {
throw new Exception\OutOfBoundsException("m, n and k must be ≥ 0. m = {$m}, n = {$n}, k = {$k}");
}
if ($k >= $n) {
throw new Exception\OutOfBoundsException("k must be < n. k = {$k}, n = {$n}");
}
$R = self::zero($m, $n)->getMatrix();
for ($i = 0; $i < $m; $i++) {
if ($k + $i < $n) {
$R[$i][$k + $i] = $x;
}
}
return self::create($R);
}