Browse Source

LA: the proper term for being conjugate symmetric is 'Hermitian'

pull/204/merge
Christoph Ruegg 12 years ago
parent
commit
e50de5b606
  1. 11
      docs/content/Matrix.fsx
  2. 3
      src/FSharp/LinearAlgebra.Matrix.fs
  3. 4
      src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs
  4. 4
      src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs
  5. 4
      src/Numerics/LinearAlgebra/Complex/Factorization/DenseEvd.cs
  6. 4
      src/Numerics/LinearAlgebra/Complex/Factorization/UserEvd.cs
  7. 4
      src/Numerics/LinearAlgebra/Complex/Matrix.cs
  8. 4
      src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs
  9. 4
      src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs
  10. 4
      src/Numerics/LinearAlgebra/Complex32/DiagonalMatrix.cs
  11. 4
      src/Numerics/LinearAlgebra/Complex32/Factorization/DenseEvd.cs
  12. 4
      src/Numerics/LinearAlgebra/Complex32/Factorization/UserEvd.cs
  13. 4
      src/Numerics/LinearAlgebra/Complex32/Matrix.cs
  14. 4
      src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs
  15. 2
      src/Numerics/LinearAlgebra/Double/Factorization/DenseEvd.cs
  16. 2
      src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs
  17. 4
      src/Numerics/LinearAlgebra/Double/Matrix.cs
  18. 11
      src/Numerics/LinearAlgebra/Matrix.cs
  19. 7
      src/Numerics/LinearAlgebra/Options.cs
  20. 2
      src/Numerics/LinearAlgebra/Single/Factorization/DenseEvd.cs
  21. 2
      src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs
  22. 4
      src/Numerics/LinearAlgebra/Single/Matrix.cs
  23. 10
      src/UnitTests/LinearAlgebraTests/Complex/Factorization/EvdTests.cs
  24. 8
      src/UnitTests/LinearAlgebraTests/Complex/Factorization/UserEvdTests.cs
  25. 10
      src/UnitTests/LinearAlgebraTests/Complex32/Factorization/EvdTests.cs
  26. 8
      src/UnitTests/LinearAlgebraTests/Complex32/Factorization/UserEvdTests.cs
  27. 6
      src/UnitTests/LinearAlgebraTests/MatrixHelpers.cs

11
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]

3
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()

4
src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs

@ -1254,9 +1254,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override bool IsConjugateSymmetric()
public override bool IsHermitian()
{
if (RowCount != ColumnCount)
{

4
src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs

@ -1014,9 +1014,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override sealed bool IsConjugateSymmetric()
public override sealed bool IsHermitian()
{
for (var k = 0; k < _data.Length; k ++)
{

4
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;
}

4
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;
}

4
src/Numerics/LinearAlgebra/Complex/Matrix.cs

@ -709,9 +709,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override bool IsConjugateSymmetric()
public override bool IsHermitian()
{
if (RowCount != ColumnCount)
{

4
src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs

@ -1246,9 +1246,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override bool IsConjugateSymmetric()
public override bool IsHermitian()
{
if (RowCount != ColumnCount)
{

4
src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs

@ -1251,9 +1251,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override bool IsConjugateSymmetric()
public override bool IsHermitian()
{
if (RowCount != ColumnCount)
{

4
src/Numerics/LinearAlgebra/Complex32/DiagonalMatrix.cs

@ -1008,9 +1008,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override sealed bool IsConjugateSymmetric()
public override sealed bool IsHermitian()
{
for (var k = 0; k < _data.Length; k++)
{

4
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;
}

4
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;
}

4
src/Numerics/LinearAlgebra/Complex32/Matrix.cs

@ -704,9 +704,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override bool IsConjugateSymmetric()
public override bool IsHermitian()
{
if (RowCount != ColumnCount)
{

4
src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs

@ -1240,9 +1240,9 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override bool IsConjugateSymmetric()
public override bool IsHermitian()
{
if (RowCount != ColumnCount)
{

2
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:

2
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:

4
src/Numerics/LinearAlgebra/Double/Matrix.cs

@ -705,9 +705,9 @@ namespace MathNet.Numerics.LinearAlgebra.Double
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override sealed bool IsConjugateSymmetric()
public override sealed bool IsHermitian()
{
return IsSymmetric();
}

11
src/Numerics/LinearAlgebra/Matrix.cs

@ -1307,10 +1307,19 @@ namespace MathNet.Numerics.LinearAlgebra
return true;
}
/// <summary>
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public abstract bool IsHermitian();
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// </summary>
public abstract bool IsConjugateSymmetric();
[Obsolete("Use IsHermitian instead. Will be removed in v4.")]
public bool IsConjugateSymmetric()
{
return IsHermitian();
}
/// <summary>
/// Returns this matrix as a multidimensional array.

7
src/Numerics/LinearAlgebra/Options.cs

@ -28,6 +28,8 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
namespace MathNet.Numerics.LinearAlgebra
{
public enum ExistingData
@ -72,8 +74,11 @@ namespace MathNet.Numerics.LinearAlgebra
Symmetric = 1,
/// <summary>
/// A matrix is complex conjugate symmetric.
/// A matrix is hermitian (conjugate symmetric).
/// </summary>
Hermitian = 2,
[Obsolete("Use Hermitian instead. Will be removed in v4.")]
ConjugateSymmetric = 2,
/// <summary>

2
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:

2
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:

4
src/Numerics/LinearAlgebra/Single/Matrix.cs

@ -704,9 +704,9 @@ namespace MathNet.Numerics.LinearAlgebra.Single
}
/// <summary>
/// Evaluates whether this matrix is conjugate symmetric.
/// Evaluates whether this matrix is hermitian (conjugate symmetric).
/// </summary>
public override sealed bool IsConjugateSymmetric()
public override sealed bool IsHermitian()
{
return IsSymmetric();
}

10
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<Complex>.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<Complex>.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<Complex>.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<Complex>.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<Complex>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceConjugateSymmetric(A);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();

8
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<Complex>.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<Complex>.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<Complex>.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<Complex>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceConjugateSymmetric(A);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();

10
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<Complex32>.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<Complex32>.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<Complex32>.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<Complex32>.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<Complex32>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceConjugateSymmetric(A);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();

8
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<Complex32>.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<Complex32>.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<Complex32>.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<Complex32>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceConjugateSymmetric(A);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();

6
src/UnitTests/LinearAlgebraTests/MatrixHelpers.cs

@ -61,11 +61,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests
}
/// <summary>
/// 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.
/// </summary>
/// <param name="matrix">The matrix to make conjugate symmetric.</param>
static public void ForceConjugateSymmetric(Matrix<Complex64> matrix)
static public void ForceHermitian(Matrix<Complex64> matrix)
{
if (matrix.RowCount != matrix.ColumnCount)
{
@ -85,7 +85,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests
/// from the lower triangle to the upper triangle.
/// </summary>
/// <param name="matrix">The matrix to make conjugate symmetric.</param>
public static void ForceConjugateSymmetric(Matrix<Numerics.Complex32> matrix)
public static void ForceHermitian(Matrix<Numerics.Complex32> matrix)
{
if (matrix.RowCount != matrix.ColumnCount)
{

Loading…
Cancel
Save