From e50de5b606462a416752f8a765e422ba8c1c8214 Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Mon, 30 Jun 2014 14:54:01 +0200 Subject: [PATCH] LA: the proper term for being conjugate symmetric is 'Hermitian' --- docs/content/Matrix.fsx | 11 ++++++----- src/FSharp/LinearAlgebra.Matrix.fs | 3 ++- src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs | 4 ++-- src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs | 4 ++-- .../LinearAlgebra/Complex/Factorization/DenseEvd.cs | 4 ++-- .../LinearAlgebra/Complex/Factorization/UserEvd.cs | 4 ++-- src/Numerics/LinearAlgebra/Complex/Matrix.cs | 4 ++-- src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs | 4 ++-- src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs | 4 ++-- .../LinearAlgebra/Complex32/DiagonalMatrix.cs | 4 ++-- .../LinearAlgebra/Complex32/Factorization/DenseEvd.cs | 4 ++-- .../LinearAlgebra/Complex32/Factorization/UserEvd.cs | 4 ++-- src/Numerics/LinearAlgebra/Complex32/Matrix.cs | 4 ++-- src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs | 4 ++-- .../LinearAlgebra/Double/Factorization/DenseEvd.cs | 2 +- .../LinearAlgebra/Double/Factorization/UserEvd.cs | 2 +- src/Numerics/LinearAlgebra/Double/Matrix.cs | 4 ++-- src/Numerics/LinearAlgebra/Matrix.cs | 11 ++++++++++- src/Numerics/LinearAlgebra/Options.cs | 7 ++++++- .../LinearAlgebra/Single/Factorization/DenseEvd.cs | 2 +- .../LinearAlgebra/Single/Factorization/UserEvd.cs | 2 +- src/Numerics/LinearAlgebra/Single/Matrix.cs | 4 ++-- .../Complex/Factorization/EvdTests.cs | 10 +++++----- .../Complex/Factorization/UserEvdTests.cs | 8 ++++---- .../Complex32/Factorization/EvdTests.cs | 10 +++++----- .../Complex32/Factorization/UserEvdTests.cs | 8 ++++---- src/UnitTests/LinearAlgebraTests/MatrixHelpers.cs | 6 +++--- 27 files changed, 77 insertions(+), 61 deletions(-) diff --git a/docs/content/Matrix.fsx b/docs/content/Matrix.fsx index f481c819..2888b573 100644 --- a/docs/content/Matrix.fsx +++ b/docs/content/Matrix.fsx @@ -35,7 +35,7 @@ spatial problems, geography and geometry have quite different usage patterns and to linear algebra. All places where Math.NET Numerics can be used have a strong programming language with their own data structures. For example, if you have a collection of vectors, consider to store them in a list or array of vectors, not in a matrix (unless you need matrix operations, of course). - + Storage Layout -------------- @@ -224,8 +224,8 @@ let m = matrix [[ 1.0; 4.0; 7.0 ] let v = vector [ 10.0; 20.0; 30.0 ] -let v2 = m * v -let m2 = m + 2.0*m +let v' = m * v +let m' = m + 2.0*m (** ### Arithmetic Instance Methods @@ -265,7 +265,7 @@ that are more efficient: X.TransposeThisAndMultiply(X).Inverse() * X.TransposeThisAndMultiply(y) Of course in practice you would not use the matrix inverse but a decomposition: - + [lang=csharp] X.TransposeThisAndMultiply(X).Cholesky().Solve(X.TransposeThisAndMultiply(y)) @@ -333,7 +333,8 @@ Trace and Determinant For a square matrix, the trace of a matrix is the sum of the elements on the main diagonal, which is equal to the sum of all its eigenvalues with multiplicities. Similarly, the determinant of a square matrix is the product of all its eigenvalues with multiplicities. -If the determinant is not zero, the matrix is invertible and the linear equation system it +A matrix is said to be *singular* if its determinant is zero and *non-singular* otherwise. +In the latter case the matrix is invertible and the linear equation system it represents has a single unique solution. [lang=csharp] diff --git a/src/FSharp/LinearAlgebra.Matrix.fs b/src/FSharp/LinearAlgebra.Matrix.fs index 2ae77f57..d99bd807 100644 --- a/src/FSharp/LinearAlgebra.Matrix.fs +++ b/src/FSharp/LinearAlgebra.Matrix.fs @@ -353,7 +353,8 @@ module Matrix = let inline nullity (A: #Matrix<_>) = A.Nullity() let inline kernel (A: #Matrix<_>) = A.Kernel() let inline range (A: #Matrix<_>) = A.Range() - let inline symmetric (A: #Matrix<_>) = A.IsSymmetric + let inline symmetric (A: #Matrix<_>) = A.IsSymmetric() + let inline hermitian (A: #Matrix<_>) = A.IsHermitian() let inline cholesky (A: #Matrix<_>) = A.Cholesky() let inline lu (A: #Matrix<_>) = A.LU() diff --git a/src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs b/src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs index f1cd2171..e3f45005 100644 --- a/src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs +++ b/src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs @@ -1254,9 +1254,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override bool IsConjugateSymmetric() + public override bool IsHermitian() { if (RowCount != ColumnCount) { diff --git a/src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs b/src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs index 04fb7f65..fce362c0 100644 --- a/src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs +++ b/src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs @@ -1014,9 +1014,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override sealed bool IsConjugateSymmetric() + public override sealed bool IsHermitian() { for (var k = 0; k < _data.Length; k ++) { diff --git a/src/Numerics/LinearAlgebra/Complex/Factorization/DenseEvd.cs b/src/Numerics/LinearAlgebra/Complex/Factorization/DenseEvd.cs index a8869a5d..f9a51f2f 100644 --- a/src/Numerics/LinearAlgebra/Complex/Factorization/DenseEvd.cs +++ b/src/Numerics/LinearAlgebra/Complex/Factorization/DenseEvd.cs @@ -82,14 +82,14 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization bool isSymmetric; switch (symmetricity) { - case Symmetricity.ConjugateSymmetric: + case Symmetricity.Hermitian: isSymmetric = true; break; case Symmetricity.Asymmetric: isSymmetric = false; break; default: - isSymmetric = matrix.IsConjugateSymmetric(); + isSymmetric = matrix.IsHermitian(); break; } diff --git a/src/Numerics/LinearAlgebra/Complex/Factorization/UserEvd.cs b/src/Numerics/LinearAlgebra/Complex/Factorization/UserEvd.cs index 5b3c2a8b..81eb8104 100644 --- a/src/Numerics/LinearAlgebra/Complex/Factorization/UserEvd.cs +++ b/src/Numerics/LinearAlgebra/Complex/Factorization/UserEvd.cs @@ -82,14 +82,14 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization bool isSymmetric; switch (symmetricity) { - case Symmetricity.ConjugateSymmetric: + case Symmetricity.Hermitian: isSymmetric = true; break; case Symmetricity.Asymmetric: isSymmetric = false; break; default: - isSymmetric = matrix.IsConjugateSymmetric(); + isSymmetric = matrix.IsHermitian(); break; } diff --git a/src/Numerics/LinearAlgebra/Complex/Matrix.cs b/src/Numerics/LinearAlgebra/Complex/Matrix.cs index 4c28604e..24fa7b08 100644 --- a/src/Numerics/LinearAlgebra/Complex/Matrix.cs +++ b/src/Numerics/LinearAlgebra/Complex/Matrix.cs @@ -709,9 +709,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override bool IsConjugateSymmetric() + public override bool IsHermitian() { if (RowCount != ColumnCount) { diff --git a/src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs b/src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs index 34e524f1..2ae00785 100644 --- a/src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs +++ b/src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs @@ -1246,9 +1246,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override bool IsConjugateSymmetric() + public override bool IsHermitian() { if (RowCount != ColumnCount) { diff --git a/src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs b/src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs index fd6a295f..c0015979 100644 --- a/src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs +++ b/src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs @@ -1251,9 +1251,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override bool IsConjugateSymmetric() + public override bool IsHermitian() { if (RowCount != ColumnCount) { diff --git a/src/Numerics/LinearAlgebra/Complex32/DiagonalMatrix.cs b/src/Numerics/LinearAlgebra/Complex32/DiagonalMatrix.cs index 7a25a5d6..ca47a63e 100644 --- a/src/Numerics/LinearAlgebra/Complex32/DiagonalMatrix.cs +++ b/src/Numerics/LinearAlgebra/Complex32/DiagonalMatrix.cs @@ -1008,9 +1008,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override sealed bool IsConjugateSymmetric() + public override sealed bool IsHermitian() { for (var k = 0; k < _data.Length; k++) { diff --git a/src/Numerics/LinearAlgebra/Complex32/Factorization/DenseEvd.cs b/src/Numerics/LinearAlgebra/Complex32/Factorization/DenseEvd.cs index b5110bba..eef2918b 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Factorization/DenseEvd.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Factorization/DenseEvd.cs @@ -83,14 +83,14 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization bool isSymmetric; switch (symmetricity) { - case Symmetricity.ConjugateSymmetric: + case Symmetricity.Hermitian: isSymmetric = true; break; case Symmetricity.Asymmetric: isSymmetric = false; break; default: - isSymmetric = matrix.IsConjugateSymmetric(); + isSymmetric = matrix.IsHermitian(); break; } diff --git a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserEvd.cs b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserEvd.cs index 88a81ba1..e8a7918f 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Factorization/UserEvd.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Factorization/UserEvd.cs @@ -81,14 +81,14 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization bool isSymmetric; switch (symmetricity) { - case Symmetricity.ConjugateSymmetric: + case Symmetricity.Hermitian: isSymmetric = true; break; case Symmetricity.Asymmetric: isSymmetric = false; break; default: - isSymmetric = matrix.IsConjugateSymmetric(); + isSymmetric = matrix.IsHermitian(); break; } diff --git a/src/Numerics/LinearAlgebra/Complex32/Matrix.cs b/src/Numerics/LinearAlgebra/Complex32/Matrix.cs index 19d418ed..bee3b5c6 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Matrix.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Matrix.cs @@ -704,9 +704,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override bool IsConjugateSymmetric() + public override bool IsHermitian() { if (RowCount != ColumnCount) { diff --git a/src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs b/src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs index 0bb049d7..3e779217 100644 --- a/src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs +++ b/src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs @@ -1240,9 +1240,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override bool IsConjugateSymmetric() + public override bool IsHermitian() { if (RowCount != ColumnCount) { diff --git a/src/Numerics/LinearAlgebra/Double/Factorization/DenseEvd.cs b/src/Numerics/LinearAlgebra/Double/Factorization/DenseEvd.cs index 1f41f894..027ded73 100644 --- a/src/Numerics/LinearAlgebra/Double/Factorization/DenseEvd.cs +++ b/src/Numerics/LinearAlgebra/Double/Factorization/DenseEvd.cs @@ -83,7 +83,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization switch (symmetricity) { case Symmetricity.Symmetric: - case Symmetricity.ConjugateSymmetric: + case Symmetricity.Hermitian: isSymmetric = true; break; case Symmetricity.Asymmetric: diff --git a/src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs b/src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs index 99ac3278..192d875d 100644 --- a/src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs +++ b/src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs @@ -83,7 +83,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization switch (symmetricity) { case Symmetricity.Symmetric: - case Symmetricity.ConjugateSymmetric: + case Symmetricity.Hermitian: isSymmetric = true; break; case Symmetricity.Asymmetric: diff --git a/src/Numerics/LinearAlgebra/Double/Matrix.cs b/src/Numerics/LinearAlgebra/Double/Matrix.cs index 57224988..68d3b0e6 100644 --- a/src/Numerics/LinearAlgebra/Double/Matrix.cs +++ b/src/Numerics/LinearAlgebra/Double/Matrix.cs @@ -705,9 +705,9 @@ namespace MathNet.Numerics.LinearAlgebra.Double } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override sealed bool IsConjugateSymmetric() + public override sealed bool IsHermitian() { return IsSymmetric(); } diff --git a/src/Numerics/LinearAlgebra/Matrix.cs b/src/Numerics/LinearAlgebra/Matrix.cs index e0003d03..4bb626f9 100644 --- a/src/Numerics/LinearAlgebra/Matrix.cs +++ b/src/Numerics/LinearAlgebra/Matrix.cs @@ -1307,10 +1307,19 @@ namespace MathNet.Numerics.LinearAlgebra return true; } + /// + /// Evaluates whether this matrix is hermitian (conjugate symmetric). + /// + public abstract bool IsHermitian(); + /// /// Evaluates whether this matrix is conjugate symmetric. /// - public abstract bool IsConjugateSymmetric(); + [Obsolete("Use IsHermitian instead. Will be removed in v4.")] + public bool IsConjugateSymmetric() + { + return IsHermitian(); + } /// /// Returns this matrix as a multidimensional array. diff --git a/src/Numerics/LinearAlgebra/Options.cs b/src/Numerics/LinearAlgebra/Options.cs index a157d41d..5330aa36 100644 --- a/src/Numerics/LinearAlgebra/Options.cs +++ b/src/Numerics/LinearAlgebra/Options.cs @@ -28,6 +28,8 @@ // OTHER DEALINGS IN THE SOFTWARE. // +using System; + namespace MathNet.Numerics.LinearAlgebra { public enum ExistingData @@ -72,8 +74,11 @@ namespace MathNet.Numerics.LinearAlgebra Symmetric = 1, /// - /// A matrix is complex conjugate symmetric. + /// A matrix is hermitian (conjugate symmetric). /// + Hermitian = 2, + + [Obsolete("Use Hermitian instead. Will be removed in v4.")] ConjugateSymmetric = 2, /// diff --git a/src/Numerics/LinearAlgebra/Single/Factorization/DenseEvd.cs b/src/Numerics/LinearAlgebra/Single/Factorization/DenseEvd.cs index 68eec0a4..f7dae03d 100644 --- a/src/Numerics/LinearAlgebra/Single/Factorization/DenseEvd.cs +++ b/src/Numerics/LinearAlgebra/Single/Factorization/DenseEvd.cs @@ -83,7 +83,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization switch (symmetricity) { case Symmetricity.Symmetric: - case Symmetricity.ConjugateSymmetric: + case Symmetricity.Hermitian: isSymmetric = true; break; case Symmetricity.Asymmetric: diff --git a/src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs b/src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs index fc06c2e3..35b2de78 100644 --- a/src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs +++ b/src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs @@ -82,7 +82,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization switch (symmetricity) { case Symmetricity.Symmetric: - case Symmetricity.ConjugateSymmetric: + case Symmetricity.Hermitian: isSymmetric = true; break; case Symmetricity.Asymmetric: diff --git a/src/Numerics/LinearAlgebra/Single/Matrix.cs b/src/Numerics/LinearAlgebra/Single/Matrix.cs index f941a595..6abc5669 100644 --- a/src/Numerics/LinearAlgebra/Single/Matrix.cs +++ b/src/Numerics/LinearAlgebra/Single/Matrix.cs @@ -704,9 +704,9 @@ namespace MathNet.Numerics.LinearAlgebra.Single } /// - /// Evaluates whether this matrix is conjugate symmetric. + /// Evaluates whether this matrix is hermitian (conjugate symmetric). /// - public override sealed bool IsConjugateSymmetric() + public override sealed bool IsHermitian() { return IsSymmetric(); } diff --git a/src/UnitTests/LinearAlgebraTests/Complex/Factorization/EvdTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/Factorization/EvdTests.cs index ccff616d..079e1fbd 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/Factorization/EvdTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/Factorization/EvdTests.cs @@ -90,7 +90,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization public void CanFactorizeRandomSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var factorEvd = A.Evd(); var V = factorEvd.EigenVectors; var λ = factorEvd.D; @@ -149,7 +149,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization public void CanSolveForRandomVectorAndSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -177,7 +177,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -210,7 +210,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization public void CanSolveForRandomVectorAndSymmetricMatrixWhenResultVectorGiven([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -238,7 +238,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization public void CanSolveForRandomMatrixAndSymmetricMatrixWhenResultMatrixGiven([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); diff --git a/src/UnitTests/LinearAlgebraTests/Complex/Factorization/UserEvdTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/Factorization/UserEvdTests.cs index 76b3bea5..f2f01f8a 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/Factorization/UserEvdTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/Factorization/UserEvdTests.cs @@ -202,7 +202,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization public void CanSolveForRandomVectorAndSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = new UserDefinedMatrix(Matrix.Build.RandomPositiveDefinite(order, 1).ToArray()); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -229,7 +229,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization public void CanSolveForRandomMatrixAndSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = new UserDefinedMatrix(Matrix.Build.RandomPositiveDefinite(order, 1).ToArray()); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -262,7 +262,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization public void CanSolveForRandomVectorAndSymmetricMatrixWhenResultVectorGiven([Values(1, 2, 5, 10, 50, 100)] int order) { var A = new UserDefinedMatrix(Matrix.Build.RandomPositiveDefinite(order, 1).ToArray()); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -290,7 +290,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization public void CanSolveForRandomMatrixAndSymmetricMatrixWhenResultMatrixGiven([Values(1, 2, 5, 10, 50, 100)] int order) { var A = new UserDefinedMatrix(Matrix.Build.RandomPositiveDefinite(order, 1).ToArray()); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/Factorization/EvdTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/Factorization/EvdTests.cs index 10a6d9c3..cf7e08b6 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/Factorization/EvdTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/Factorization/EvdTests.cs @@ -91,7 +91,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanFactorizeRandomSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var factorEvd = A.Evd(); var V = factorEvd.EigenVectors; var λ = factorEvd.D; @@ -150,7 +150,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanSolveForRandomVectorAndSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -177,7 +177,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanSolveForRandomMatrixAndSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -210,7 +210,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanSolveForRandomVectorAndSymmetricMatrixWhenResultVectorGiven([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -238,7 +238,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanSolveForRandomMatrixAndSymmetricMatrixWhenResultMatrixGiven([Values(1, 2, 5, 10, 50, 100)] int order) { var A = Matrix.Build.RandomPositiveDefinite(order, 1); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/Factorization/UserEvdTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/Factorization/UserEvdTests.cs index 42116af7..19f17c91 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/Factorization/UserEvdTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/Factorization/UserEvdTests.cs @@ -201,7 +201,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanSolveForRandomVectorAndSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = new UserDefinedMatrix(Matrix.Build.RandomPositiveDefinite(order, 1).ToArray()); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -228,7 +228,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanSolveForRandomMatrixAndSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order) { var A = new UserDefinedMatrix(Matrix.Build.RandomPositiveDefinite(order, 1).ToArray()); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -261,7 +261,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanSolveForRandomVectorAndSymmetricMatrixWhenResultVectorGiven([Values(1, 2, 5, 10, 50, 100)] int order) { var A = new UserDefinedMatrix(Matrix.Build.RandomPositiveDefinite(order, 1).ToArray()); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); @@ -289,7 +289,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization public void CanSolveForRandomMatrixAndSymmetricMatrixWhenResultMatrixGiven([Values(1, 2, 5, 10, 50, 100)] int order) { var A = new UserDefinedMatrix(Matrix.Build.RandomPositiveDefinite(order, 1).ToArray()); - MatrixHelpers.ForceConjugateSymmetric(A); + MatrixHelpers.ForceHermitian(A); var ACopy = A.Clone(); var evd = A.Evd(); diff --git a/src/UnitTests/LinearAlgebraTests/MatrixHelpers.cs b/src/UnitTests/LinearAlgebraTests/MatrixHelpers.cs index 4fbfac7a..64280a62 100644 --- a/src/UnitTests/LinearAlgebraTests/MatrixHelpers.cs +++ b/src/UnitTests/LinearAlgebraTests/MatrixHelpers.cs @@ -61,11 +61,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests } /// - /// Forces a matrix elements to conjugate symmetric. Copies the conjugate of the values + /// Forces a matrix elements to hermitian (conjugate symmetric). Copies the conjugate of the values /// from the lower triangle to the upper triangle. /// /// The matrix to make conjugate symmetric. - static public void ForceConjugateSymmetric(Matrix matrix) + static public void ForceHermitian(Matrix matrix) { if (matrix.RowCount != matrix.ColumnCount) { @@ -85,7 +85,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests /// from the lower triangle to the upper triangle. /// /// The matrix to make conjugate symmetric. - public static void ForceConjugateSymmetric(Matrix matrix) + public static void ForceHermitian(Matrix matrix) { if (matrix.RowCount != matrix.ColumnCount) {