public function diagonal() : Matrix { $m = $this->m; $n = $this->n; $R = []; for ($i = 0; $i < $m; $i++) { for ($j = 0; $j < $n; $j++) { $R[$i][$j] = $i == $j ? $this->A[$i][$j] : 0; } } return MatrixFactory::create($R); }