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