Browse Source

fixed tests for complex evd

pull/290/head
Marcus Cuda 11 years ago
parent
commit
341dec231d
  1. 4
      src/NativeProviders/MKL/lapack.cpp
  2. 4
      src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs
  3. 11
      src/UnitTests/LinearAlgebraTests/Complex/Factorization/EvdTests.cs
  4. 10
      src/UnitTests/LinearAlgebraTests/Complex/Factorization/UserEvdTests.cs
  5. 10
      src/UnitTests/LinearAlgebraTests/Complex32/Factorization/EvdTests.cs
  6. 10
      src/UnitTests/LinearAlgebraTests/Complex32/Factorization/UserEvdTests.cs

4
src/NativeProviders/MKL/lapack.cpp

@ -356,7 +356,7 @@ inline MKL_INT sym_eigen_factor(MKL_INT n, T a[], T vectors[], MKL_Complex16 val
delete[] w;
return info;
}
memcpy(vectors, clone_a, n*n*sizeof(T));
for (MKL_INT index = 0; index < n; ++index)
@ -364,7 +364,7 @@ inline MKL_INT sym_eigen_factor(MKL_INT n, T a[], T vectors[], MKL_Complex16 val
values[index] = MKL_Complex16(w[index]);
}
for (MKL_INT j = 0; j < n; j++)
for (MKL_INT j = 0; j < n; ++j)
{
MKL_INT jn = j*n;

4
src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs

@ -31,6 +31,7 @@
#if NATIVEMKL
using System;
using System.CodeDom;
using System.Numerics;
using System.Security;
using MathNet.Numerics.LinearAlgebra.Factorization;
@ -1366,7 +1367,8 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
throw new ArgumentException(String.Format(Resources.ArgumentArrayWrongLength, order * order), "matrixD");
}
SafeNativeMethods.z_eigen(isSymmetric, order, matrix, matrixEv, vectorEv, matrixD);
if (SafeNativeMethods.z_eigen(isSymmetric, order, matrix, matrixEv, vectorEv, matrixD) > 0)
throw new NonConvergenceException();
}
}
}

11
src/UnitTests/LinearAlgebraTests/Complex/Factorization/EvdTests.cs

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Complex;
using NUnit.Framework;
@ -91,7 +92,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
{
var A = Matrix<Complex>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var factorEvd = A.Evd();
var factorEvd = A.Evd(Symmetricity.Hermitian);
var V = factorEvd.EigenVectors;
var λ = factorEvd.D;
@ -151,7 +152,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
var A = Matrix<Complex>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var b = Vector<Complex>.Build.Random(order, 2);
var bCopy = b.Clone();
@ -179,7 +180,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
var A = Matrix<Complex>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var B = Matrix<Complex>.Build.Random(order, order, 2);
var BCopy = B.Clone();
@ -212,7 +213,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
var A = Matrix<Complex>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var b = Vector<Complex>.Build.Random(order, 2);
var bCopy = b.Clone();
@ -240,7 +241,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
var A = Matrix<Complex>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var B = Matrix<Complex>.Build.Random(order, order, 2);
var BCopy = B.Clone();

10
src/UnitTests/LinearAlgebraTests/Complex/Factorization/UserEvdTests.cs

@ -117,7 +117,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
public void CanFactorizeRandomSymmetricMatrix(int order)
{
var matrixA = new UserDefinedMatrix(Matrix<Complex>.Build.RandomPositiveDefinite(order, 1).ToArray());
var factorEvd = matrixA.Evd();
var factorEvd = matrixA.Evd(Symmetricity.Hermitian);
var eigenVectors = factorEvd.EigenVectors;
var d = factorEvd.D;
@ -204,7 +204,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
var A = new UserDefinedMatrix(Matrix<Complex>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var b = new UserDefinedVector(Vector<Complex>.Build.Random(order, 1).ToArray());
var bCopy = b.Clone();
@ -231,7 +231,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
var A = new UserDefinedMatrix(Matrix<Complex>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var B = new UserDefinedMatrix(Matrix<Complex>.Build.Random(order, order, 1).ToArray());
var BCopy = B.Clone();
@ -264,7 +264,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
var A = new UserDefinedMatrix(Matrix<Complex>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var b = new UserDefinedVector(Vector<Complex>.Build.Random(order, 1).ToArray());
var bCopy = b.Clone();
@ -292,7 +292,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Factorization
var A = new UserDefinedMatrix(Matrix<Complex>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var B = new UserDefinedMatrix(Matrix<Complex>.Build.Random(order, order, 1).ToArray());
var BCopy = B.Clone();

10
src/UnitTests/LinearAlgebraTests/Complex32/Factorization/EvdTests.cs

@ -92,7 +92,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
{
var A = Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var factorEvd = A.Evd();
var factorEvd = A.Evd(Symmetricity.Hermitian);
var V = factorEvd.EigenVectors;
var λ = factorEvd.D;
@ -152,7 +152,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
var A = Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var b = Vector<Complex32>.Build.Random(order, 2);
var bCopy = b.Clone();
@ -179,7 +179,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
var A = Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var B = Matrix<Complex32>.Build.Random(order, order, 2);
var BCopy = B.Clone();
@ -212,7 +212,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
var A = Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var b = Vector<Complex32>.Build.Random(order, 2);
var bCopy = b.Clone();
@ -240,7 +240,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
var A = Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1);
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var B = Matrix<Complex32>.Build.Random(order, order, 2);
var BCopy = B.Clone();

10
src/UnitTests/LinearAlgebraTests/Complex32/Factorization/UserEvdTests.cs

@ -115,7 +115,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
public void CanFactorizeRandomSymmetricMatrix([Values(1, 2, 5, 10, 50, 100)] int order)
{
var matrixA = new UserDefinedMatrix(Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1).ToArray());
var factorEvd = matrixA.Evd();
var factorEvd = matrixA.Evd(Symmetricity.Hermitian);
var eigenVectors = factorEvd.EigenVectors;
var d = factorEvd.D;
@ -203,7 +203,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
var A = new UserDefinedMatrix(Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var b = new UserDefinedVector(Vector<Complex32>.Build.Random(order, 1).ToArray());
var bCopy = b.Clone();
@ -230,7 +230,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
var A = new UserDefinedMatrix(Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var B = new UserDefinedMatrix(Matrix<Complex32>.Build.Random(order, order, 1).ToArray());
var BCopy = B.Clone();
@ -263,7 +263,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
var A = new UserDefinedMatrix(Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var b = new UserDefinedVector(Vector<Complex32>.Build.Random(order, 1).ToArray());
var bCopy = b.Clone();
@ -291,7 +291,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization
var A = new UserDefinedMatrix(Matrix<Complex32>.Build.RandomPositiveDefinite(order, 1).ToArray());
MatrixHelpers.ForceHermitian(A);
var ACopy = A.Clone();
var evd = A.Evd();
var evd = A.Evd(Symmetricity.Hermitian);
var B = new UserDefinedMatrix(Matrix<Complex32>.Build.Random(order, order, 1).ToArray());
var BCopy = B.Clone();

Loading…
Cancel
Save