From 7f747ad1f331617178820b217a58e8def73d4001 Mon Sep 17 00:00:00 2001 From: Jurgen Van Gael Date: Fri, 14 May 2010 03:13:18 +0800 Subject: [PATCH] Added static initializer for identity matrix. --- .../LinearAlgebra/Double/DenseMatrix.cs | 19 ++++++++++++ .../Double/DenseMatrixTests.cs | 29 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/Numerics/LinearAlgebra/Double/DenseMatrix.cs b/src/Numerics/LinearAlgebra/Double/DenseMatrix.cs index a6311433..c66c6506 100644 --- a/src/Numerics/LinearAlgebra/Double/DenseMatrix.cs +++ b/src/Numerics/LinearAlgebra/Double/DenseMatrix.cs @@ -397,5 +397,24 @@ namespace MathNet.Numerics.LinearAlgebra.Double } #endregion + + #region Static constructors for special matrices. + /// + /// Initializes a square with all zero's except for ones on the diagonal. + /// + /// the size of the square matrix. + /// + /// If is less than one. + /// + public static DenseMatrix Identity(int order) + { + var m = new DenseMatrix(order); + for (int i = 0; i < order; i++) + { + m[i, i] = 1.0; + } + return m; + } + #endregion } } \ No newline at end of file diff --git a/src/UnitTests/LinearAlgebraTests/Double/DenseMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/DenseMatrixTests.cs index 1d282035..2226c3fe 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/DenseMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/DenseMatrixTests.cs @@ -120,5 +120,34 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double } } } + + [Test] + public void CanCreateIdentity() + { + var matrix = DenseMatrix.Identity(5); + for (var i = 0; i < matrix.RowCount; i++) + { + for (var j = 0; j < matrix.ColumnCount; j++) + { + if (i == j) + { + Assert.AreEqual(1.0, matrix[i, j]); + } + else + { + Assert.AreEqual(0.0, matrix[i, j]); + } + } + } + } + + [Test] + [Row(0)] + [Row(-1)] + [ExpectedArgumentException] + public void IdentityFailsWithZeroOrNegativeOrder(int order) + { + var matrix = DenseMatrix.Identity(order); + } } }