diff --git a/src/Numerics/LinearAlgebra/Double/DenseMatrix.cs b/src/Numerics/LinearAlgebra/Double/DenseMatrix.cs
index 04aba072..543b16ef 100644
--- a/src/Numerics/LinearAlgebra/Double/DenseMatrix.cs
+++ b/src/Numerics/LinearAlgebra/Double/DenseMatrix.cs
@@ -182,6 +182,14 @@ namespace MathNet.Numerics.LinearAlgebra.Double
Data[column * RowCount + row] = value;
}
+ ///
+ /// Sets all values to zero.
+ ///
+ public override void Clear()
+ {
+ Array.Clear(Data, 0, Data.Length);
+ }
+
#region Elementary operations
///
/// Adds another matrix to this matrix. The result will be written into this matrix.
diff --git a/src/Numerics/LinearAlgebra/Double/Matrix.cs b/src/Numerics/LinearAlgebra/Double/Matrix.cs
index e4bcd869..f179f3d0 100644
--- a/src/Numerics/LinearAlgebra/Double/Matrix.cs
+++ b/src/Numerics/LinearAlgebra/Double/Matrix.cs
@@ -412,6 +412,20 @@ namespace MathNet.Numerics.LinearAlgebra.Double
}
#endregion
+
+ ///
+ /// Sets all values to zero.
+ ///
+ public virtual void Clear()
+ {
+ for (int i = 0; i < RowCount; i++)
+ {
+ for (int j = 0; j < ColumnCount; j++)
+ {
+ At(i, j, 0);
+ }
+ }
+ }
#region Elementary operations
///
diff --git a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
index 0b81e099..f57667ba 100644
--- a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
@@ -162,6 +162,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
{
}
+ [Test]
+ public void CanClearMatrix()
+ {
+ Matrix matrix = (Matrix) testMatrices["Singular3x3"].Clone();
+ matrix.Clear();
+ for (int i = 0; i < matrix.RowCount; i++)
+ {
+ for (int j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.AreEqual(0, matrix[i, j]);
+ }
+ }
+ }
+
#region Elementary operations
[Test]
[Row("Singular3x3", "Square3x3")]