diff --git a/src/Numerics.Tests/LinearAlgebraTests/Complex/MatrixTests.Arithmetic.cs b/src/Numerics.Tests/LinearAlgebraTests/Complex/MatrixTests.Arithmetic.cs
index 42e76d72..e0d253d1 100644
--- a/src/Numerics.Tests/LinearAlgebraTests/Complex/MatrixTests.Arithmetic.cs
+++ b/src/Numerics.Tests/LinearAlgebraTests/Complex/MatrixTests.Arithmetic.cs
@@ -819,6 +819,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
Assert.That(() => matrix.Negate(target), Throws.ArgumentException);
}
+ ///
+ /// Can compute Moore-Penrose Pseudo-Inverse.
+ ///
+ [TestCase("Square3x3")]
+ [TestCase("Wide2x3")]
+ [TestCase("Tall3x2")]
+ public virtual void CanComputePseudoInverse(string name)
+ {
+ var matrix = TestMatrices[name];
+ var inverse = matrix.PseudoInverse();
+ // Testing for Moore–Penrose conditions 1: A*A^+*A = A
+ AssertHelpers.AlmostEqual(matrix, matrix * inverse * matrix, 12);
+ }
+
///
/// Can calculate Kronecker product.
///
diff --git a/src/Numerics.Tests/LinearAlgebraTests/Complex32/MatrixTests.Arithmetic.cs b/src/Numerics.Tests/LinearAlgebraTests/Complex32/MatrixTests.Arithmetic.cs
index d48c3da4..51e1f335 100644
--- a/src/Numerics.Tests/LinearAlgebraTests/Complex32/MatrixTests.Arithmetic.cs
+++ b/src/Numerics.Tests/LinearAlgebraTests/Complex32/MatrixTests.Arithmetic.cs
@@ -820,6 +820,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
Assert.That(() => matrix.Negate(target), Throws.ArgumentException);
}
+ ///
+ /// Can compute Moore-Penrose Pseudo-Inverse.
+ ///
+ [TestCase("Square3x3")]
+ [TestCase("Wide2x3")]
+ [TestCase("Tall3x2")]
+ public virtual void CanComputePseudoInverse(string name)
+ {
+ var matrix = TestMatrices[name];
+ var inverse = matrix.PseudoInverse();
+ // Testing for Moore–Penrose conditions 1: A*A^+*A = A
+ AssertHelpers.AlmostEqual(matrix, matrix * inverse * matrix, 5);
+ }
+
///
/// Can calculate Kronecker product.
///
diff --git a/src/Numerics.Tests/LinearAlgebraTests/Double/MatrixTests.Arithmetic.cs b/src/Numerics.Tests/LinearAlgebraTests/Double/MatrixTests.Arithmetic.cs
index 94e64420..4b0703fe 100644
--- a/src/Numerics.Tests/LinearAlgebraTests/Double/MatrixTests.Arithmetic.cs
+++ b/src/Numerics.Tests/LinearAlgebraTests/Double/MatrixTests.Arithmetic.cs
@@ -813,6 +813,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
Assert.That(() => matrix.Negate(target), Throws.ArgumentException);
}
+ ///
+ /// Can compute Moore-Penrose Pseudo-Inverse.
+ ///
+ [TestCase("Square3x3")]
+ [TestCase("Wide2x3")]
+ [TestCase("Tall3x2")]
+ public virtual void CanComputePseudoInverse(string name)
+ {
+ var matrix = TestMatrices[name];
+ var inverse = matrix.PseudoInverse();
+ // Testing for Moore–Penrose conditions 1: A*A^+*A = A
+ AssertHelpers.AlmostEqual(matrix, matrix * inverse * matrix, 12);
+ }
+
///
/// Can calculate Kronecker product.
///
diff --git a/src/Numerics.Tests/LinearAlgebraTests/Single/MatrixTests.Arithmetic.cs b/src/Numerics.Tests/LinearAlgebraTests/Single/MatrixTests.Arithmetic.cs
index a5302682..9f609905 100644
--- a/src/Numerics.Tests/LinearAlgebraTests/Single/MatrixTests.Arithmetic.cs
+++ b/src/Numerics.Tests/LinearAlgebraTests/Single/MatrixTests.Arithmetic.cs
@@ -808,6 +808,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
Assert.That(() => matrix.Negate(target), Throws.ArgumentException);
}
+ ///
+ /// Can compute Moore-Penrose Pseudo-Inverse.
+ ///
+ [TestCase("Square3x3")]
+ [TestCase("Wide2x3")]
+ [TestCase("Tall3x2")]
+ public virtual void CanComputePseudoInverse(string name)
+ {
+ var matrix = TestMatrices[name];
+ var inverse = matrix.PseudoInverse();
+ // Testing for Moore–Penrose conditions 1: A*A^+*A = A
+ AssertHelpers.AlmostEqual(matrix, matrix * inverse * matrix, 5);
+ }
+
///
/// Can calculate Kronecker product.
///