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); + } } }