diff --git a/src/PhpSpreadsheet/Calculation/MathTrig/MatrixFunctions.php b/src/PhpSpreadsheet/Calculation/MathTrig/MatrixFunctions.php index 1e3224ea..92e1ff8e 100644 --- a/src/PhpSpreadsheet/Calculation/MathTrig/MatrixFunctions.php +++ b/src/PhpSpreadsheet/Calculation/MathTrig/MatrixFunctions.php @@ -3,6 +3,7 @@ namespace PhpOffice\PhpSpreadsheet\Calculation\MathTrig; use Matrix\Builder; +use Matrix\Div0Exception as MatrixDiv0Exception; use Matrix\Exception as MatrixException; use Matrix\Matrix; use PhpOffice\PhpSpreadsheet\Calculation\Exception; @@ -84,8 +85,10 @@ class MatrixFunctions $matrix = self::getMatrix($matrixValues); return $matrix->inverse()->toArray(); + } catch (MatrixDiv0Exception $e) { + return Functions::NAN(); } catch (MatrixException $e) { - return (strpos($e->getMessage(), 'determinant') === false) ? Functions::VALUE() : Functions::NAN(); + return Functions::VALUE(); } catch (Exception $e) { return $e->getMessage(); } @@ -125,10 +128,7 @@ class MatrixFunctions try { $dimension = (int) Helpers::validateNumericNullBool($dimension); Helpers::validatePositive($dimension, Functions::VALUE()); - $matrix = Builder::createFilledMatrix(0, $dimension)->toArray(); - for ($x = 0; $x < $dimension; ++$x) { - $matrix[$x][$x] = 1; - } + $matrix = Builder::createIdentityMatrix($dimension, 0)->toArray(); return $matrix; } catch (Exception $e) {