Browse Source

LA: rename 'criterium' to 'criterion'

pull/222/head
Christoph Ruegg 13 years ago
parent
commit
8671f12592
  1. 1
      RELEASENOTES.md
  2. 34
      src/Examples/LinearAlgebra/IterativeSolvers/BiCgStabSolver.cs
  3. 62
      src/Examples/LinearAlgebra/IterativeSolvers/CompositeSolverExample.cs
  4. 34
      src/Examples/LinearAlgebra/IterativeSolvers/GpBiCgSolver.cs
  5. 36
      src/Examples/LinearAlgebra/IterativeSolvers/MlkBiCgStabSolver.cs
  6. 32
      src/Examples/LinearAlgebra/IterativeSolvers/TFQMRSolver.cs
  7. 71
      src/Numerics/LinearAlgebra/Builder.cs
  8. 18
      src/Numerics/LinearAlgebra/Matrix.Solve.cs
  9. 33
      src/Numerics/LinearAlgebra/Solvers/CancellationStopCriterion.cs
  10. 44
      src/Numerics/LinearAlgebra/Solvers/DivergenceStopCriterion.cs
  11. 27
      src/Numerics/LinearAlgebra/Solvers/FailureStopCriterion.cs
  12. 18
      src/Numerics/LinearAlgebra/Solvers/IIterationStopCriterion.cs
  13. 2
      src/Numerics/LinearAlgebra/Solvers/IIterativeSolver.cs
  14. 2
      src/Numerics/LinearAlgebra/Solvers/IIterativeSolverSetup.cs
  15. 2
      src/Numerics/LinearAlgebra/Solvers/IPreconditioner.cs
  16. 40
      src/Numerics/LinearAlgebra/Solvers/IterationCountStopCriterion.cs
  17. 2
      src/Numerics/LinearAlgebra/Solvers/IterationStatus.cs
  18. 30
      src/Numerics/LinearAlgebra/Solvers/Iterator.cs
  19. 55
      src/Numerics/LinearAlgebra/Solvers/ResidualStopCriterion.cs
  20. 2
      src/Numerics/LinearAlgebra/Solvers/SolverSetup.cs
  21. 2
      src/Numerics/LinearAlgebra/Solvers/UnitPreconditioner.cs
  22. 12
      src/Numerics/Numerics.csproj
  23. 14
      src/Numerics/Properties/Resources.Designer.cs
  24. 8
      src/Numerics/Properties/Resources.resx
  25. 35
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/BiCgStabTest.cs
  26. 35
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/GpBiCgTest.cs
  27. 35
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/MlkBiCgStabTest.cs
  28. 35
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/TFQMRTest.cs
  29. 29
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs
  30. 121
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterion/DivergenceStopCriteriumTest.cs
  31. 89
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterion/FailureStopCriteriumTest.cs
  32. 69
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterion/IterationCountStopCriteriumTest.cs
  33. 111
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterion/ResidualStopCriteriumTest.cs
  34. 44
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/BiCgStabTest.cs
  35. 36
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/GpBiCgTest.cs
  36. 44
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/MlkBiCgStabTest.cs
  37. 44
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/TFQMRTest.cs
  38. 28
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs
  39. 120
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterion/DivergenceStopCriteriumTest.cs
  40. 88
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterion/FailureStopCriteriumTest.cs
  41. 68
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterion/IterationCountStopCriteriumTest.cs
  42. 78
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterion/ResidualStopCriteriumTest.cs
  43. 34
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/BiCgStabTest.cs
  44. 34
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/GpBiCgTest.cs
  45. 34
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/MlkBiCgStabTest.cs
  46. 34
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/TFQMRTest.cs
  47. 28
      src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs
  48. 120
      src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterion/DivergenceStopCriteriumTest.cs
  49. 88
      src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterion/FailureStopCriteriumTest.cs
  50. 70
      src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterion/IterationCountStopCriteriumTest.cs
  51. 78
      src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterion/ResidualStopCriteriumTest.cs
  52. 44
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/BiCgStabTest.cs
  53. 44
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/GpBiCgTest.cs
  54. 44
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/MlkBiCgStabTest.cs
  55. 44
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/TFQMRTest.cs
  56. 28
      src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs
  57. 120
      src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterion/DivergenceStopCriteriumTest.cs
  58. 88
      src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterion/FailureStopCriteriumTest.cs
  59. 68
      src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterion/IterationCountStopCriteriumTest.cs
  60. 108
      src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterion/ResidualStopCriteriumTest.cs
  61. 33
      src/UnitTests/UnitTests.csproj

1
RELEASENOTES.md

@ -67,6 +67,7 @@ Changes as of now:
- Matrix factorizations no longer clone their results at point of access.
- Add direct factorization-based `Solve` methods to matrix type.
- Massive iterative solver implementation/design simplification, now mostly generic and a bit more functional-style.
- Renamed iterative solver stop criteria from 'criterium' to 'criterion'.
- New MILU(0) iterative solver preconditioner that is much more efficient and fully leverages sparse data. *~Christian Woltering*
- Matrices/Vectors now have more consistent enumerators, with a variant that skips zeros (useful if sparse).
- Matrix/Vector creation routines have been simplified and usually no longer require explicit dimensions. New variants to create diagonal matrices, or such where all fields have the same value. All functions that take a params array now have an overload accepting an enumerable (e.g. `OfColumnVectors`).

34
src/Examples/LinearAlgebra/IterativeSolvers/BiCgStabSolver.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -47,10 +47,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Name
{
get
{
return "Bi-Conjugate Gradient Stabilized iterative solver";
}
get { return "Bi-Conjugate Gradient Stabilized iterative solver"; }
}
/// <summary>
@ -58,10 +55,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Description
{
get
{
return "Solve linear equation using Bi-Conjugate Gradient Stabilized (BiCGStab) solver";
}
get { return "Solve linear equation using Bi-Conjugate Gradient Stabilized (BiCGStab) solver"; }
}
/// <summary>
@ -91,20 +85,20 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine(vectorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();
// Create stop criteriums to monitor an iterative calculation. There are next available stop criteriums:
// - DivergenceStopCriterium: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterium: monitors residuals for NaN's;
// - IterationCountStopCriterium: monitors the numbers of iteration steps;
// - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Create stop criteria to monitor an iterative calculation. There are next available stop criteria:
// - DivergenceStopCriterion: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterion: monitors residuals for NaN's;
// - IterationCountStopCriterion: monitors the numbers of iteration steps;
// - ResidualStopCriterion: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
var iterationCountStopCriterion = new IterationCountStopCriterion<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium<double>(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator<double>(iterationCountStopCriterium, residualStopCriterium);
var residualStopCriterion = new ResidualStopCriterion<double>(1e-10);
// Create monitor with defined stop criteria
var monitor = new Iterator<double>(iterationCountStopCriterion, residualStopCriterion);
// Create Bi-Conjugate Gradient Stabilized solver
var solver = new BiCgStab();
@ -134,7 +128,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine();
// 4. Verify result. Multiply coefficient matrix "A" by result vector "x"
var reconstructVecorB = matrixA * resultX;
var reconstructVecorB = matrixA*resultX;
Console.WriteLine(@"4. Multiply coefficient matrix 'A' by result vector 'x'");
Console.WriteLine(reconstructVecorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();

62
src/Examples/LinearAlgebra/IterativeSolvers/CompositeSolverExample.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -47,10 +47,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Name
{
get
{
return "Composite matrix solver";
}
get { return "Composite matrix solver"; }
}
/// <summary>
@ -58,10 +55,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Description
{
get
{
return "Solve linear equation using composite matrix solver. The actual solver is made by a sequence of matrix solvers";
}
get { return "Solve linear equation using composite matrix solver. The actual solver is made by a sequence of matrix solvers"; }
}
/// <summary>
@ -78,7 +72,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
// 3*x - 7*y + 6*z = 38
// 4*x + 1*y + 5*z = 43
// Create matrix "A" with coefficients
// Create matrix "A" with coefficients
var matrixA = DenseMatrix.OfArray(new[,] { { 5.00, 2.00, -4.00 }, { 3.00, -7.00, 6.00 }, { 4.00, 1.00, 5.00 } });
Console.WriteLine(@"Matrix 'A' with coefficients");
Console.WriteLine(matrixA.ToString("#0.00\t", formatProvider));
@ -90,32 +84,32 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine(vectorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();
// Create stop criteriums to monitor an iterative calculation. There are next available stop criteriums:
// - DivergenceStopCriterium: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterium: monitors residuals for NaN's;
// - IterationCountStopCriterium: monitors the numbers of iteration steps;
// - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Create stop criteria to monitor an iterative calculation. There are next available stop criteria:
// - DivergenceStopCriterion: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterion: monitors residuals for NaN's;
// - IterationCountStopCriterion: monitors the numbers of iteration steps;
// - ResidualStopCriterion: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
var iterationCountStopCriterion = new IterationCountStopCriterion<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium<double>(1e-10);
var residualStopCriterion = new ResidualStopCriterion<double>(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator<double>(iterationCountStopCriterium, residualStopCriterium);
// Create monitor with defined stop criteria
var monitor = new Iterator<double>(iterationCountStopCriterion, residualStopCriterion);
// Load all suitable solvers from current assembly. Below in this example, there is user-defined solver
// "class UserBiCgStab : IIterativeSolverSetup<double>" which uses regular BiCgStab solver. But user may create any other solver
// "class UserBiCgStab : IIterativeSolverSetup<double>" which uses regular BiCgStab solver. But user may create any other solver
// and solver setup classes which implement IIterativeSolverSetup<T> and pass assembly to next function:
var solver = new CompositeSolver(SolverSetup<double>.LoadFromAssembly(Assembly.GetExecutingAssembly()));
// 1. Solve the matrix equation
var resultX = matrixA.SolveIterative(vectorB, solver, monitor);
Console.WriteLine(@"1. Solve the matrix equation");
Console.WriteLine();
// 2. Check solver status of the iterations.
// 2. Check solver status of the iterations.
// Solver has property IterationResult which contains the status of the iteration once the calculation is finished.
// Possible values are:
// - CalculationCancelled: calculation was cancelled by the user;
@ -135,7 +129,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine();
// 4. Verify result. Multiply coefficient matrix "A" by result vector "x"
var reconstructVecorB = matrixA * resultX;
var reconstructVecorB = matrixA*resultX;
Console.WriteLine(@"4. Multiply coefficient matrix 'A' by result vector 'x'");
Console.WriteLine(reconstructVecorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();
@ -152,10 +146,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public Type SolverType
{
get
{
return null;
}
get { return null; }
}
/// <summary>
@ -163,10 +154,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public Type PreconditionerType
{
get
{
return null;
}
get { return null; }
}
/// <summary>
@ -185,15 +173,12 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
}
/// <summary>
/// Gets the relative speed of the solver.
/// Gets the relative speed of the solver.
/// </summary>
/// <value>Returns a value between 0 and 1, inclusive.</value>
public double SolutionSpeed
{
get
{
return 0.99;
}
get { return 0.99; }
}
/// <summary>
@ -202,10 +187,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// <value>Returns a value between 0 and 1 inclusive.</value>
public double Reliability
{
get
{
return 0.99;
}
get { return 0.99; }
}
}
}

34
src/Examples/LinearAlgebra/IterativeSolvers/GpBiCgSolver.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -41,15 +41,12 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public class GpBiCgSolver : IExample
{
/// <summary>
/// <summary>
/// Gets the name of this example
/// </summary>
public string Name
{
get
{
return "Generalized Product Bi-Conjugate Gradient iterative solver";
}
get { return "Generalized Product Bi-Conjugate Gradient iterative solver"; }
}
/// <summary>
@ -57,10 +54,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Description
{
get
{
return "Solve linear equation using Generalized Product Bi-Conjugate Gradient (GPBiCG) solver";
}
get { return "Solve linear equation using Generalized Product Bi-Conjugate Gradient (GPBiCG) solver"; }
}
/// <summary>
@ -89,20 +83,20 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine(vectorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();
// Create stop criteriums to monitor an iterative calculation. There are next available stop criteriums:
// - DivergenceStopCriterium: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterium: monitors residuals for NaN's;
// - IterationCountStopCriterium: monitors the numbers of iteration steps;
// - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Create stop criteria to monitor an iterative calculation. There are next available stop criteria:
// - DivergenceStopCriterion: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterion: monitors residuals for NaN's;
// - IterationCountStopCriterion: monitors the numbers of iteration steps;
// - ResidualStopCriterion: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
var iterationCountStopCriterion = new IterationCountStopCriterion<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium<double>(1e-10);
var residualStopCriterion = new ResidualStopCriterion<double>(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator<double>(iterationCountStopCriterium, residualStopCriterium);
// Create monitor with defined stop criteria
var monitor = new Iterator<double>(iterationCountStopCriterion, residualStopCriterion);
// Create Generalized Product Bi-Conjugate Gradient solver
var solver = new GpBiCg();
@ -132,7 +126,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine();
// 4. Verify result. Multiply coefficient matrix "A" by result vector "x"
var reconstructVecorB = matrixA * resultX;
var reconstructVecorB = matrixA*resultX;
Console.WriteLine(@"4. Multiply coefficient matrix 'A' by result vector 'x'");
Console.WriteLine(reconstructVecorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();

36
src/Examples/LinearAlgebra/IterativeSolvers/MlkBiCgStabSolver.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -47,10 +47,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Name
{
get
{
return "Multiple-Lanczos Bi-Conjugate Gradient Stabilized iterative solver";
}
get { return "Multiple-Lanczos Bi-Conjugate Gradient Stabilized iterative solver"; }
}
/// <summary>
@ -58,10 +55,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Description
{
get
{
return "Solve linear equation using Multiple-Lanczos Bi-Conjugate Gradient stabilized (ML(k)-BiCGStab) solver";
}
get { return "Solve linear equation using Multiple-Lanczos Bi-Conjugate Gradient stabilized (ML(k)-BiCGStab) solver"; }
}
/// <summary>
@ -78,7 +72,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
// 3*x - 7*y + 6*z = 38
// 4*x + 1*y + 5*z = 43
// Create matrix "A" with coefficients
// Create matrix "A" with coefficients
var matrixA = DenseMatrix.OfArray(new[,] { { 5.00, 2.00, -4.00 }, { 3.00, -7.00, 6.00 }, { 4.00, 1.00, 5.00 } });
Console.WriteLine(@"Matrix 'A' with coefficients");
Console.WriteLine(matrixA.ToString("#0.00\t", formatProvider));
@ -90,20 +84,20 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine(vectorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();
// Create stop criteriums to monitor an iterative calculation. There are next available stop criteriums:
// - DivergenceStopCriterium: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterium: monitors residuals for NaN's;
// - IterationCountStopCriterium: monitors the numbers of iteration steps;
// - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Create stop criteria to monitor an iterative calculation. There are next available stop criteria:
// - DivergenceStopCriterion: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterion: monitors residuals for NaN's;
// - IterationCountStopCriterion: monitors the numbers of iteration steps;
// - ResidualStopCriterion: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
var iterationCountStopCriterion = new IterationCountStopCriterion<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium<double>(1e-10);
var residualStopCriterion = new ResidualStopCriterion<double>(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator<double>(iterationCountStopCriterium, residualStopCriterium);
// Create monitor with defined stop criteria
var monitor = new Iterator<double>(iterationCountStopCriterion, residualStopCriterion);
// Create Multiple-Lanczos Bi-Conjugate Gradient Stabilized solver
var solver = new MlkBiCgStab();
@ -113,7 +107,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine(@"1. Solve the matrix equation");
Console.WriteLine();
// 2. Check solver status of the iterations.
// 2. Check solver status of the iterations.
// Solver has property IterationResult which contains the status of the iteration once the calculation is finished.
// Possible values are:
// - CalculationCancelled: calculation was cancelled by the user;
@ -133,7 +127,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine();
// 4. Verify result. Multiply coefficient matrix "A" by result vector "x"
var reconstructVecorB = matrixA * resultX;
var reconstructVecorB = matrixA*resultX;
Console.WriteLine(@"4. Multiply coefficient matrix 'A' by result vector 'x'");
Console.WriteLine(reconstructVecorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();

32
src/Examples/LinearAlgebra/IterativeSolvers/TFQMRSolver.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -47,10 +47,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Name
{
get
{
return "Transpose Free Quasi-Minimal Residual iterative solver";
}
get { return "Transpose Free Quasi-Minimal Residual iterative solver"; }
}
/// <summary>
@ -58,10 +55,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
/// </summary>
public string Description
{
get
{
return "Solve linear equation using Transpose Free Quasi-Minimal Residual (TFQMR) iterative solver";
}
get { return "Solve linear equation using Transpose Free Quasi-Minimal Residual (TFQMR) iterative solver"; }
}
/// <summary>
@ -90,20 +84,20 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine(vectorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();
// Create stop criteriums to monitor an iterative calculation. There are next available stop criteriums:
// - DivergenceStopCriterium: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterium: monitors residuals for NaN's;
// - IterationCountStopCriterium: monitors the numbers of iteration steps;
// - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Create stop criteria to monitor an iterative calculation. There are next available stop criteria:
// - DivergenceStopCriterion: monitors an iterative calculation for signs of divergence;
// - FailureStopCriterion: monitors residuals for NaN's;
// - IterationCountStopCriterion: monitors the numbers of iteration steps;
// - ResidualStopCriterion: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
var iterationCountStopCriterion = new IterationCountStopCriterion<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium<double>(1e-10);
var residualStopCriterion = new ResidualStopCriterion<double>(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator<double>(iterationCountStopCriterium, residualStopCriterium);
// Create monitor with defined stop criteria
var monitor = new Iterator<double>(iterationCountStopCriterion, residualStopCriterion);
// Create Transpose Free Quasi-Minimal Residual solver
var solver = new TFQMR();
@ -133,7 +127,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
Console.WriteLine();
// 4. Verify result. Multiply coefficient matrix "A" by result vector "x"
var reconstructVecorB = matrixA * resultX;
var reconstructVecorB = matrixA*resultX;
Console.WriteLine(@"4. Multiply coefficient matrix 'A' by result vector 'x'");
Console.WriteLine(reconstructVecorB.ToString("#0.00\t", formatProvider));
Console.WriteLine();

71
src/Numerics/LinearAlgebra/Builder.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -70,14 +70,14 @@ namespace MathNet.Numerics.LinearAlgebra.Double
return Dense(rows, columns, (i, j) => distribution.Sample());
}
public override IIterationStopCriterium<double>[] IterativeSolverStopCriteria(int maxIterations = 1000)
public override IIterationStopCriterion<double>[] IterativeSolverStopCriteria(int maxIterations = 1000)
{
return new IIterationStopCriterium<double>[]
return new IIterationStopCriterion<double>[]
{
new FailureStopCriterium<double>(),
new DivergenceStopCriterium<double>(),
new IterationCountStopCriterium<double>(maxIterations),
new ResidualStopCriterium<double>(1e-12)
new FailureStopCriterion<double>(),
new DivergenceStopCriterion<double>(),
new IterationCountStopCriterion<double>(maxIterations),
new ResidualStopCriterion<double>(1e-12)
};
}
}
@ -145,14 +145,14 @@ namespace MathNet.Numerics.LinearAlgebra.Single
return Dense(rows, columns, (i, j) => (float) distribution.Sample());
}
public override IIterationStopCriterium<float>[] IterativeSolverStopCriteria(int maxIterations = 1000)
public override IIterationStopCriterion<float>[] IterativeSolverStopCriteria(int maxIterations = 1000)
{
return new IIterationStopCriterium<float>[]
return new IIterationStopCriterion<float>[]
{
new FailureStopCriterium<float>(),
new DivergenceStopCriterium<float>(),
new IterationCountStopCriterium<float>(maxIterations),
new ResidualStopCriterium<float>(1e-6)
new FailureStopCriterion<float>(),
new DivergenceStopCriterion<float>(),
new IterationCountStopCriterion<float>(maxIterations),
new ResidualStopCriterion<float>(1e-6)
};
}
}
@ -226,14 +226,14 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
return Dense(rows, columns, (i, j) => new Complex(distribution.Sample(), distribution.Sample()));
}
public override IIterationStopCriterium<Complex>[] IterativeSolverStopCriteria(int maxIterations = 1000)
public override IIterationStopCriterion<Complex>[] IterativeSolverStopCriteria(int maxIterations = 1000)
{
return new IIterationStopCriterium<Complex>[]
return new IIterationStopCriterion<Complex>[]
{
new FailureStopCriterium<Complex>(),
new DivergenceStopCriterium<Complex>(),
new IterationCountStopCriterium<Complex>(maxIterations),
new ResidualStopCriterium<Complex>(1e-12)
new FailureStopCriterion<Complex>(),
new DivergenceStopCriterion<Complex>(),
new IterationCountStopCriterion<Complex>(maxIterations),
new ResidualStopCriterion<Complex>(1e-12)
};
}
}
@ -301,14 +301,14 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
return Dense(rows, columns, (i, j) => new Numerics.Complex32((float) distribution.Sample(), (float) distribution.Sample()));
}
public override IIterationStopCriterium<Numerics.Complex32>[] IterativeSolverStopCriteria(int maxIterations = 1000)
public override IIterationStopCriterion<Numerics.Complex32>[] IterativeSolverStopCriteria(int maxIterations = 1000)
{
return new IIterationStopCriterium<Numerics.Complex32>[]
return new IIterationStopCriterion<Numerics.Complex32>[]
{
new FailureStopCriterium<Numerics.Complex32>(),
new DivergenceStopCriterium<Numerics.Complex32>(),
new IterationCountStopCriterium<Numerics.Complex32>(maxIterations),
new ResidualStopCriterium<Numerics.Complex32>(1e-6)
new FailureStopCriterion<Numerics.Complex32>(),
new DivergenceStopCriterion<Numerics.Complex32>(),
new IterationCountStopCriterion<Numerics.Complex32>(maxIterations),
new ResidualStopCriterion<Numerics.Complex32>(1e-6)
};
}
}
@ -349,6 +349,7 @@ namespace MathNet.Numerics.LinearAlgebra
using Complex64 = Numerics.Complex;
#else
using Complex64 = System.Numerics.Complex;
#endif
/// <summary>
@ -825,7 +826,7 @@ namespace MathNet.Numerics.LinearAlgebra
int coloffset = 0;
for (int j = 0; j < colspans.Length; j++)
{
m.SetSubMatrix(rowoffset, coloffset, matrices[i,j]);
m.SetSubMatrix(rowoffset, coloffset, matrices[i, j]);
coloffset += colspans[j];
}
rowoffset += rowspans[i];
@ -1302,7 +1303,7 @@ namespace MathNet.Numerics.LinearAlgebra
return m;
}
public abstract IIterationStopCriterium<T>[] IterativeSolverStopCriteria(int maxIterations = 1000);
public abstract IIterationStopCriterion<T>[] IterativeSolverStopCriteria(int maxIterations = 1000);
}
/// <summary>
@ -1576,29 +1577,29 @@ namespace MathNet.Numerics.LinearAlgebra
if (typeof (T) == typeof (Complex64))
{
return new Tuple<MatrixBuilder<T>, VectorBuilder<T>>(
(MatrixBuilder<T>) (object) new Complex.MatrixBuilder(),
(VectorBuilder<T>) (object) new Complex.VectorBuilder());
(MatrixBuilder<T>)(object)new Complex.MatrixBuilder(),
(VectorBuilder<T>)(object)new Complex.VectorBuilder());
}
if (typeof (T) == typeof (Numerics.Complex32))
{
return new Tuple<MatrixBuilder<T>, VectorBuilder<T>>(
(MatrixBuilder<T>) (object) new Complex32.MatrixBuilder(),
(VectorBuilder<T>) (object) new Complex32.VectorBuilder());
(MatrixBuilder<T>)(object)new Complex32.MatrixBuilder(),
(VectorBuilder<T>)(object)new Complex32.VectorBuilder());
}
if (typeof (T) == typeof (double))
{
return new Tuple<MatrixBuilder<T>, VectorBuilder<T>>(
(MatrixBuilder<T>) (object) new Double.MatrixBuilder(),
(VectorBuilder<T>) (object) new Double.VectorBuilder());
(MatrixBuilder<T>)(object)new Double.MatrixBuilder(),
(VectorBuilder<T>)(object)new Double.VectorBuilder());
}
if (typeof (T) == typeof (float))
{
return new Tuple<MatrixBuilder<T>, VectorBuilder<T>>(
(MatrixBuilder<T>) (object) new Single.MatrixBuilder(),
(VectorBuilder<T>) (object) new Single.VectorBuilder());
(MatrixBuilder<T>)(object)new Single.MatrixBuilder(),
(VectorBuilder<T>)(object)new Single.VectorBuilder());
}
throw new NotSupportedException();

18
src/Numerics/LinearAlgebra/Matrix.Solve.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -223,7 +223,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="solver">The iterative solver to use.</param>
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
/// <param name="preconditioner">The preconditioner to use for approximations.</param>
public IterationStatus TrySolveIterative(Vector<T> input, Vector<T> result, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterium<T>[] stopCriteria)
public IterationStatus TrySolveIterative(Vector<T> input, Vector<T> result, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterion<T>[] stopCriteria)
{
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Build.IterativeSolverStopCriteria() : stopCriteria);
return TrySolveIterative(input, result, solver, iterator, preconditioner);
@ -237,7 +237,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="solver">The iterative solver to use.</param>
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
/// <param name="preconditioner">The preconditioner to use for approximations.</param>
public IterationStatus TrySolveIterative(Matrix<T> input, Matrix<T> result, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterium<T>[] stopCriteria)
public IterationStatus TrySolveIterative(Matrix<T> input, Matrix<T> result, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterion<T>[] stopCriteria)
{
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Build.IterativeSolverStopCriteria() : stopCriteria);
return TrySolveIterative(input, result, solver, iterator, preconditioner);
@ -250,7 +250,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="result">The result vector <c>x</c>.</param>
/// <param name="solver">The iterative solver to use.</param>
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
public IterationStatus TrySolveIterative(Vector<T> input, Vector<T> result, IIterativeSolver<T> solver, params IIterationStopCriterium<T>[] stopCriteria)
public IterationStatus TrySolveIterative(Vector<T> input, Vector<T> result, IIterativeSolver<T> solver, params IIterationStopCriterion<T>[] stopCriteria)
{
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Build.IterativeSolverStopCriteria() : stopCriteria);
return TrySolveIterative(input, result, solver, iterator);
@ -263,7 +263,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="result">The result matrix <c>X</c></param>
/// <param name="solver">The iterative solver to use.</param>
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
public IterationStatus TrySolveIterative(Matrix<T> input, Matrix<T> result, IIterativeSolver<T> solver, params IIterationStopCriterium<T>[] stopCriteria)
public IterationStatus TrySolveIterative(Matrix<T> input, Matrix<T> result, IIterativeSolver<T> solver, params IIterationStopCriterion<T>[] stopCriteria)
{
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Build.IterativeSolverStopCriteria() : stopCriteria);
return TrySolveIterative(input, result, solver, iterator);
@ -311,7 +311,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
/// <param name="preconditioner">The preconditioner to use for approximations.</param>
/// <returns>The result vector <c>x</c>.</returns>
public Vector<T> SolveIterative(Vector<T> input, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterium<T>[] stopCriteria)
public Vector<T> SolveIterative(Vector<T> input, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterion<T>[] stopCriteria)
{
var result = Vector<T>.Build.Dense(RowCount);
TrySolveIterative(input, result, solver, preconditioner, stopCriteria);
@ -326,7 +326,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
/// <param name="preconditioner">The preconditioner to use for approximations.</param>
/// <returns>The result matrix <c>X</c>.</returns>
public Matrix<T> SolveIterative(Matrix<T> input, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterium<T>[] stopCriteria)
public Matrix<T> SolveIterative(Matrix<T> input, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterion<T>[] stopCriteria)
{
var result = Build.Dense(input.RowCount, input.ColumnCount);
TrySolveIterative(input, result, solver, preconditioner, stopCriteria);
@ -340,7 +340,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="solver">The iterative solver to use.</param>
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
/// <returns>The result vector <c>x</c>.</returns>
public Vector<T> SolveIterative(Vector<T> input, IIterativeSolver<T> solver, params IIterationStopCriterium<T>[] stopCriteria)
public Vector<T> SolveIterative(Vector<T> input, IIterativeSolver<T> solver, params IIterationStopCriterion<T>[] stopCriteria)
{
var result = Vector<T>.Build.Dense(RowCount);
TrySolveIterative(input, result, solver, stopCriteria);
@ -354,7 +354,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="solver">The iterative solver to use.</param>
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
/// <returns>The result matrix <c>X</c>.</returns>
public Matrix<T> SolveIterative(Matrix<T> input, IIterativeSolver<T> solver, params IIterationStopCriterium<T>[] stopCriteria)
public Matrix<T> SolveIterative(Matrix<T> input, IIterativeSolver<T> solver, params IIterationStopCriterion<T>[] stopCriteria)
{
var result = Build.Dense(input.RowCount, input.ColumnCount);
TrySolveIterative(input, result, solver, stopCriteria);

33
src/Numerics/LinearAlgebra/Solvers/CancellationStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/CancellationStopCriterion.cs

@ -1,10 +1,10 @@
// <copyright file="IterationCountStopCriterium.cs" company="Math.NET">
// <copyright file="IterationCountStopCriterion.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -35,26 +35,26 @@ using System.Threading;
namespace MathNet.Numerics.LinearAlgebra.Solvers
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that uses a cancellationn token as stop criterium.
/// Defines an <see cref="IIterationStopCriterion{T}"/> that uses a cancellation token as stop criterion.
/// </summary>
public sealed class CancellationStopCriterium<T> : IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
public sealed class CancellationStopCriterion<T> : IIterationStopCriterion<T> where T : struct, IEquatable<T>, IFormattable
{
readonly CancellationToken _masterToken;
CancellationTokenSource _currentTcs;
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium{T}"/> class.
/// Initializes a new instance of the <see cref="IterationCountStopCriterion{T}"/> class.
/// </summary>
public CancellationStopCriterium()
public CancellationStopCriterion()
{
_masterToken = CancellationToken.None;
_currentTcs = CancellationTokenSource.CreateLinkedTokenSource(CancellationToken.None);
}
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium{T}"/> class.
/// Initializes a new instance of the <see cref="IterationCountStopCriterion{T}"/> class.
/// </summary>
public CancellationStopCriterium(CancellationToken masterToken)
public CancellationStopCriterion(CancellationToken masterToken)
{
_masterToken = masterToken;
_currentTcs = CancellationTokenSource.CreateLinkedTokenSource(masterToken);
@ -62,7 +62,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IterationCountStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// by the current <see cref="IterationCountStopCriterion{T}"/>. Result is set into <c>Status</c> field.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
@ -84,10 +84,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public IterationStatus Status
{
[DebuggerStepThrough]
get
{
return _currentTcs.Token.IsCancellationRequested ? IterationStatus.Cancelled : IterationStatus.Continue;
}
get { return _currentTcs.Token.IsCancellationRequested ? IterationStatus.Cancelled : IterationStatus.Continue; }
}
public void Cancel()
@ -96,7 +93,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
}
/// <summary>
/// Resets the <see cref="IterationCountStopCriterium{T}"/> to the pre-calculation state.
/// Resets the <see cref="IterationCountStopCriterion{T}"/> to the pre-calculation state.
/// </summary>
public void Reset()
{
@ -104,12 +101,12 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
}
/// <summary>
/// Clones the current <see cref="IterationCountStopCriterium{T}"/> and its settings.
/// Clones the current <see cref="IterationCountStopCriterion{T}"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium{T}"/> class.</returns>
public IIterationStopCriterium<T> Clone()
/// <returns>A new instance of the <see cref="IterationCountStopCriterion{T}"/> class.</returns>
public IIterationStopCriterion<T> Clone()
{
return new CancellationStopCriterium<T>(_masterToken);
return new CancellationStopCriterion<T>(_masterToken);
}
}
}

44
src/Numerics/LinearAlgebra/Solvers/DivergenceStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/DivergenceStopCriterion.cs

@ -1,10 +1,10 @@
// <copyright file="DivergenceStopCriterium.cs" company="Math.NET">
// <copyright file="DivergenceStopCriterion.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2010 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -36,7 +36,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <summary>
/// Monitors an iterative calculation for signs of divergence.
/// </summary>
public sealed class DivergenceStopCriterium<T> : IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
public sealed class DivergenceStopCriterion<T> : IIterationStopCriterion<T> where T : struct, IEquatable<T>, IFormattable
{
/// <summary>
/// The maximum relative increase the residual may experience without triggering a divergence warning.
@ -64,12 +64,12 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
int _lastIteration = -1;
/// <summary>
/// Initializes a new instance of the <see cref="DivergenceStopCriterium{T}"/> class with the specified maximum
/// Initializes a new instance of the <see cref="DivergenceStopCriterion{T}"/> class with the specified maximum
/// relative increase and the specified minimum number of tracking iterations.
/// </summary>
/// <param name="maximumRelativeIncrease">The maximum relative increase that the residual may experience before a divergence warning is issued. </param>
/// <param name="minimumIterations">The minimum number of iterations over which the residual must grow before a divergence warning is issued.</param>
public DivergenceStopCriterium(double maximumRelativeIncrease = 0.08, int minimumIterations = 10)
public DivergenceStopCriterion(double maximumRelativeIncrease = 0.08, int minimumIterations = 10)
{
if (maximumRelativeIncrease <= 0)
{
@ -93,10 +93,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public double MaximumRelativeIncrease
{
[DebuggerStepThrough]
get
{
return _maximumRelativeIncrease;
}
get { return _maximumRelativeIncrease; }
[DebuggerStepThrough]
set
@ -118,10 +115,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public int MinimumNumberOfIterations
{
[DebuggerStepThrough]
get
{
return _minimumNumberOfIterations;
}
get { return _minimumNumberOfIterations; }
[DebuggerStepThrough]
set
@ -139,7 +133,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// by the current <see cref="IIterationStopCriterion{T}"/>. Result is set into <c>Status</c> field.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
@ -147,7 +141,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <param name="residualVector">The vector containing the current residual vectors.</param>
/// <remarks>
/// The individual stop criteria may internally track the progress of the calculation based
/// on the invocation of this method. Therefore this method should only be called if the
/// on the invocation of this method. Therefore this method should only be called if the
/// calculation has moved forwards at least one step.
/// </remarks>
public IterationStatus DetermineStatus(int iterationNumber, Vector<T> solutionVector, Vector<T> sourceVector, Vector<T> residualVector)
@ -227,10 +221,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
int RequiredHistoryLength
{
[DebuggerStepThrough]
get
{
return _minimumNumberOfIterations + 1;
}
get { return _minimumNumberOfIterations + 1; }
}
/// <summary>
@ -239,14 +230,11 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public IterationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
get { return _status; }
}
/// <summary>
/// Resets the <see cref="IIterationStopCriterium{T}"/> to the pre-calculation state.
/// Resets the <see cref="IIterationStopCriterion{T}"/> to the pre-calculation state.
/// </summary>
public void Reset()
{
@ -256,12 +244,12 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
}
/// <summary>
/// Clones the current <see cref="DivergenceStopCriterium{T}"/> and its settings.
/// Clones the current <see cref="DivergenceStopCriterion{T}"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="DivergenceStopCriterium{T}"/> class.</returns>
public IIterationStopCriterium<T> Clone()
/// <returns>A new instance of the <see cref="DivergenceStopCriterion{T}"/> class.</returns>
public IIterationStopCriterion<T> Clone()
{
return new DivergenceStopCriterium<T>(_maximumRelativeIncrease, _minimumNumberOfIterations);
return new DivergenceStopCriterion<T>(_maximumRelativeIncrease, _minimumNumberOfIterations);
}
}
}

27
src/Numerics/LinearAlgebra/Solvers/FailureStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/FailureStopCriterion.cs

@ -1,10 +1,10 @@
// <copyright file="FailureStopCriterium.cs" company="Math.NET">
// <copyright file="FailureStopCriterion.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2010 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -35,9 +35,9 @@ using MathNet.Numerics.Properties;
namespace MathNet.Numerics.LinearAlgebra.Solvers
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals for NaN's.
/// Defines an <see cref="IIterationStopCriterion{T}"/> that monitors residuals for NaN's.
/// </summary>
public sealed class FailureStopCriterium<T> : IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
public sealed class FailureStopCriterion<T> : IIterationStopCriterion<T> where T : struct, IEquatable<T>, IFormattable
{
/// <summary>
/// The status of the calculation
@ -51,7 +51,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// by the current <see cref="IIterationStopCriterion{T}"/>. Result is set into <c>Status</c> field.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
@ -59,7 +59,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <param name="residualVector">The vector containing the current residual vectors.</param>
/// <remarks>
/// The individual stop criteria may internally track the progress of the calculation based
/// on the invocation of this method. Therefore this method should only be called if the
/// on the invocation of this method. Therefore this method should only be called if the
/// calculation has moved forwards at least one step.
/// </remarks>
public IterationStatus DetermineStatus(int iterationNumber, Vector<T> solutionVector, Vector<T> sourceVector, Vector<T> residualVector)
@ -97,14 +97,11 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public IterationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
get { return _status; }
}
/// <summary>
/// Resets the <see cref="IIterationStopCriterium{T}"/> to the pre-calculation state.
/// Resets the <see cref="IIterationStopCriterion{T}"/> to the pre-calculation state.
/// </summary>
public void Reset()
{
@ -113,12 +110,12 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
}
/// <summary>
/// Clones the current <see cref="FailureStopCriterium{T}"/> and its settings.
/// Clones the current <see cref="FailureStopCriterion{T}"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium{T}"/> class.</returns>
public IIterationStopCriterium<T> Clone()
/// <returns>A new instance of the <see cref="FailureStopCriterion{T}"/> class.</returns>
public IIterationStopCriterion<T> Clone()
{
return new FailureStopCriterium<T>();
return new FailureStopCriterion<T>();
}
}
}

18
src/Numerics/LinearAlgebra/Solvers/IIterationStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/IIterationStopCriterion.cs

@ -1,10 +1,10 @@
// <copyright file="IIterationStopCriterium.cs" company="Math.NET">
// <copyright file="IIterationStopCriterion.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -33,13 +33,13 @@ using System;
namespace MathNet.Numerics.LinearAlgebra.Solvers
{
/// <summary>
/// The base interface for classes that provide stop criteria for iterative calculations.
/// The base interface for classes that provide stop criteria for iterative calculations.
/// </summary>
public interface IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
public interface IIterationStopCriterion<T> where T : struct, IEquatable<T>, IFormattable
{
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current IIterationStopCriterium. Status is set to <c>Status</c> field of current object.
/// by the current IIterationStopCriterion. Status is set to <c>Status</c> field of current object.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
@ -47,7 +47,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <param name="residualVector">The vector containing the current residual vectors.</param>
/// <remarks>
/// The individual stop criteria may internally track the progress of the calculation based
/// on the invocation of this method. Therefore this method should only be called if the
/// on the invocation of this method. Therefore this method should only be called if the
/// calculation has moved forwards at least one step.
/// </remarks>
IterationStatus DetermineStatus(int iterationNumber, Vector<T> solutionVector, Vector<T> sourceVector, Vector<T> residualVector);
@ -59,13 +59,13 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
IterationStatus Status { get; }
/// <summary>
/// Resets the IIterationStopCriterium to the pre-calculation state.
/// Resets the IIterationStopCriterion to the pre-calculation state.
/// </summary>
/// <remarks>To implementers: Invoking this method should not clear the user defined
/// property values, only the state that is used to track the progress of the
/// property values, only the state that is used to track the progress of the
/// calculation.</remarks>
void Reset();
IIterationStopCriterium<T> Clone();
IIterationStopCriterion<T> Clone();
}
}

2
src/Numerics/LinearAlgebra/Solvers/IIterativeSolver.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

2
src/Numerics/LinearAlgebra/Solvers/IIterativeSolverSetup.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

2
src/Numerics/LinearAlgebra/Solvers/IPreconditioner.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

40
src/Numerics/LinearAlgebra/Solvers/IterationCountStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/IterationCountStopCriterion.cs

@ -1,10 +1,10 @@
// <copyright file="IterationCountStopCriterium.cs" company="Math.NET">
// <copyright file="IterationCountStopCriterion.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,10 +34,10 @@ using System.Diagnostics;
namespace MathNet.Numerics.LinearAlgebra.Solvers
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors the numbers of iteration
/// steps as stop criterium.
/// Defines an <see cref="IIterationStopCriterion{T}"/> that monitors the numbers of iteration
/// steps as stop criterion.
/// </summary>
public sealed class IterationCountStopCriterium<T> : IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
public sealed class IterationCountStopCriterion<T> : IIterationStopCriterion<T> where T : struct, IEquatable<T>, IFormattable
{
/// <summary>
/// The default value for the maximum number of iterations the process is allowed
@ -56,19 +56,19 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
IterationStatus _status = IterationStatus.Continue;
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium{T}"/> class with the default maximum
/// Initializes a new instance of the <see cref="IterationCountStopCriterion{T}"/> class with the default maximum
/// number of iterations.
/// </summary>
public IterationCountStopCriterium() : this(DefaultMaximumNumberOfIterations)
public IterationCountStopCriterion() : this(DefaultMaximumNumberOfIterations)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium{T}"/> class with the specified maximum
/// Initializes a new instance of the <see cref="IterationCountStopCriterion{T}"/> class with the specified maximum
/// number of iterations.
/// </summary>
/// <param name="maximumNumberOfIterations">The maximum number of iterations the calculation is allowed to perform.</param>
public IterationCountStopCriterium(int maximumNumberOfIterations)
public IterationCountStopCriterion(int maximumNumberOfIterations)
{
if (maximumNumberOfIterations < 1)
{
@ -85,10 +85,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public int MaximumNumberOfIterations
{
[DebuggerStepThrough]
get
{
return _maximumNumberOfIterations;
}
get { return _maximumNumberOfIterations; }
[DebuggerStepThrough]
set
@ -112,7 +109,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IterationCountStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// by the current <see cref="IterationCountStopCriterion{T}"/>. Result is set into <c>Status</c> field.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
@ -141,14 +138,11 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public IterationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
get { return _status; }
}
/// <summary>
/// Resets the <see cref="IterationCountStopCriterium{T}"/> to the pre-calculation state.
/// Resets the <see cref="IterationCountStopCriterion{T}"/> to the pre-calculation state.
/// </summary>
public void Reset()
{
@ -156,12 +150,12 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
}
/// <summary>
/// Clones the current <see cref="IterationCountStopCriterium{T}"/> and its settings.
/// Clones the current <see cref="IterationCountStopCriterion{T}"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium{T}"/> class.</returns>
public IIterationStopCriterium<T> Clone()
/// <returns>A new instance of the <see cref="IterationCountStopCriterion{T}"/> class.</returns>
public IIterationStopCriterion<T> Clone()
{
return new IterationCountStopCriterium<T>(_maximumNumberOfIterations);
return new IterationCountStopCriterion<T>(_maximumNumberOfIterations);
}
}
}

2
src/Numerics/LinearAlgebra/Solvers/IterationStatus.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2010 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

30
src/Numerics/LinearAlgebra/Solvers/Iterator.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -44,7 +44,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// The collection that holds all the stop criteria and the flag indicating if they should be added
/// to the child iterators.
/// </summary>
readonly List<IIterationStopCriterium<T>> _stopCriteria;
readonly List<IIterationStopCriterion<T>> _stopCriteria;
/// <summary>
/// The status of the iterator.
@ -56,31 +56,31 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// </summary>
public Iterator()
{
_stopCriteria = new List<IIterationStopCriterium<T>>(Matrix<T>.Build.IterativeSolverStopCriteria());
_stopCriteria = new List<IIterationStopCriterion<T>>(Matrix<T>.Build.IterativeSolverStopCriteria());
}
/// <summary>
/// Initializes a new instance of the <see cref="Iterator{T}"/> class with the specified stop criteria.
/// </summary>
/// <param name="stopCriteria">
/// The specified stop criteria. Only one stop criterium of each type can be passed in. None
/// The specified stop criteria. Only one stop criterion of each type can be passed in. None
/// of the stop criteria will be passed on to child iterators.
/// </param>
public Iterator(params IIterationStopCriterium<T>[] stopCriteria)
public Iterator(params IIterationStopCriterion<T>[] stopCriteria)
{
_stopCriteria = new List<IIterationStopCriterium<T>>(stopCriteria);
_stopCriteria = new List<IIterationStopCriterion<T>>(stopCriteria);
}
/// <summary>
/// Initializes a new instance of the <see cref="Iterator{T}"/> class with the specified stop criteria.
/// </summary>
/// <param name="stopCriteria">
/// The specified stop criteria. Only one stop criterium of each type can be passed in. None
/// The specified stop criteria. Only one stop criterion of each type can be passed in. None
/// of the stop criteria will be passed on to child iterators.
/// </param>
public Iterator(IEnumerable<IIterationStopCriterium<T>> stopCriteria)
public Iterator(IEnumerable<IIterationStopCriterion<T>> stopCriteria)
{
_stopCriteria = new List<IIterationStopCriterium<T>>(stopCriteria);
_stopCriteria = new List<IIterationStopCriterion<T>>(stopCriteria);
}
/// <summary>
@ -101,14 +101,14 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <param name="residualVector">The vector containing the current residual vectors.</param>
/// <remarks>
/// The individual iterators may internally track the progress of the calculation based
/// on the invocation of this method. Therefore this method should only be called if the
/// on the invocation of this method. Therefore this method should only be called if the
/// calculation has moved forwards at least one step.
/// </remarks>
public IterationStatus DetermineStatus(int iterationNumber, Vector<T> solutionVector, Vector<T> sourceVector, Vector<T> residualVector)
{
if (_stopCriteria.Count == 0)
{
throw new ArgumentException(Resources.StopCriteriumMissing);
throw new ArgumentException(Resources.StopCriterionMissing);
}
if (iterationNumber < 0)
@ -122,9 +122,9 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
return _status;
}
foreach (var stopCriterium in _stopCriteria)
foreach (var stopCriterion in _stopCriteria)
{
var status = stopCriterium.DetermineStatus(iterationNumber, solutionVector, sourceVector, residualVector);
var status = stopCriterion.DetermineStatus(iterationNumber, solutionVector, sourceVector, residualVector);
if (status == IterationStatus.Continue)
{
continue;
@ -159,9 +159,9 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
{
_status = IterationStatus.Continue;
foreach (var stopCriterium in _stopCriteria)
foreach (var stopCriterion in _stopCriteria)
{
stopCriterium.Reset();
stopCriterion.Reset();
}
}

55
src/Numerics/LinearAlgebra/Solvers/ResidualStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/ResidualStopCriterion.cs

@ -1,10 +1,10 @@
// <copyright file="ResidualStopCriterium.cs" company="Math.NET">
// <copyright file="ResidualStopCriterion.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2010 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -35,9 +35,9 @@ using MathNet.Numerics.Properties;
namespace MathNet.Numerics.LinearAlgebra.Solvers
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals as stop criterium.
/// Defines an <see cref="IIterationStopCriterion{T}"/> that monitors residuals as stop criterion.
/// </summary>
public sealed class ResidualStopCriterium<T> : IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
public sealed class ResidualStopCriterion<T> : IIterationStopCriterion<T> where T : struct, IEquatable<T>, IFormattable
{
/// <summary>
/// The maximum value for the residual below which the calculation is considered converged.
@ -66,7 +66,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
int _lastIteration = -1;
/// <summary>
/// Initializes a new instance of the <see cref="ResidualStopCriterium{T}"/> class with the specified
/// Initializes a new instance of the <see cref="ResidualStopCriterion{T}"/> class with the specified
/// maximum residual and minimum number of iterations.
/// </summary>
/// <param name="maximum">
@ -76,7 +76,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// The minimum number of iterations for which the residual has to be below the maximum before
/// the calculation is considered converged.
/// </param>
public ResidualStopCriterium(double maximum, int minimumIterationsBelowMaximum = 0)
public ResidualStopCriterion(double maximum, int minimumIterationsBelowMaximum = 0)
{
if (maximum < 0)
{
@ -93,17 +93,14 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
}
/// <summary>
/// Gets or sets the maximum value for the residual below which the calculation is considered
/// Gets or sets the maximum value for the residual below which the calculation is considered
/// converged.
/// </summary>
/// <exception cref="ArgumentOutOfRangeException">Thrown if the <c>Maximum</c> is set to a negative value.</exception>
public double Maximum
{
[DebuggerStepThrough]
get
{
return _maximum;
}
get { return _maximum; }
[DebuggerStepThrough]
set
@ -125,10 +122,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public int MinimumIterationsBelowMaximum
{
[DebuggerStepThrough]
get
{
return _minimumIterationsBelowMaximum;
}
get { return _minimumIterationsBelowMaximum; }
[DebuggerStepThrough]
set
@ -144,7 +138,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// by the current <see cref="IIterationStopCriterion{T}"/>. Result is set into <c>Status</c> field.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
@ -152,7 +146,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// <param name="residualVector">The vector containing the current residual vectors.</param>
/// <remarks>
/// The individual stop criteria may internally track the progress of the calculation based
/// on the invocation of this method. Therefore this method should only be called if the
/// on the invocation of this method. Therefore this method should only be called if the
/// calculation has moved forwards at least one step.
/// </remarks>
public IterationStatus DetermineStatus(int iterationNumber, Vector<T> solutionVector, Vector<T> sourceVector, Vector<T> residualVector)
@ -179,22 +173,22 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
var residualNorm = residualVector.InfinityNorm();
// This is criterium 1 from Templates for the solution of linear systems.
// The problem with this criterium is that it's not limiting enough. For now
// This is criterion 1 from Templates for the solution of linear systems.
// The problem with this criterion is that it's not limiting enough. For now
// we won't use it. Later on we might get back to it.
// return mMaximumResidual * (System.Math.Abs(mMatrixNorm) * System.Math.Abs(solutionNorm) + System.Math.Abs(mVectorNorm));
// For now use criterium 2 from Templates for the solution of linear systems. See page 60.
// For now use criterion 2 from Templates for the solution of linear systems. See page 60.
// Check the residuals by calculating:
// ||r_i|| <= stop_tol * ||b||
var stopCriterium = _maximum * sourceVector.InfinityNorm();
var stopCriterion = _maximum*sourceVector.InfinityNorm();
// First check that we have real numbers not NaN's.
// NaN's can occur when the iterative process diverges so we
// stop if that is the case.
if (double.IsNaN(stopCriterium) || double.IsNaN(residualNorm))
if (double.IsNaN(stopCriterion) || double.IsNaN(residualNorm))
{
_iterationCount = 0;
_status = IterationStatus.Diverged;
@ -203,7 +197,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
// ||r_i|| <= stop_tol * ||b||
// Stop the calculation if it's clearly smaller than the tolerance
if (residualNorm < stopCriterium)
if (residualNorm < stopCriterion)
{
if (_lastIteration <= iterationNumber)
{
@ -227,14 +221,11 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
public IterationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
get { return _status; }
}
/// <summary>
/// Resets the <see cref="IIterationStopCriterium{T}"/> to the pre-calculation state.
/// Resets the <see cref="IIterationStopCriterion{T}"/> to the pre-calculation state.
/// </summary>
public void Reset()
{
@ -244,12 +235,12 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
}
/// <summary>
/// Clones the current <see cref="ResidualStopCriterium{T}"/> and its settings.
/// Clones the current <see cref="ResidualStopCriterion{T}"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="ResidualStopCriterium{T}"/> class.</returns>
public IIterationStopCriterium<T> Clone()
/// <returns>A new instance of the <see cref="ResidualStopCriterion{T}"/> class.</returns>
public IIterationStopCriterion<T> Clone()
{
return new ResidualStopCriterium<T>(_maximum, _minimumIterationsBelowMaximum);
return new ResidualStopCriterion<T>(_maximum, _minimumIterationsBelowMaximum);
}
}
}

2
src/Numerics/LinearAlgebra/Solvers/SolverSetup.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

2
src/Numerics/LinearAlgebra/Solvers/UnitPreconditioner.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

12
src/Numerics/Numerics.csproj

@ -141,10 +141,10 @@
<Compile Include="LinearAlgebra\Double\Solvers\MILU0Preconditioner.cs" />
<Compile Include="LinearAlgebra\Matrix.Solve.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\MILU0Preconditioner.cs" />
<Compile Include="LinearAlgebra\Solvers\CancellationStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\CancellationStopCriterion.cs" />
<Compile Include="LinearAlgebra\Solvers\IterationStatus.cs" />
<Compile Include="LinearAlgebra\Solvers\Iterator.cs" />
<Compile Include="LinearAlgebra\Solvers\IterationCountStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\IterationCountStopCriterion.cs" />
<Compile Include="LinearAlgebra\Solvers\SolverSetup.cs" />
<Compile Include="LinearRegression\MultipleRegression.cs" />
<Compile Include="LinearRegression\WeightedRegression.cs" />
@ -249,7 +249,7 @@
<Compile Include="LinearAlgebra\Solvers\IIterativeSolver.cs" />
<Compile Include="LinearAlgebra\Solvers\IIterativeSolverSetup.cs" />
<Compile Include="LinearAlgebra\Solvers\IPreconditioner.cs" />
<Compile Include="LinearAlgebra\Solvers\IIterationStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\IIterationStopCriterion.cs" />
<Compile Include="LinearAlgebra\Double\SparseMatrix.cs" />
<Compile Include="LinearAlgebra\Double\Vector.cs" />
<Compile Include="LinearAlgebra\Complex32\DenseVector.cs" />
@ -331,8 +331,8 @@
<Compile Include="LinearAlgebra\Single\Solvers\DiagonalPreconditioner.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\ILUTPPreconditioner.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\ILU0Preconditioner.cs" />
<Compile Include="LinearAlgebra\Solvers\DivergenceStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\FailureStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\DivergenceStopCriterion.cs" />
<Compile Include="LinearAlgebra\Solvers\FailureStopCriterion.cs" />
<Compile Include="LinearAlgebra\Single\SparseMatrix.cs" />
<Compile Include="LinearAlgebra\Single\SparseVector.cs" />
<Compile Include="LinearAlgebra\Factorization\Cholesky.cs" />
@ -358,7 +358,7 @@
<Compile Include="LinearAlgebra\Double\Solvers\ILUTPPreconditioner.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\ILU0Preconditioner.cs" />
<Compile Include="LinearAlgebra\Solvers\UnitPreconditioner.cs" />
<Compile Include="LinearAlgebra\Solvers\ResidualStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\ResidualStopCriterion.cs" />
<Compile Include="LinearAlgebra\Double\SparseVector.cs" />
<Compile Include="LinearAlgebra\Matrix.Arithmetic.cs" />
<Compile Include="LinearAlgebra\Matrix.cs" />

14
src/Numerics/Properties/Resources.Designer.cs

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34003
// Runtime Version:4.0.30319.34014
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -817,20 +817,20 @@ namespace MathNet.Numerics.Properties {
}
/// <summary>
/// Looks up a localized string similar to The given stop criterium already exist in the collection..
/// Looks up a localized string similar to The given stop criterion already exist in the collection..
/// </summary>
public static string StopCriteriumDuplicate {
public static string StopCriterionDuplicate {
get {
return ResourceManager.GetString("StopCriteriumDuplicate", resourceCulture);
return ResourceManager.GetString("StopCriterionDuplicate", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There is no stop criterium in the collection..
/// Looks up a localized string similar to There is no stop criterion in the collection..
/// </summary>
public static string StopCriteriumMissing {
public static string StopCriterionMissing {
get {
return ResourceManager.GetString("StopCriteriumMissing", resourceCulture);
return ResourceManager.GetString("StopCriterionMissing", resourceCulture);
}
}

8
src/Numerics/Properties/Resources.resx

@ -342,11 +342,11 @@
<data name="NotSupportedType" xml:space="preserve">
<value>{0} is not a supported type.</value>
</data>
<data name="StopCriteriumDuplicate" xml:space="preserve">
<value>The given stop criterium already exist in the collection.</value>
<data name="StopCriterionDuplicate" xml:space="preserve">
<value>The given stop criterion already exist in the collection.</value>
</data>
<data name="StopCriteriumMissing" xml:space="preserve">
<value>There is no stop criterium in the collection.</value>
<data name="StopCriterionMissing" xml:space="preserve">
<value>There is no stop criterion in the collection.</value>
</data>
<data name="NameCannotContainASpace" xml:space="preserve">
<value>Name cannot contain a space. name: {0}</value>

35
src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/BiCgStabTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -41,6 +41,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
@ -99,10 +100,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new BiCgStab();
@ -142,10 +143,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => Complex.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
var monitor = new Iterator<Complex>(new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new BiCgStab();
@ -218,10 +219,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => Complex.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
var monitor = new Iterator<Complex>(new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new BiCgStab();
@ -258,8 +259,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var vectorb = Vector<Complex>.Build.Random(order, 1);
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium<Complex>(1e-10));
new IterationCountStopCriterion<Complex>(1000),
new ResidualStopCriterion<Complex>(1e-10));
var solver = new BiCgStab();
@ -289,8 +290,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixB = Matrix<Complex>.Build.Random(order, order, 1);
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium<Complex>(1e-10));
new IterationCountStopCriterion<Complex>(1000),
new ResidualStopCriterion<Complex>(1e-10));
var solver = new BiCgStab();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);

35
src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/GpBiCgTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -41,6 +41,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
@ -99,10 +100,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new GpBiCg();
@ -143,10 +144,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new GpBiCg();
@ -220,10 +221,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new GpBiCg();
@ -260,8 +261,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var vectorb = Vector<Complex>.Build.Random(order, 1);
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium<Complex>(1e-10));
new IterationCountStopCriterion<Complex>(1000),
new ResidualStopCriterion<Complex>(1e-10));
var solver = new GpBiCg();
@ -291,8 +292,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixB = Matrix<Complex>.Build.Random(order, order, 1);
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium<Complex>(1e-10));
new IterationCountStopCriterion<Complex>(1000),
new ResidualStopCriterion<Complex>(1e-10));
var solver = new GpBiCg();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);

35
src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/MlkBiCgStabTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -41,6 +41,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
@ -99,10 +100,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new MlkBiCgStab();
@ -143,10 +144,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new MlkBiCgStab();
@ -220,10 +221,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new MlkBiCgStab();
@ -260,8 +261,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var vectorb = Vector<Complex>.Build.Random(order, 1);
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium<Complex>(1e-10));
new IterationCountStopCriterion<Complex>(1000),
new ResidualStopCriterion<Complex>(1e-10));
var solver = new MlkBiCgStab();
@ -291,8 +292,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixB = Matrix<Complex>.Build.Random(order, order, 1);
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium<Complex>(1e-10));
new IterationCountStopCriterion<Complex>(1000),
new ResidualStopCriterion<Complex>(1e-10));
var solver = new MlkBiCgStab();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);

35
src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/TFQMRTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -41,6 +41,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
@ -99,10 +100,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new TFQMR();
@ -140,10 +141,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new TFQMR();
@ -214,10 +215,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium<Complex>());
new IterationCountStopCriterion<Complex>(MaximumIterations),
new ResidualStopCriterion<Complex>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex>(),
new FailureStopCriterion<Complex>());
var solver = new TFQMR();
@ -251,8 +252,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var vectorb = Vector<Complex>.Build.Random(order, 1);
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium<Complex>(1e-10));
new IterationCountStopCriterion<Complex>(1000),
new ResidualStopCriterion<Complex>(1e-10));
var solver = new TFQMR();
@ -282,8 +283,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixB = Matrix<Complex>.Build.Random(order, order, 1);
var monitor = new Iterator<Complex>(
new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium<Complex>(1e-10));
new IterationCountStopCriterion<Complex>(1000),
new ResidualStopCriterion<Complex>(1e-10));
var solver = new TFQMR();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);

29
src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -40,6 +40,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
@ -68,12 +69,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void DetermineStatusWithNegativeIterationNumberThrowsArgumentOutOfRangeException()
{
var criteria = new List<IIterationStopCriterium<Complex>>
var criteria = new List<IIterationStopCriterion<Complex>>
{
new FailureStopCriterium<Complex>(),
new DivergenceStopCriterium<Complex>(),
new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium<Complex>(1e-12)
new FailureStopCriterion<Complex>(),
new DivergenceStopCriterion<Complex>(),
new IterationCountStopCriterion<Complex>(),
new ResidualStopCriterion<Complex>(1e-12)
};
var iterator = new Iterator<Complex>(criteria);
@ -90,11 +91,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void DetermineStatus()
{
var criteria = new List<IIterationStopCriterium<Complex>>
var criteria = new List<IIterationStopCriterion<Complex>>
{
new FailureStopCriterium<Complex>(),
new DivergenceStopCriterium<Complex>(),
new IterationCountStopCriterium<Complex>(1)
new FailureStopCriterion<Complex>(),
new DivergenceStopCriterion<Complex>(),
new IterationCountStopCriterion<Complex>(1)
};
var iterator = new Iterator<Complex>(criteria);
@ -122,11 +123,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void ResetToPrecalculationState()
{
var criteria = new List<IIterationStopCriterium<Complex>>
var criteria = new List<IIterationStopCriterion<Complex>>
{
new FailureStopCriterium<Complex>(),
new DivergenceStopCriterium<Complex>(),
new IterationCountStopCriterium<Complex>(1)
new FailureStopCriterion<Complex>(),
new DivergenceStopCriterion<Complex>(),
new IterationCountStopCriterion<Complex>(1)
};
var iterator = new Iterator<Complex>(criteria);

121
src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterium/DivergenceStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterion/DivergenceStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="DivergenceStopCriteriumTest.cs" company="Math.NET">
// <copyright file="DivergenceStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,19 +34,20 @@ using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterion
{
#if NOSYSNUMERICS
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// Divergence stop criterium test.
/// Divergence stop criterion test.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class DivergenceStopCriteriumTest
public sealed class DivergenceStopCriterionTest
{
/// <summary>
/// Create with negative maximum increase throws <c>ArgumentOutOfRangeException</c>.
@ -54,7 +55,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void CreateWithNegativeMaximumIncreaseThrowsArgumentOutOfRangeException()
{
Assert.That(() => new DivergenceStopCriterium<Complex>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new DivergenceStopCriterion<Complex>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -63,20 +64,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new DivergenceStopCriterium<Complex>(minimumIterations: 2), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new DivergenceStopCriterion<Complex>(minimumIterations: 2), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
/// Can create stop criterium.
/// Can create stop criterion.
/// </summary>
[Test]
public void Create()
{
var criterium = new DivergenceStopCriterium<Complex>(0.1, 3);
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new DivergenceStopCriterion<Complex>(0.1, 3);
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.AreEqual(0.1, criterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(3, criterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(0.1, criterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(3, criterion.MinimumNumberOfIterations, "Incorrect iteration count");
}
/// <summary>
@ -85,8 +86,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new DivergenceStopCriterium<Complex>(0.5, 15);
Assert.That(() => criterium.DetermineStatus(
var criterion = new DivergenceStopCriterion<Complex>(0.5, 15);
Assert.That(() => criterion.DetermineStatus(
-1,
Vector<Complex>.Build.Dense(3, 4),
Vector<Complex>.Build.Dense(3, 5),
@ -102,16 +103,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have to few iterations
for (var i = 0; i < Iterations - 1; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex((i + 1)*(Increase + 0.1), 0)}));
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex((i + 1)*(Increase + 0.1), 0) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
@ -126,16 +127,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex>(Increase, Iterations);
// Add residuals. We should not diverge because we won't have enough increase
for (var i = 0; i < Iterations*2; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex((i + 1)*(Increase - 0.01), 0)}));
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex((i + 1)*(Increase - 0.01), 0) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
@ -150,26 +151,26 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have to few iterations
for (var i = 0; i < Iterations - 5; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex((i + 1)*(Increase - 0.01), 0)}));
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex((i + 1)*(Increase - 0.01), 0) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
// Now make it fail by throwing in a NaN
var status2 = criterium.DetermineStatus(
var status2 = criterion.DetermineStatus(
Iterations,
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(double.NaN, 0)}));
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(double.NaN, 0) }));
Assert.AreEqual(IterationStatus.Diverged, status2, "Status check fail.");
}
@ -183,29 +184,29 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have one to few iterations
double previous = 1;
for (var i = 0; i < Iterations - 1; i++)
{
previous *= 1 + Increase + 0.01;
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(previous, 0)}));
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(previous, 0) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
// Add the final residual. Now we should have divergence
previous *= 1 + Increase + 0.01;
var status2 = criterium.DetermineStatus(
var status2 = criterion.DetermineStatus(
Iterations - 1,
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(previous, 0)}));
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(previous, 0) }));
Assert.AreEqual(IterationStatus.Diverged, status2, "Status check fail.");
}
@ -219,27 +220,27 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex>(Increase, Iterations);
// Add residuals. Blow it up instantly
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
1,
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(1.0, 0)}),
new DenseVector(new[] {new Complex(double.NaN, 0)}));
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(1.0, 0) }),
new DenseVector(new[] { new Complex(double.NaN, 0) }));
Assert.AreEqual(IterationStatus.Diverged, status, "Status check fail.");
// Reset the state
criterium.Reset();
criterion.Reset();
Assert.AreEqual(Increase, criterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(Iterations, criterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Status check fail.");
Assert.AreEqual(Increase, criterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(Iterations, criterion.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Status check fail.");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
@ -247,17 +248,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex>(Increase, Iterations);
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new DivergenceStopCriterion<Complex>(Increase, Iterations);
Assert.IsNotNull(criterion, "There should be a criterion");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(DivergenceStopCriterium<Complex>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (DivergenceStopCriterion<Complex>), clone, "Wrong criterion type");
var clonedCriterium = clone as DivergenceStopCriterium<Complex>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as DivergenceStopCriterion<Complex>;
Assert.IsNotNull(clonedCriterion);
Assert.AreEqual(criterium.MaximumRelativeIncrease, clonedCriterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(criterium.MinimumNumberOfIterations, clonedCriterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(criterion.MaximumRelativeIncrease, clonedCriterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(criterion.MinimumNumberOfIterations, clonedCriterion.MinimumNumberOfIterations, "Incorrect iteration count");
}
}
}

89
src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterium/FailureStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterion/FailureStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="FailureStopCriteriumTest.cs" company="Math.NET">
// <copyright file="FailureStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,19 +34,20 @@ using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterion
{
#if NOSYSNUMERICS
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// Failure stop criterium tests.
/// Failure stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class FailureStopCriteriumTest
public sealed class FailureStopCriterionTest
{
/// <summary>
/// Can create.
@ -54,8 +55,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void Create()
{
var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "Should have a criterium now");
var criterion = new FailureStopCriterion<Complex>();
Assert.IsNotNull(criterion, "Should have a criterion now");
}
/// <summary>
@ -64,10 +65,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex>();
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.That(() => criterium.DetermineStatus(-1, Vector<Complex>.Build.Dense(3, 4), Vector<Complex>.Build.Dense(3, 5), Vector<Complex>.Build.Dense(3, 6)), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => criterion.DetermineStatus(-1, Vector<Complex>.Build.Dense(3, 4), Vector<Complex>.Build.Dense(3, 5), Vector<Complex>.Build.Dense(3, 6)), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -76,10 +77,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException()
{
var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex>();
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.That(() => criterium.DetermineStatus(1, Vector<Complex>.Build.Dense(3, 4), Vector<Complex>.Build.Dense(3, 6), Vector<Complex>.Build.Dense(4, 4)), Throws.ArgumentException);
Assert.That(() => criterion.DetermineStatus(1, Vector<Complex>.Build.Dense(3, 4), Vector<Complex>.Build.Dense(3, 6), Vector<Complex>.Build.Dense(4, 4)), Throws.ArgumentException);
}
/// <summary>
@ -88,14 +89,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithResidualNaN()
{
var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(2.0, 0)});
var source = new DenseVector(new[] {new Complex(1001.0, 0), Complex.Zero, new Complex(2003.0, 0)});
var residual = new DenseVector(new[] {new Complex(1000, 0), new Complex(double.NaN, 0), new Complex(2001, 0)});
var solution = new DenseVector(new[] { new Complex(1.0, 0), new Complex(1.0, 0), new Complex(2.0, 0) });
var source = new DenseVector(new[] { new Complex(1001.0, 0), Complex.Zero, new Complex(2003.0, 0) });
var residual = new DenseVector(new[] { new Complex(1000, 0), new Complex(double.NaN, 0), new Complex(2001, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Failure, status, "Should be failed");
}
@ -105,14 +106,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithSolutionNaN()
{
var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(double.NaN, 0)});
var source = new DenseVector(new[] {new Complex(1001.0, 0), Complex.Zero, new Complex(2003.0, 0)});
var residual = new DenseVector(new[] {new Complex(1000, 0), new Complex(1000, 0), new Complex(2001, 0)});
var solution = new DenseVector(new[] { new Complex(1.0, 0), new Complex(1.0, 0), new Complex(double.NaN, 0) });
var source = new DenseVector(new[] { new Complex(1001.0, 0), Complex.Zero, new Complex(2003.0, 0) });
var residual = new DenseVector(new[] { new Complex(1000, 0), new Complex(1000, 0), new Complex(2001, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Failure, status, "Should be failed");
}
@ -122,14 +123,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatus()
{
var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {new Complex(3.0, 0), new Complex(2.0, 0), new Complex(1, 0)});
var source = new DenseVector(new[] {new Complex(1001.0, 0), Complex.Zero, new Complex(2003.0, 0)});
var residual = new DenseVector(new[] {new Complex(1.0, 0), new Complex(2.0, 0), new Complex(3, 0)});
var solution = new DenseVector(new[] { new Complex(3.0, 0), new Complex(2.0, 0), new Complex(1, 0) });
var source = new DenseVector(new[] { new Complex(1001.0, 0), Complex.Zero, new Complex(2003.0, 0) });
var residual = new DenseVector(new[] { new Complex(1.0, 0), new Complex(2.0, 0), new Complex(3, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
}
@ -139,30 +140,30 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void ResetCalculationState()
{
var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(2, 0)});
var source = new DenseVector(new[] {new Complex(1001.0, 0), Complex.Zero, new Complex(2003.0, 0)});
var residual = new DenseVector(new[] {new Complex(1000, 0), new Complex(1000, 0), new Complex(2001, 0)});
var solution = new DenseVector(new[] { new Complex(1.0, 0), new Complex(1.0, 0), new Complex(2, 0) });
var source = new DenseVector(new[] { new Complex(1001.0, 0), Complex.Zero, new Complex(2003.0, 0) });
var residual = new DenseVector(new[] { new Complex(1000, 0), new Complex(1000, 0), new Complex(2001, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(FailureStopCriterium<Complex>), clone, "Wrong criterium type");
var criterion = new FailureStopCriterion<Complex>();
Assert.IsNotNull(criterion, "There should be a criterion");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (FailureStopCriterion<Complex>), clone, "Wrong criterion type");
}
}
}

69
src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterion/IterationCountStopCriteriumTest.cs

@ -1,4 +1,4 @@
// <copyright file="IterationCountStopCriteriumTest.cs" company="Math.NET">
// <copyright file="IterationCountStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
@ -33,19 +33,20 @@ using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterion
{
#if NOSYSNUMERICS
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// Iteration count stop criterium tests.
/// Iteration count stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class IterationCountStopCriteriumTest
public sealed class IterationCountStopCriterionTest
{
/// <summary>
/// Create with illegal minimum iterations throws <c>ArgumentOutOfRangeException</c>.
@ -53,7 +54,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new IterationCountStopCriterium<Complex>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new IterationCountStopCriterion<Complex>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -62,8 +63,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void Create()
{
var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<Complex>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
}
/// <summary>
@ -72,13 +73,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void ResetMaximumIterations()
{
var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
var criterion = new IterationCountStopCriterion<Complex>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.AreEqual(10, criterion.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
criterium.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterium<Complex>.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value");
criterion.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterion.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterion<Complex>.DefaultMaximumNumberOfIterations, criterion.MaximumNumberOfIterations, "Reset to the wrong value");
}
/// <summary>
@ -87,10 +88,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<Complex>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.That(() => criterium.DetermineStatus(-1, Vector<Complex>.Build.Dense(3, 1), Vector<Complex>.Build.Dense(3, 2), Vector<Complex>.Build.Dense(3, 3)), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => criterion.DetermineStatus(-1, Vector<Complex>.Build.Dense(3, 1), Vector<Complex>.Build.Dense(3, 2), Vector<Complex>.Build.Dense(3, 3)), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -99,13 +100,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatus()
{
var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<Complex>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
var status = criterium.DetermineStatus(5, Vector<Complex>.Build.Dense(3, 1), Vector<Complex>.Build.Dense(3, 2), Vector<Complex>.Build.Dense(3, 3));
var status = criterion.DetermineStatus(5, Vector<Complex>.Build.Dense(3, 1), Vector<Complex>.Build.Dense(3, 2), Vector<Complex>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
var status2 = criterium.DetermineStatus(10, Vector<Complex>.Build.Dense(3, 1), Vector<Complex>.Build.Dense(3, 2), Vector<Complex>.Build.Dense(3, 3));
var status2 = criterion.DetermineStatus(10, Vector<Complex>.Build.Dense(3, 1), Vector<Complex>.Build.Dense(3, 2), Vector<Complex>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.StoppedWithoutConvergence, status2, "Should be finished");
}
@ -115,34 +116,34 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void ResetCalculationState()
{
var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<Complex>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
var status = criterium.DetermineStatus(5, Vector<Complex>.Build.Dense(3, 1), Vector<Complex>.Build.Dense(3, 2), Vector<Complex>.Build.Dense(3, 3));
var status = criterion.DetermineStatus(5, Vector<Complex>.Build.Dense(3, 1), Vector<Complex>.Build.Dense(3, 2), Vector<Complex>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone a stop criterium.
/// Can clone a stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum");
var criterion = new IterationCountStopCriterion<Complex>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.AreEqual(10, criterion.MaximumNumberOfIterations, "Incorrect maximum");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(IterationCountStopCriterium<Complex>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (IterationCountStopCriterion<Complex>), clone, "Wrong criterion type");
var clonedCriterium = clone as IterationCountStopCriterium<Complex>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as IterationCountStopCriterion<Complex>;
Assert.IsNotNull(clonedCriterion);
// ReSharper disable PossibleNullReferenceException
Assert.AreEqual(criterium.MaximumNumberOfIterations, clonedCriterium.MaximumNumberOfIterations, "Clone failed");
Assert.AreEqual(criterion.MaximumNumberOfIterations, clonedCriterion.MaximumNumberOfIterations, "Clone failed");
// ReSharper restore PossibleNullReferenceException
}

111
src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterium/ResidualStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterion/ResidualStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="ResidualStopCriteriumTest.cs" company="Math.NET">
// <copyright file="ResidualStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,19 +34,20 @@ using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterion
{
#if NOSYSNUMERICS
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// Residual stop criterium tests.
/// Residual stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class ResidualStopCriteriumTest
public sealed class ResidualStopCriterionTest
{
/// <summary>
/// Create with negative maximum throws <c>ArgumentOutOfRangeException</c>.
@ -54,7 +55,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void CreateWithNegativeMaximumThrowsArgumentOutOfRangeException()
{
Assert.That(() => new ResidualStopCriterium<Complex>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new ResidualStopCriterion<Complex>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -63,7 +64,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new ResidualStopCriterium<Complex>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new ResidualStopCriterion<Complex>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -72,10 +73,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void Create()
{
var criterium = new ResidualStopCriterium<Complex>(1e-8, 50);
var criterion = new ResidualStopCriterion<Complex>(1e-8, 50);
Assert.AreEqual(1e-8, criterium.Maximum, "Incorrect maximum");
Assert.AreEqual(50, criterium.MinimumIterationsBelowMaximum, "Incorrect iteration count");
Assert.AreEqual(1e-8, criterion.Maximum, "Incorrect maximum");
Assert.AreEqual(50, criterion.MinimumIterationsBelowMaximum, "Incorrect iteration count");
}
/// <summary>
@ -84,9 +85,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new ResidualStopCriterium<Complex>(1e-8, 50);
var criterion = new ResidualStopCriterion<Complex>(1e-8, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
-1,
Vector<Complex>.Build.Dense(3, 4),
Vector<Complex>.Build.Dense(3, 5),
@ -99,9 +100,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithNonMatchingSolutionVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<Complex>(1e-8, 50);
var criterion = new ResidualStopCriterion<Complex>(1e-8, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<Complex>.Build.Dense(4, 4),
Vector<Complex>.Build.Dense(3, 4),
@ -114,9 +115,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithNonMatchingSourceVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<Complex>(1e-8, 50);
var criterion = new ResidualStopCriterion<Complex>(1e-8, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<Complex>.Build.Dense(3, 4),
Vector<Complex>.Build.Dense(4, 4),
@ -129,9 +130,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithNonMatchingResidualVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<Complex>(1e-8, 50);
var criterion = new ResidualStopCriterion<Complex>(1e-8, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<Complex>.Build.Dense(3, 4),
Vector<Complex>.Build.Dense(3, 4),
@ -144,13 +145,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithSourceNaN()
{
var criterium = new ResidualStopCriterium<Complex>(1e-3, 10);
var criterion = new ResidualStopCriterion<Complex>(1e-3, 10);
var solution = new DenseVector(new[] {new Complex(1.0, 1), new Complex(1.0, 1), new Complex(2.0, 1)});
var source = new DenseVector(new[] {new Complex(1.0, 1), new Complex(1.0, 1), new Complex(double.NaN, 1)});
var residual = new DenseVector(new[] {new Complex(1000.0, 1), new Complex(1000.0, 1), new Complex(2001.0, 1)});
var solution = new DenseVector(new[] { new Complex(1.0, 1), new Complex(1.0, 1), new Complex(2.0, 1) });
var source = new DenseVector(new[] { new Complex(1.0, 1), new Complex(1.0, 1), new Complex(double.NaN, 1) });
var residual = new DenseVector(new[] { new Complex(1000.0, 1), new Complex(1000.0, 1), new Complex(2001.0, 1) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Diverged, status, "Should be diverged");
}
@ -160,13 +161,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatusWithResidualNaN()
{
var criterium = new ResidualStopCriterium<Complex>(1e-3, 10);
var criterion = new ResidualStopCriterion<Complex>(1e-3, 10);
var solution = new DenseVector(new[] {new Complex(1.0, 1), new Complex(1.0, 1), new Complex(2.0, 1)});
var source = new DenseVector(new[] {new Complex(1.0, 1), new Complex(1.0, 1), new Complex(2.0, 1)});
var residual = new DenseVector(new[] {new Complex(1000.0, 1), new Complex(double.NaN, 1), new Complex(2001.0, 1)});
var solution = new DenseVector(new[] { new Complex(1.0, 1), new Complex(1.0, 1), new Complex(2.0, 1) });
var source = new DenseVector(new[] { new Complex(1.0, 1), new Complex(1.0, 1), new Complex(2.0, 1) });
var residual = new DenseVector(new[] { new Complex(1000.0, 1), new Complex(double.NaN, 1), new Complex(2001.0, 1) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Diverged, status, "Should be diverged");
}
@ -175,18 +176,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
/// </summary>
/// <remarks>Bugfix: The unit tests for the BiCgStab solver run with a super simple matrix equation
/// which converges at the first iteration. The default settings for the
/// residual stop criterium should be able to handle this.
/// residual stop criterion should be able to handle this.
/// </remarks>
[Test]
public void DetermineStatusWithConvergenceAtFirstIteration()
{
var criterium = new ResidualStopCriterium<Complex>(1e-12);
var criterion = new ResidualStopCriterion<Complex>(1e-12);
var solution = new DenseVector(new[] {Complex.One, Complex.One, Complex.One});
var source = new DenseVector(new[] {Complex.One, Complex.One, Complex.One});
var residual = new DenseVector(new[] {Complex.Zero, Complex.Zero, Complex.Zero});
var solution = new DenseVector(new[] { Complex.One, Complex.One, Complex.One });
var source = new DenseVector(new[] { Complex.One, Complex.One, Complex.One });
var residual = new DenseVector(new[] { Complex.Zero, Complex.Zero, Complex.Zero });
var status = criterium.DetermineStatus(0, solution, source, residual);
var status = criterion.DetermineStatus(0, solution, source, residual);
Assert.AreEqual(IterationStatus.Converged, status, "Should be done");
}
@ -196,21 +197,21 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void DetermineStatus()
{
var criterium = new ResidualStopCriterium<Complex>(1e-3, 10);
var criterion = new ResidualStopCriterion<Complex>(1e-3, 10);
// the solution vector isn't actually being used so ...
var solution = new DenseVector(new[] {new Complex(double.NaN, double.NaN), new Complex(double.NaN, double.NaN), new Complex(double.NaN, double.NaN)});
var solution = new DenseVector(new[] { new Complex(double.NaN, double.NaN), new Complex(double.NaN, double.NaN), new Complex(double.NaN, double.NaN) });
// Set the source values
var source = new DenseVector(new[] {new Complex(1.000, 1), new Complex(1.000, 1), new Complex(2.001, 1)});
var source = new DenseVector(new[] { new Complex(1.000, 1), new Complex(1.000, 1), new Complex(2.001, 1) });
// Set the residual values
var residual = new DenseVector(new[] {new Complex(0.001, 0), new Complex(0.001, 0), new Complex(0.002, 0)});
var residual = new DenseVector(new[] { new Complex(0.001, 0), new Complex(0.001, 0), new Complex(0.002, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should still be running");
var status2 = criterium.DetermineStatus(16, solution, source, residual);
var status2 = criterion.DetermineStatus(16, solution, source, residual);
Assert.AreEqual(IterationStatus.Converged, status2, "Should be done");
}
@ -220,36 +221,36 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test]
public void ResetCalculationState()
{
var criterium = new ResidualStopCriterium<Complex>(1e-3, 10);
var criterion = new ResidualStopCriterion<Complex>(1e-3, 10);
var solution = new DenseVector(new[] {new Complex(0.001, 1), new Complex(0.001, 1), new Complex(0.002, 1)});
var source = new DenseVector(new[] {new Complex(0.001, 1), new Complex(0.001, 1), new Complex(0.002, 1)});
var residual = new DenseVector(new[] {new Complex(1.000, 0), new Complex(1.000, 0), new Complex(2.001, 0)});
var solution = new DenseVector(new[] { new Complex(0.001, 1), new Complex(0.001, 1), new Complex(0.002, 1) });
var source = new DenseVector(new[] { new Complex(0.001, 1), new Complex(0.001, 1), new Complex(0.002, 1) });
var residual = new DenseVector(new[] { new Complex(1.000, 0), new Complex(1.000, 0), new Complex(2.001, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new ResidualStopCriterium<Complex>(1e-3, 10);
var criterion = new ResidualStopCriterion<Complex>(1e-3, 10);
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(ResidualStopCriterium<Complex>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (ResidualStopCriterion<Complex>), clone, "Wrong criterion type");
var clonedCriterium = clone as ResidualStopCriterium<Complex>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as ResidualStopCriterion<Complex>;
Assert.IsNotNull(clonedCriterion);
// ReSharper disable PossibleNullReferenceException
Assert.AreEqual(criterium.Maximum, clonedCriterium.Maximum, "Clone failed");
Assert.AreEqual(criterium.MinimumIterationsBelowMaximum, clonedCriterium.MinimumIterationsBelowMaximum, "Clone failed");
Assert.AreEqual(criterion.Maximum, clonedCriterion.Maximum, "Clone failed");
Assert.AreEqual(criterion.MinimumIterationsBelowMaximum, clonedCriterion.MinimumIterationsBelowMaximum, "Clone failed");
// ReSharper restore PossibleNullReferenceException
}

44
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/BiCgStabTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -95,10 +95,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new BiCgStab();
@ -132,17 +132,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrix = SparseMatrix.CreateIdentity(100);
// Scale it with a funny number
matrix.Multiply(new Complex32((float) Math.PI, (float) Math.PI), matrix);
matrix.Multiply(new Complex32((float)Math.PI, (float)Math.PI), matrix);
// Create the y vector
var y = DenseVector.Create(matrix.RowCount, i => Complex32.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new BiCgStab();
@ -216,10 +216,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new BiCgStab();
@ -256,8 +256,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var vectorb = Vector<Complex32>.Build.Random(order, 1);
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium<Complex32>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<Complex32>(1000),
new ResidualStopCriterion<Complex32>(Math.Pow(1.0/10.0, iteration)));
var solver = new BiCgStab();
@ -275,8 +275,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Check the reconstruction.
for (var i = 0; i < order; i++)
{
Assert.AreEqual(vectorb[i].Real, matrixBReconstruct[i].Real, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Imaginary, matrixBReconstruct[i].Imaginary, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Real, matrixBReconstruct[i].Real, (float)Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Imaginary, matrixBReconstruct[i].Imaginary, (float)Math.Pow(1.0/10.0, iteration - 3));
}
return;
@ -298,8 +298,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixB = Matrix<Complex32>.Build.Random(order, order, 1);
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium<Complex32>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<Complex32>(1000),
new ResidualStopCriterion<Complex32>(Math.Pow(1.0/10.0, iteration)));
var solver = new BiCgStab();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);
@ -323,8 +323,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
{
for (var j = 0; j < matrixB.ColumnCount; j++)
{
Assert.AreEqual(matrixB[i, j].Real, matrixBReconstruct[i, j].Real, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Imaginary, matrixBReconstruct[i, j].Imaginary, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Real, matrixBReconstruct[i, j].Real, (float)Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Imaginary, matrixBReconstruct[i, j].Imaginary, (float)Math.Pow(1.0/10.0, iteration - 3));
}
}

36
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/GpBiCgTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -95,10 +95,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new GpBiCg();
@ -132,17 +132,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrix = SparseMatrix.CreateIdentity(100);
// Scale it with a funny number
matrix.Multiply((float) Math.PI, matrix);
matrix.Multiply((float)Math.PI, matrix);
// Create the y vector
var y = Vector<Complex32>.Build.Dense(matrix.RowCount, 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new GpBiCg();
@ -216,10 +216,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new GpBiCg();
@ -256,8 +256,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var vectorb = Vector<Complex32>.Build.Random(order, 1);
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium<Complex32>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<Complex32>(1000),
new ResidualStopCriterion<Complex32>(Math.Pow(1.0/10.0, iteration)));
var solver = new GpBiCg();
@ -275,8 +275,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Check the reconstruction.
for (var i = 0; i < order; i++)
{
Assert.AreEqual(vectorb[i].Real, matrixBReconstruct[i].Real, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Imaginary, matrixBReconstruct[i].Imaginary, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Real, matrixBReconstruct[i].Real, (float)Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Imaginary, matrixBReconstruct[i].Imaginary, (float)Math.Pow(1.0/10.0, iteration - 3));
}
return;

44
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/MlkBiCgStabTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -95,10 +95,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new MlkBiCgStab();
@ -132,17 +132,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrix = SparseMatrix.CreateIdentity(100);
// Scale it with a funny number
matrix.Multiply((float) Math.PI, matrix);
matrix.Multiply((float)Math.PI, matrix);
// Create the y vector
var y = Vector<Complex32>.Build.Dense(matrix.RowCount, 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new MlkBiCgStab();
@ -216,10 +216,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new MlkBiCgStab();
@ -256,8 +256,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var vectorb = Vector<Complex32>.Build.Random(order, 1);
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium<Complex32>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<Complex32>(1000),
new ResidualStopCriterion<Complex32>(Math.Pow(1.0/10.0, iteration)));
var solver = new MlkBiCgStab();
@ -275,8 +275,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Check the reconstruction.
for (var i = 0; i < order; i++)
{
Assert.AreEqual(vectorb[i].Real, matrixBReconstruct[i].Real, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Imaginary, matrixBReconstruct[i].Imaginary, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Real, matrixBReconstruct[i].Real, (float)Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Imaginary, matrixBReconstruct[i].Imaginary, (float)Math.Pow(1.0/10.0, iteration - 3));
}
return;
@ -298,8 +298,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixB = Matrix<Complex32>.Build.Random(order, order, 1);
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium<Complex32>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<Complex32>(1000),
new ResidualStopCriterion<Complex32>(Math.Pow(1.0/10.0, iteration)));
var solver = new MlkBiCgStab();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);
@ -323,8 +323,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
{
for (var j = 0; j < matrixB.ColumnCount; j++)
{
Assert.AreEqual(matrixB[i, j].Real, matrixBReconstruct[i, j].Real, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Imaginary, matrixBReconstruct[i, j].Imaginary, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Real, matrixBReconstruct[i, j].Real, (float)Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Imaginary, matrixBReconstruct[i, j].Imaginary, (float)Math.Pow(1.0/10.0, iteration - 3));
}
}

44
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/TFQMRTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -95,10 +95,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new TFQMR();
@ -129,17 +129,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrix = SparseMatrix.CreateIdentity(100);
// Scale it with a funny number
matrix.Multiply((float) Math.PI, matrix);
matrix.Multiply((float)Math.PI, matrix);
// Create the y vector
var y = Vector<Complex32>.Build.Dense(matrix.RowCount, 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new TFQMR();
@ -210,10 +210,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium<Complex32>());
new IterationCountStopCriterion<Complex32>(MaximumIterations),
new ResidualStopCriterion<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterion<Complex32>(),
new FailureStopCriterion<Complex32>());
var solver = new TFQMR();
@ -247,8 +247,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var vectorb = Vector<Complex32>.Build.Random(order, 1);
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium<Complex32>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<Complex32>(1000),
new ResidualStopCriterion<Complex32>(Math.Pow(1.0/10.0, iteration)));
var solver = new TFQMR();
@ -266,8 +266,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Check the reconstruction.
for (var i = 0; i < order; i++)
{
Assert.AreEqual(vectorb[i].Real, matrixBReconstruct[i].Real, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Imaginary, matrixBReconstruct[i].Imaginary, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Real, matrixBReconstruct[i].Real, (float)Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i].Imaginary, matrixBReconstruct[i].Imaginary, (float)Math.Pow(1.0/10.0, iteration - 3));
}
return;
@ -289,8 +289,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixB = Matrix<Complex32>.Build.Random(order, order, 1);
var monitor = new Iterator<Complex32>(
new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium<Complex32>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<Complex32>(1000),
new ResidualStopCriterion<Complex32>(Math.Pow(1.0/10.0, iteration)));
var solver = new TFQMR();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);
@ -314,8 +314,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
{
for (var j = 0; j < matrixB.ColumnCount; j++)
{
Assert.AreEqual(matrixB[i, j].Real, matrixBReconstruct[i, j].Real, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Imaginary, matrixBReconstruct[i, j].Imaginary, (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Real, matrixBReconstruct[i, j].Real, (float)Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j].Imaginary, matrixBReconstruct[i, j].Imaginary, (float)Math.Pow(1.0/10.0, iteration - 3));
}
}

28
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -64,12 +64,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void DetermineStatusWithNegativeIterationNumberThrowsArgumentOutOfRangeException()
{
var criteria = new List<IIterationStopCriterium<Complex32>>
var criteria = new List<IIterationStopCriterion<Complex32>>
{
new FailureStopCriterium<Complex32>(),
new DivergenceStopCriterium<Complex32>(),
new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium<Complex32>(1e-6)
new FailureStopCriterion<Complex32>(),
new DivergenceStopCriterion<Complex32>(),
new IterationCountStopCriterion<Complex32>(),
new ResidualStopCriterion<Complex32>(1e-6)
};
var iterator = new Iterator<Complex32>(criteria);
@ -86,11 +86,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void DetermineStatus()
{
var criteria = new List<IIterationStopCriterium<Complex32>>
var criteria = new List<IIterationStopCriterion<Complex32>>
{
new FailureStopCriterium<Complex32>(),
new DivergenceStopCriterium<Complex32>(),
new IterationCountStopCriterium<Complex32>(1)
new FailureStopCriterion<Complex32>(),
new DivergenceStopCriterion<Complex32>(),
new IterationCountStopCriterion<Complex32>(1)
};
var iterator = new Iterator<Complex32>(criteria);
@ -118,11 +118,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void ResetToPrecalculationState()
{
var criteria = new List<IIterationStopCriterium<Complex32>>
var criteria = new List<IIterationStopCriterion<Complex32>>
{
new FailureStopCriterium<Complex32>(),
new DivergenceStopCriterium<Complex32>(),
new IterationCountStopCriterium<Complex32>(1)
new FailureStopCriterion<Complex32>(),
new DivergenceStopCriterion<Complex32>(),
new IterationCountStopCriterion<Complex32>(1)
};
var iterator = new Iterator<Complex32>(criteria);

120
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterium/DivergenceStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterion/DivergenceStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="DivergenceStopCriteriumTest.cs" company="Math.NET">
// <copyright file="DivergenceStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,15 +34,15 @@ using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterion
{
using Numerics;
/// <summary>
/// Divergence stop criterium test.
/// Divergence stop criterion test.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class DivergenceStopCriteriumTest
public sealed class DivergenceStopCriterionTest
{
/// <summary>
/// Create with negative maximum increase throws <c>ArgumentOutOfRangeException</c>.
@ -50,7 +50,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void CreateWithNegativeMaximumIncreaseThrowsArgumentOutOfRangeException()
{
Assert.That(() => new DivergenceStopCriterium<Complex32>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new DivergenceStopCriterion<Complex32>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -59,20 +59,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new DivergenceStopCriterium<Complex32>(minimumIterations: 2), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new DivergenceStopCriterion<Complex32>(minimumIterations: 2), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
/// Can create stop criterium.
/// Can create stop criterion.
/// </summary>
[Test]
public void Create()
{
var criterium = new DivergenceStopCriterium<Complex32>(0.1, 3);
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new DivergenceStopCriterion<Complex32>(0.1, 3);
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.AreEqual(0.1, criterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(3, criterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(0.1, criterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(3, criterion.MinimumNumberOfIterations, "Incorrect iteration count");
}
/// <summary>
@ -81,8 +81,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new DivergenceStopCriterium<Complex32>(0.5, 15);
Assert.That(() => criterium.DetermineStatus(
var criterion = new DivergenceStopCriterion<Complex32>(0.5, 15);
Assert.That(() => criterion.DetermineStatus(
-1,
Vector<Complex32>.Build.Dense(3, 4),
Vector<Complex32>.Build.Dense(3, 5),
@ -98,16 +98,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex32>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex32>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have to few iterations
for (var i = 0; i < Iterations - 1; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32((i + 1)*(Increase + 0.1f), 0)}));
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32((i + 1)*(Increase + 0.1f), 0) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
}
@ -121,16 +121,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex32>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex32>(Increase, Iterations);
// Add residuals. We should not diverge because we won't have enough increase
for (var i = 0; i < Iterations*2; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32((i + 1)*(Increase - 0.01f), 0)}));
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32((i + 1)*(Increase - 0.01f), 0) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
@ -145,26 +145,26 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex32>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex32>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have to few iterations
for (var i = 0; i < Iterations - 5; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32((i + 1)*(Increase - 0.01f), 0)}));
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32((i + 1)*(Increase - 0.01f), 0) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
// Now make it fail by throwing in a NaN
var status2 = criterium.DetermineStatus(
var status2 = criterion.DetermineStatus(
Iterations,
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(float.NaN, 0)}));
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(float.NaN, 0) }));
Assert.AreEqual(IterationStatus.Diverged, status2, "Status check fail.");
}
@ -178,29 +178,29 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex32>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex32>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have one to few iterations
float previous = 1;
for (var i = 0; i < Iterations - 1; i++)
{
previous *= 1 + Increase + 0.01f;
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(previous, 0)}));
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(previous, 0) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
// Add the final residual. Now we should have divergence
previous *= 1 + Increase + 0.01f;
var status2 = criterium.DetermineStatus(
var status2 = criterion.DetermineStatus(
Iterations - 1,
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(previous, 0)}));
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(previous, 0) }));
Assert.AreEqual(IterationStatus.Diverged, status2, "Status check fail.");
}
@ -214,27 +214,27 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex32>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<Complex32>(Increase, Iterations);
// Add residuals. Blow it up instantly
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
1,
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(1.0f, 0)}),
new DenseVector(new[] {new Complex32(float.NaN, 0)}));
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(1.0f, 0) }),
new DenseVector(new[] { new Complex32(float.NaN, 0) }));
Assert.AreEqual(IterationStatus.Diverged, status, "Status check fail.");
// Reset the state
criterium.Reset();
criterion.Reset();
Assert.AreEqual(Increase, criterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(Iterations, criterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Status check fail.");
Assert.AreEqual(Increase, criterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(Iterations, criterion.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Status check fail.");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
@ -242,17 +242,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<Complex32>(Increase, Iterations);
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new DivergenceStopCriterion<Complex32>(Increase, Iterations);
Assert.IsNotNull(criterion, "There should be a criterion");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(DivergenceStopCriterium<Complex32>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (DivergenceStopCriterion<Complex32>), clone, "Wrong criterion type");
var clonedCriterium = clone as DivergenceStopCriterium<Complex32>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as DivergenceStopCriterion<Complex32>;
Assert.IsNotNull(clonedCriterion);
Assert.AreEqual(criterium.MaximumRelativeIncrease, clonedCriterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(criterium.MinimumNumberOfIterations, clonedCriterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(criterion.MaximumRelativeIncrease, clonedCriterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(criterion.MinimumNumberOfIterations, clonedCriterion.MinimumNumberOfIterations, "Incorrect iteration count");
}
}
}

88
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterium/FailureStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterion/FailureStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="FailureStopCriteriumTest.cs" company="Math.NET">
// <copyright file="FailureStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,15 +34,15 @@ using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterion
{
using Numerics;
/// <summary>
/// Failure stop criterium tests.
/// Failure stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class FailureStopCriteriumTest
public sealed class FailureStopCriterionTest
{
/// <summary>
/// Can create.
@ -50,8 +50,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void Create()
{
var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "Should have a criterium now");
var criterion = new FailureStopCriterion<Complex32>();
Assert.IsNotNull(criterion, "Should have a criterion now");
}
/// <summary>
@ -60,10 +60,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex32>();
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.That(() => criterium.DetermineStatus(-1, Vector<Complex32>.Build.Dense(3, 4), Vector<Complex32>.Build.Dense(3, 5), Vector<Complex32>.Build.Dense(3, 6)), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => criterion.DetermineStatus(-1, Vector<Complex32>.Build.Dense(3, 4), Vector<Complex32>.Build.Dense(3, 5), Vector<Complex32>.Build.Dense(3, 6)), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -72,10 +72,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException()
{
var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex32>();
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.That(() => criterium.DetermineStatus(1, Vector<Complex32>.Build.Dense(3, 4), Vector<Complex32>.Build.Dense(3, 6), Vector<Complex32>.Build.Dense(4, 4)), Throws.ArgumentException);
Assert.That(() => criterion.DetermineStatus(1, Vector<Complex32>.Build.Dense(3, 4), Vector<Complex32>.Build.Dense(3, 6), Vector<Complex32>.Build.Dense(4, 4)), Throws.ArgumentException);
}
/// <summary>
@ -84,14 +84,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithResidualNaN()
{
var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex32>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(2.0f, 0)});
var source = new DenseVector(new[] {new Complex32(1001.0f, 0), Complex32.Zero, new Complex32(2003.0f, 0)});
var residual = new DenseVector(new[] {new Complex32(1000, 0), new Complex32(float.NaN, 0), new Complex32(2001, 0)});
var solution = new DenseVector(new[] { new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(2.0f, 0) });
var source = new DenseVector(new[] { new Complex32(1001.0f, 0), Complex32.Zero, new Complex32(2003.0f, 0) });
var residual = new DenseVector(new[] { new Complex32(1000, 0), new Complex32(float.NaN, 0), new Complex32(2001, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Failure, status, "Should be failed");
}
@ -101,14 +101,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithSolutionNaN()
{
var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex32>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(float.NaN, 0)});
var source = new DenseVector(new[] {new Complex32(1001.0f, 0), Complex32.Zero, new Complex32(2003.0f, 0)});
var residual = new DenseVector(new[] {new Complex32(1000, 0), new Complex32(1000, 0), new Complex32(2001, 0)});
var solution = new DenseVector(new[] { new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(float.NaN, 0) });
var source = new DenseVector(new[] { new Complex32(1001.0f, 0), Complex32.Zero, new Complex32(2003.0f, 0) });
var residual = new DenseVector(new[] { new Complex32(1000, 0), new Complex32(1000, 0), new Complex32(2001, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Failure, status, "Should be failed");
}
@ -118,14 +118,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatus()
{
var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex32>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {new Complex32(3.0f, 0), new Complex32(2.0f, 0), new Complex32(1, 0)});
var source = new DenseVector(new[] {new Complex32(1001.0f, 0), Complex32.Zero, new Complex32(2003.0f, 0)});
var residual = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(2.0f, 0), new Complex32(3, 0)});
var solution = new DenseVector(new[] { new Complex32(3.0f, 0), new Complex32(2.0f, 0), new Complex32(1, 0) });
var source = new DenseVector(new[] { new Complex32(1001.0f, 0), Complex32.Zero, new Complex32(2003.0f, 0) });
var residual = new DenseVector(new[] { new Complex32(1.0f, 0), new Complex32(2.0f, 0), new Complex32(3, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
}
@ -135,31 +135,31 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void ResetCalculationState()
{
var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex32>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(2, 0)});
var source = new DenseVector(new[] {new Complex32(1001.0f, 0), Complex32.Zero, new Complex32(2003.0f, 0)});
var residual = new DenseVector(new[] {new Complex32(1000, 0), new Complex32(1000, 0), new Complex32(2001, 0)});
var solution = new DenseVector(new[] { new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(2, 0) });
var source = new DenseVector(new[] { new Complex32(1001.0f, 0), Complex32.Zero, new Complex32(2003.0f, 0) });
var residual = new DenseVector(new[] { new Complex32(1000, 0), new Complex32(1000, 0), new Complex32(2001, 0) });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<Complex32>();
Assert.IsNotNull(criterion, "There should be a criterion");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(FailureStopCriterium<Complex32>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (FailureStopCriterion<Complex32>), clone, "Wrong criterion type");
}
}
}

68
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterion/IterationCountStopCriteriumTest.cs

@ -1,4 +1,4 @@
// <copyright file="IterationCountStopCriteriumTest.cs" company="Math.NET">
// <copyright file="IterationCountStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
@ -33,15 +33,15 @@ using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterion
{
using Numerics;
/// <summary>
/// Iteration count stop criterium tests.
/// Iteration count stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class IterationCountStopCriteriumTest
public sealed class IterationCountStopCriterionTest
{
/// <summary>
/// Create with illegal minimum iterations throws <c>ArgumentOutOfRangeException</c>.
@ -49,7 +49,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new IterationCountStopCriterium<Complex32>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new IterationCountStopCriterion<Complex32>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -58,8 +58,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void Create()
{
var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<Complex32>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
}
/// <summary>
@ -68,13 +68,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void ResetMaximumIterations()
{
var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
var criterion = new IterationCountStopCriterion<Complex32>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.AreEqual(10, criterion.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
criterium.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterium<Complex32>.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value");
criterion.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterion.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterion<Complex32>.DefaultMaximumNumberOfIterations, criterion.MaximumNumberOfIterations, "Reset to the wrong value");
}
/// <summary>
@ -83,10 +83,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<Complex32>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.That(() => criterium.DetermineStatus(-1, Vector<Complex32>.Build.Dense(3, 1), Vector<Complex32>.Build.Dense(3, 2), Vector<Complex32>.Build.Dense(3, 3)), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => criterion.DetermineStatus(-1, Vector<Complex32>.Build.Dense(3, 1), Vector<Complex32>.Build.Dense(3, 2), Vector<Complex32>.Build.Dense(3, 3)), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -95,13 +95,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatus()
{
var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<Complex32>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
var status = criterium.DetermineStatus(5, Vector<Complex32>.Build.Dense(3, 1), Vector<Complex32>.Build.Dense(3, 2), Vector<Complex32>.Build.Dense(3, 3));
var status = criterion.DetermineStatus(5, Vector<Complex32>.Build.Dense(3, 1), Vector<Complex32>.Build.Dense(3, 2), Vector<Complex32>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
var status2 = criterium.DetermineStatus(10, Vector<Complex32>.Build.Dense(3, 1), Vector<Complex32>.Build.Dense(3, 2), Vector<Complex32>.Build.Dense(3, 3));
var status2 = criterion.DetermineStatus(10, Vector<Complex32>.Build.Dense(3, 1), Vector<Complex32>.Build.Dense(3, 2), Vector<Complex32>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.StoppedWithoutConvergence, status2, "Should be finished");
}
@ -111,34 +111,34 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void ResetCalculationState()
{
var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<Complex32>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
var status = criterium.DetermineStatus(5, Vector<Complex32>.Build.Dense(3, 1), Vector<Complex32>.Build.Dense(3, 2), Vector<Complex32>.Build.Dense(3, 3));
var status = criterion.DetermineStatus(5, Vector<Complex32>.Build.Dense(3, 1), Vector<Complex32>.Build.Dense(3, 2), Vector<Complex32>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone a stop criterium.
/// Can clone a stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum");
var criterion = new IterationCountStopCriterion<Complex32>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.AreEqual(10, criterion.MaximumNumberOfIterations, "Incorrect maximum");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(IterationCountStopCriterium<Complex32>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (IterationCountStopCriterion<Complex32>), clone, "Wrong criterion type");
var clonedCriterium = clone as IterationCountStopCriterium<Complex32>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as IterationCountStopCriterion<Complex32>;
Assert.IsNotNull(clonedCriterion);
// ReSharper disable PossibleNullReferenceException
Assert.AreEqual(criterium.MaximumNumberOfIterations, clonedCriterium.MaximumNumberOfIterations, "Clone failed");
Assert.AreEqual(criterion.MaximumNumberOfIterations, clonedCriterion.MaximumNumberOfIterations, "Clone failed");
// ReSharper restore PossibleNullReferenceException
}

78
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterium/ResidualStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterion/ResidualStopCriteriumTest.cs

@ -1,4 +1,4 @@
// <copyright file="ResidualStopCriteriumTest.cs" company="Math.NET">
// <copyright file="ResidualStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
@ -34,15 +34,15 @@ using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterion
{
using Numerics;
/// <summary>
/// Residual stop criterium tests.
/// Residual stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class ResidualStopCriteriumTest
public sealed class ResidualStopCriterionTest
{
/// <summary>
/// Create with negative maximum throws <c>ArgumentOutOfRangeException</c>.
@ -50,7 +50,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void CreateWithNegativeMaximumThrowsArgumentOutOfRangeException()
{
Assert.That(() => new ResidualStopCriterium<Complex32>(-0.1f), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new ResidualStopCriterion<Complex32>(-0.1f), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -59,7 +59,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new ResidualStopCriterium<Complex32>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new ResidualStopCriterion<Complex32>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -68,10 +68,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void Create()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-6f, 50);
var criterion = new ResidualStopCriterion<Complex32>(1e-6f, 50);
Assert.AreEqual(1e-6f, criterium.Maximum, "Incorrect maximum");
Assert.AreEqual(50, criterium.MinimumIterationsBelowMaximum, "Incorrect iteration count");
Assert.AreEqual(1e-6f, criterion.Maximum, "Incorrect maximum");
Assert.AreEqual(50, criterion.MinimumIterationsBelowMaximum, "Incorrect iteration count");
}
/// <summary>
@ -80,9 +80,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-6f, 50);
var criterion = new ResidualStopCriterion<Complex32>(1e-6f, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
-1,
Vector<Complex32>.Build.Dense(3, 4),
Vector<Complex32>.Build.Dense(3, 5),
@ -95,9 +95,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithNonMatchingSolutionVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-6f, 50);
var criterion = new ResidualStopCriterion<Complex32>(1e-6f, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<Complex32>.Build.Dense(4, 4),
Vector<Complex32>.Build.Dense(3, 4),
@ -110,9 +110,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithNonMatchingSourceVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-6f, 50);
var criterion = new ResidualStopCriterion<Complex32>(1e-6f, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<Complex32>.Build.Dense(3, 4),
Vector<Complex32>.Build.Dense(4, 4),
@ -125,9 +125,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithNonMatchingResidualVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-6f, 50);
var criterion = new ResidualStopCriterion<Complex32>(1e-6f, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<Complex32>.Build.Dense(3, 4),
Vector<Complex32>.Build.Dense(3, 4),
@ -140,13 +140,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithSourceNaN()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-3f, 10);
var criterion = new ResidualStopCriterion<Complex32>(1e-3f, 10);
var solution = new DenseVector(new[] {new Complex32(1.0f, 1), new Complex32(1.0f, 1), new Complex32(2.0f, 1)});
var source = new DenseVector(new[] {new Complex32(1.0f, 1), new Complex32(1.0f, 1), new Complex32(float.NaN, 1)});
var residual = new DenseVector(new[] {new Complex32(1000.0f, 1), new Complex32(1000.0f, 1), new Complex32(2001.0f, 1)});
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Diverged, status, "Should be diverged");
}
@ -156,13 +156,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatusWithResidualNaN()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-3f, 10);
var criterion = new ResidualStopCriterion<Complex32>(1e-3f, 10);
var solution = new DenseVector(new[] {new Complex32(1.0f, 1), new Complex32(1.0f, 1), new Complex32(2.0f, 1)});
var source = new DenseVector(new[] {new Complex32(1.0f, 1), new Complex32(1.0f, 1), new Complex32(2.0f, 1)});
var residual = new DenseVector(new[] {new Complex32(1000.0f, 1), new Complex32(float.NaN, 1), new Complex32(2001.0f, 1)});
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Diverged, status, "Should be diverged");
}
@ -171,18 +171,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
/// </summary>
/// <remarks>Bugfix: The unit tests for the BiCgStab solver run with a super simple matrix equation
/// which converges at the first iteration. The default settings for the
/// residual stop criterium should be able to handle this.
/// residual stop criterion should be able to handle this.
/// </remarks>
[Test]
public void DetermineStatusWithConvergenceAtFirstIteration()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-6);
var criterion = new ResidualStopCriterion<Complex32>(1e-6);
var solution = new DenseVector(new[] {Complex32.One, Complex32.One, Complex32.One});
var source = new DenseVector(new[] {Complex32.One, Complex32.One, Complex32.One});
var residual = new DenseVector(new[] {Complex32.Zero, Complex32.Zero, Complex32.Zero});
var status = criterium.DetermineStatus(0, solution, source, residual);
var status = criterion.DetermineStatus(0, solution, source, residual);
Assert.AreEqual(IterationStatus.Converged, status, "Should be done");
}
@ -192,7 +192,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void DetermineStatus()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-3f, 10);
var criterion = new ResidualStopCriterion<Complex32>(1e-3f, 10);
// the solution vector isn't actually being used so ...
var solution = new DenseVector(new[] {new Complex32(float.NaN, float.NaN), new Complex32(float.NaN, float.NaN), new Complex32(float.NaN, float.NaN)});
@ -203,10 +203,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
// Set the residual values
var residual = new DenseVector(new[] {new Complex32(0.001f, 0), new Complex32(0.001f, 0), new Complex32(0.002f, 0)});
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should still be running");
var status2 = criterium.DetermineStatus(16, solution, source, residual);
var status2 = criterion.DetermineStatus(16, solution, source, residual);
Assert.AreEqual(IterationStatus.Converged, status2, "Should be done");
}
@ -216,35 +216,35 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test]
public void ResetCalculationState()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-3f, 10);
var criterion = new ResidualStopCriterion<Complex32>(1e-3f, 10);
var solution = new DenseVector(new[] {new Complex32(0.001f, 1), new Complex32(0.001f, 1), new Complex32(0.002f, 1)});
var source = new DenseVector(new[] {new Complex32(0.001f, 1), new Complex32(0.001f, 1), new Complex32(0.002f, 1)});
var residual = new DenseVector(new[] {new Complex32(1.000f, 0), new Complex32(1.000f, 0), new Complex32(2.001f, 0)});
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new ResidualStopCriterium<Complex32>(1e-3f, 10);
var criterion = new ResidualStopCriterion<Complex32>(1e-3f, 10);
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(ResidualStopCriterium<Complex32>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof(ResidualStopCriterion<Complex32>), clone, "Wrong criterion type");
var clonedCriterium = clone as ResidualStopCriterium<Complex32>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as ResidualStopCriterion<Complex32>;
Assert.IsNotNull(clonedCriterion);
Assert.AreEqual(criterium.Maximum, clonedCriterium.Maximum, "Clone failed");
Assert.AreEqual(criterium.MinimumIterationsBelowMaximum, clonedCriterium.MinimumIterationsBelowMaximum, "Clone failed");
Assert.AreEqual(criterion.Maximum, clonedCriterion.Maximum, "Clone failed");
Assert.AreEqual(criterion.MinimumIterationsBelowMaximum, clonedCriterion.MinimumIterationsBelowMaximum, "Clone failed");
}
}
}

34
src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/BiCgStabTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -93,10 +93,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new BiCgStab();
@ -137,10 +137,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new BiCgStab();
@ -214,10 +214,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new BiCgStab();
@ -254,8 +254,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var vectorb = Vector<double>.Build.Random(order, 1);
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium<double>(1e-10));
new IterationCountStopCriterion<double>(1000),
new ResidualStopCriterion<double>(1e-10));
var solver = new BiCgStab();
@ -284,8 +284,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixB = Matrix<double>.Build.Random(order, order, 1);
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium<double>(1e-10));
new IterationCountStopCriterion<double>(1000),
new ResidualStopCriterion<double>(1e-10));
var solver = new BiCgStab();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);

34
src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/GpBiCgTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -93,10 +93,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new GpBiCg();
@ -137,10 +137,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new GpBiCg();
@ -214,10 +214,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new GpBiCg();
@ -254,8 +254,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var vectorb = Vector<double>.Build.Random(order, 1);
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium<double>(1e-10));
new IterationCountStopCriterion<double>(1000),
new ResidualStopCriterion<double>(1e-10));
var solver = new GpBiCg();
@ -284,8 +284,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixB = Matrix<double>.Build.Random(order, order, 1);
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium<double>(1e-10));
new IterationCountStopCriterion<double>(1000),
new ResidualStopCriterion<double>(1e-10));
var solver = new GpBiCg();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);

34
src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/MlkBiCgStabTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -93,10 +93,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new MlkBiCgStab();
@ -137,10 +137,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new MlkBiCgStab();
@ -214,10 +214,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new MlkBiCgStab();
@ -254,8 +254,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var vectorb = Vector<double>.Build.Random(order, 1);
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium<double>(1e-10));
new IterationCountStopCriterion<double>(1000),
new ResidualStopCriterion<double>(1e-10));
var solver = new MlkBiCgStab();
@ -284,8 +284,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixB = Matrix<double>.Build.Random(order, order, 1);
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium<double>(1e-10));
new IterationCountStopCriterion<double>(1000),
new ResidualStopCriterion<double>(1e-10));
var solver = new MlkBiCgStab();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);

34
src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/TFQMRTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -93,10 +93,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new TFQMR();
@ -134,10 +134,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new TFQMR();
@ -208,10 +208,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(),
new FailureStopCriterium<double>());
new IterationCountStopCriterion<double>(MaximumIterations),
new ResidualStopCriterion<double>(ConvergenceBoundary),
new DivergenceStopCriterion<double>(),
new FailureStopCriterion<double>());
var solver = new TFQMR();
@ -245,8 +245,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var vectorb = Vector<double>.Build.Random(order, 1);
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium<double>(1e-10));
new IterationCountStopCriterion<double>(1000),
new ResidualStopCriterion<double>(1e-10));
var solver = new TFQMR();
@ -275,8 +275,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixB = Matrix<double>.Build.Random(order, order, 1);
var monitor = new Iterator<double>(
new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium<double>(1e-10));
new IterationCountStopCriterion<double>(1000),
new ResidualStopCriterion<double>(1e-10));
var solver = new TFQMR();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);

28
src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -62,12 +62,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void DetermineStatusWithNegativeIterationNumberThrowsArgumentOutOfRangeException()
{
var criteria = new List<IIterationStopCriterium<double>>
var criteria = new List<IIterationStopCriterion<double>>
{
new FailureStopCriterium<double>(),
new DivergenceStopCriterium<double>(),
new IterationCountStopCriterium<double>(),
new ResidualStopCriterium<double>(1e-12)
new FailureStopCriterion<double>(),
new DivergenceStopCriterion<double>(),
new IterationCountStopCriterion<double>(),
new ResidualStopCriterion<double>(1e-12)
};
var iterator = new Iterator<double>(criteria);
@ -84,11 +84,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void DetermineStatus()
{
var criteria = new List<IIterationStopCriterium<double>>
var criteria = new List<IIterationStopCriterion<double>>
{
new FailureStopCriterium<double>(),
new DivergenceStopCriterium<double>(),
new IterationCountStopCriterium<double>(1)
new FailureStopCriterion<double>(),
new DivergenceStopCriterion<double>(),
new IterationCountStopCriterion<double>(1)
};
var iterator = new Iterator<double>(criteria);
@ -116,11 +116,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void ResetToPrecalculationState()
{
var criteria = new List<IIterationStopCriterium<double>>
var criteria = new List<IIterationStopCriterion<double>>
{
new FailureStopCriterium<double>(),
new DivergenceStopCriterium<double>(),
new IterationCountStopCriterium<double>(1)
new FailureStopCriterion<double>(),
new DivergenceStopCriterion<double>(),
new IterationCountStopCriterion<double>(1)
};
var iterator = new Iterator<double>(criteria);

120
src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterium/DivergenceStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterion/DivergenceStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="DivergenceStopCriteriumTest.cs" company="Math.NET">
// <copyright file="DivergenceStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,13 +34,13 @@ using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterion
{
/// <summary>
/// Divergence stop criterium test.
/// Divergence stop criterion test.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class DivergenceStopCriteriumTest
public sealed class DivergenceStopCriterionTest
{
/// <summary>
/// Create with negative maximum increase throws <c>ArgumentOutOfRangeException</c>.
@ -48,7 +48,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void CreateWithNegativeMaximumIncreaseThrowsArgumentOutOfRangeException()
{
Assert.That(() => new DivergenceStopCriterium<double>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new DivergenceStopCriterion<double>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -57,20 +57,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new DivergenceStopCriterium<double>(minimumIterations: 2), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new DivergenceStopCriterion<double>(minimumIterations: 2), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
/// Can create stop criterium.
/// Can create stop criterion.
/// </summary>
[Test]
public void Create()
{
var criterium = new DivergenceStopCriterium<double>(0.1, 3);
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new DivergenceStopCriterion<double>(0.1, 3);
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.AreEqual(0.1, criterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(3, criterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(0.1, criterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(3, criterion.MinimumNumberOfIterations, "Incorrect iteration count");
}
/// <summary>
@ -79,8 +79,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new DivergenceStopCriterium<double>(0.5, 15);
Assert.That(() => criterium.DetermineStatus(
var criterion = new DivergenceStopCriterion<double>(0.5, 15);
Assert.That(() => criterion.DetermineStatus(
-1,
Vector<double>.Build.Dense(3, 4),
Vector<double>.Build.Dense(3, 5),
@ -96,16 +96,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<double>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<double>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have to few iterations
for (var i = 0; i < Iterations - 1; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {1.0}),
new DenseVector(new[] {1.0}),
new DenseVector(new[] {(i + 1)*(Increase + 0.1)}));
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { (i + 1)*(Increase + 0.1) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
@ -120,16 +120,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<double>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<double>(Increase, Iterations);
// Add residuals. We should not diverge because we won't have enough increase
for (var i = 0; i < Iterations*2; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {1.0}),
new DenseVector(new[] {1.0}),
new DenseVector(new[] {(i + 1)*(Increase - 0.01)}));
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { (i + 1)*(Increase - 0.01) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
@ -144,26 +144,26 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<double>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<double>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have to few iterations
for (var i = 0; i < Iterations - 5; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {1.0}),
new DenseVector(new[] {1.0}),
new DenseVector(new[] {(i + 1)*(Increase - 0.01)}));
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { (i + 1)*(Increase - 0.01) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
// Now make it fail by throwing in a NaN
var status2 = criterium.DetermineStatus(
var status2 = criterion.DetermineStatus(
Iterations,
new DenseVector(new[] {1.0}),
new DenseVector(new[] {1.0}),
new DenseVector(new[] {double.NaN}));
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { double.NaN }));
Assert.AreEqual(IterationStatus.Diverged, status2, "Status check fail.");
}
@ -177,29 +177,29 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<double>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<double>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have one to few iterations
double previous = 1;
for (var i = 0; i < Iterations - 1; i++)
{
previous *= 1 + Increase + 0.01;
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {1.0}),
new DenseVector(new[] {1.0}),
new DenseVector(new[] {previous}));
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { previous }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
// Add the final residual. Now we should have divergence
previous *= 1 + Increase + 0.01;
var status2 = criterium.DetermineStatus(
var status2 = criterion.DetermineStatus(
Iterations - 1,
new DenseVector(new[] {1.0}),
new DenseVector(new[] {1.0}),
new DenseVector(new[] {previous}));
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { previous }));
Assert.AreEqual(IterationStatus.Diverged, status2, "Status check fail.");
}
@ -213,27 +213,27 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<double>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<double>(Increase, Iterations);
// Add residuals. Blow it up instantly
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
1,
new DenseVector(new[] {1.0}),
new DenseVector(new[] {1.0}),
new DenseVector(new[] {double.NaN}));
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { 1.0 }),
new DenseVector(new[] { double.NaN }));
Assert.AreEqual(IterationStatus.Diverged, status, "Status check fail.");
// Reset the state
criterium.Reset();
criterion.Reset();
Assert.AreEqual(Increase, criterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(Iterations, criterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Status check fail.");
Assert.AreEqual(Increase, criterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(Iterations, criterion.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Status check fail.");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
@ -241,17 +241,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<double>(Increase, Iterations);
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new DivergenceStopCriterion<double>(Increase, Iterations);
Assert.IsNotNull(criterion, "There should be a criterion");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(DivergenceStopCriterium<double>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (DivergenceStopCriterion<double>), clone, "Wrong criterion type");
var clonedCriterium = clone as DivergenceStopCriterium<double>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as DivergenceStopCriterion<double>;
Assert.IsNotNull(clonedCriterion);
Assert.AreEqual(criterium.MaximumRelativeIncrease, clonedCriterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(criterium.MinimumNumberOfIterations, clonedCriterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(criterion.MaximumRelativeIncrease, clonedCriterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(criterion.MinimumNumberOfIterations, clonedCriterion.MinimumNumberOfIterations, "Incorrect iteration count");
}
}
}

88
src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterium/FailureStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterion/FailureStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="FailureStopCriteriumTest.cs" company="Math.NET">
// <copyright file="FailureStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,13 +34,13 @@ using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterion
{
/// <summary>
/// Failure stop criterium tests.
/// Failure stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class FailureStopCriteriumTest
public sealed class FailureStopCriterionTest
{
/// <summary>
/// Can create.
@ -48,8 +48,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void Create()
{
var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "Should have a criterium now");
var criterion = new FailureStopCriterion<double>();
Assert.IsNotNull(criterion, "Should have a criterion now");
}
/// <summary>
@ -58,10 +58,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<double>();
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.That(() => criterium.DetermineStatus(-1, Vector<double>.Build.Dense(3, 4), Vector<double>.Build.Dense(3, 5), Vector<double>.Build.Dense(3, 6)), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => criterion.DetermineStatus(-1, Vector<double>.Build.Dense(3, 4), Vector<double>.Build.Dense(3, 5), Vector<double>.Build.Dense(3, 6)), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -70,10 +70,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException()
{
var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<double>();
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.That(() => criterium.DetermineStatus(1, Vector<double>.Build.Dense(3, 4), Vector<double>.Build.Dense(3, 6), Vector<double>.Build.Dense(4, 4)), Throws.ArgumentException);
Assert.That(() => criterion.DetermineStatus(1, Vector<double>.Build.Dense(3, 4), Vector<double>.Build.Dense(3, 6), Vector<double>.Build.Dense(4, 4)), Throws.ArgumentException);
}
/// <summary>
@ -82,14 +82,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithResidualNaN()
{
var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<double>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {1.0, 1.0, 2.0});
var source = new DenseVector(new[] {1001.0, 0, 2003.0});
var residual = new DenseVector(new[] {1000, double.NaN, 2001});
var solution = new DenseVector(new[] { 1.0, 1.0, 2.0 });
var source = new DenseVector(new[] { 1001.0, 0, 2003.0 });
var residual = new DenseVector(new[] { 1000, double.NaN, 2001 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Failure, status, "Should be failed");
}
@ -99,14 +99,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithSolutionNaN()
{
var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<double>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {1.0, 1.0, double.NaN});
var source = new DenseVector(new[] {1001.0, 0.0, 2003.0});
var residual = new DenseVector(new[] {1000.0, 1000.0, 2001.0});
var solution = new DenseVector(new[] { 1.0, 1.0, double.NaN });
var source = new DenseVector(new[] { 1001.0, 0.0, 2003.0 });
var residual = new DenseVector(new[] { 1000.0, 1000.0, 2001.0 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Failure, status, "Should be failed");
}
@ -116,14 +116,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatus()
{
var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<double>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {3.0, 2.0, 1.0});
var source = new DenseVector(new[] {1001.0, 0.0, 2003.0});
var residual = new DenseVector(new[] {1.0, 2.0, 3.0});
var solution = new DenseVector(new[] { 3.0, 2.0, 1.0 });
var source = new DenseVector(new[] { 1001.0, 0.0, 2003.0 });
var residual = new DenseVector(new[] { 1.0, 2.0, 3.0 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
}
@ -133,30 +133,30 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void ResetCalculationState()
{
var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<double>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {1.0, 1.0, 2.0});
var source = new DenseVector(new[] {1001.0, 0.0, 2003.0});
var residual = new DenseVector(new[] {1000.0, 1000.0, 2001.0});
var solution = new DenseVector(new[] { 1.0, 1.0, 2.0 });
var source = new DenseVector(new[] { 1001.0, 0.0, 2003.0 });
var residual = new DenseVector(new[] { 1000.0, 1000.0, 2001.0 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(FailureStopCriterium<double>), clone, "Wrong criterium type");
var criterion = new FailureStopCriterion<double>();
Assert.IsNotNull(criterion, "There should be a criterion");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (FailureStopCriterion<double>), clone, "Wrong criterion type");
}
}
}

70
src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterion/IterationCountStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="IterationCountStopCriteriumTest.cs" company="Math.NET">
// <copyright file="IterationCountStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -33,13 +33,13 @@ using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterion
{
/// <summary>
/// Iteration count stop criterium tests.
/// Iteration count stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class IterationCountStopCriteriumTest
public sealed class IterationCountStopCriterionTest
{
/// <summary>
/// Create with illegal minimum iterations throws <c>ArgumentOutOfRangeException</c>.
@ -47,7 +47,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new IterationCountStopCriterium<double>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new IterationCountStopCriterion<double>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -56,8 +56,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void Create()
{
var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<double>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
}
/// <summary>
@ -66,13 +66,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void ResetMaximumIterations()
{
var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
var criterion = new IterationCountStopCriterion<double>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.AreEqual(10, criterion.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
criterium.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterium<double>.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value");
criterion.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterion.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterion<double>.DefaultMaximumNumberOfIterations, criterion.MaximumNumberOfIterations, "Reset to the wrong value");
}
/// <summary>
@ -81,10 +81,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<double>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.That(() => criterium.DetermineStatus(-1, Vector<double>.Build.Dense(3, 1), Vector<double>.Build.Dense(3, 2), Vector<double>.Build.Dense(3, 3)), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => criterion.DetermineStatus(-1, Vector<double>.Build.Dense(3, 1), Vector<double>.Build.Dense(3, 2), Vector<double>.Build.Dense(3, 3)), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -93,13 +93,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatus()
{
var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<double>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
var status = criterium.DetermineStatus(5, Vector<double>.Build.Dense(3, 1), Vector<double>.Build.Dense(3, 2), Vector<double>.Build.Dense(3, 3));
var status = criterion.DetermineStatus(5, Vector<double>.Build.Dense(3, 1), Vector<double>.Build.Dense(3, 2), Vector<double>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
var status2 = criterium.DetermineStatus(10, Vector<double>.Build.Dense(3, 1), Vector<double>.Build.Dense(3, 2), Vector<double>.Build.Dense(3, 3));
var status2 = criterion.DetermineStatus(10, Vector<double>.Build.Dense(3, 1), Vector<double>.Build.Dense(3, 2), Vector<double>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.StoppedWithoutConvergence, status2, "Should be finished");
}
@ -109,34 +109,34 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void ResetCalculationState()
{
var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<double>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
var status = criterium.DetermineStatus(5, Vector<double>.Build.Dense(3, 1), Vector<double>.Build.Dense(3, 2), Vector<double>.Build.Dense(3, 3));
var status = criterion.DetermineStatus(5, Vector<double>.Build.Dense(3, 1), Vector<double>.Build.Dense(3, 2), Vector<double>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone a stop criterium.
/// Can clone a stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum");
var criterion = new IterationCountStopCriterion<double>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.AreEqual(10, criterion.MaximumNumberOfIterations, "Incorrect maximum");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(IterationCountStopCriterium<double>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (IterationCountStopCriterion<double>), clone, "Wrong criterion type");
var clonedCriterium = clone as IterationCountStopCriterium<double>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as IterationCountStopCriterion<double>;
Assert.IsNotNull(clonedCriterion);
// ReSharper disable PossibleNullReferenceException
Assert.AreEqual(criterium.MaximumNumberOfIterations, clonedCriterium.MaximumNumberOfIterations, "Clone failed");
Assert.AreEqual(criterion.MaximumNumberOfIterations, clonedCriterion.MaximumNumberOfIterations, "Clone failed");
// ReSharper restore PossibleNullReferenceException
}

78
src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterium/ResidualStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterion/ResidualStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="ResidualStopCriteriumTest.cs" company="Math.NET">
// <copyright file="ResidualStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -33,13 +33,13 @@ using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterion
{
/// <summary>
/// Residual stop criterium tests.
/// Residual stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class ResidualStopCriteriumTest
public sealed class ResidualStopCriterionTest
{
/// <summary>
/// Create with negative maximum throws <c>ArgumentOutOfRangeException</c>.
@ -47,7 +47,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void CreateWithNegativeMaximumThrowsArgumentOutOfRangeException()
{
Assert.That(() => new ResidualStopCriterium<double>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new ResidualStopCriterion<double>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -56,7 +56,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new ResidualStopCriterium<double>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new ResidualStopCriterion<double>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -65,10 +65,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void Create()
{
var criterium = new ResidualStopCriterium<double>(1e-8, 50);
var criterion = new ResidualStopCriterion<double>(1e-8, 50);
Assert.AreEqual(1e-8, criterium.Maximum, "Incorrect maximum");
Assert.AreEqual(50, criterium.MinimumIterationsBelowMaximum, "Incorrect iteration count");
Assert.AreEqual(1e-8, criterion.Maximum, "Incorrect maximum");
Assert.AreEqual(50, criterion.MinimumIterationsBelowMaximum, "Incorrect iteration count");
}
/// <summary>
@ -77,9 +77,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new ResidualStopCriterium<double>(1e-8, 50);
var criterion = new ResidualStopCriterion<double>(1e-8, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
-1,
Vector<double>.Build.Dense(3, 4),
Vector<double>.Build.Dense(3, 5),
@ -92,9 +92,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithNonMatchingSolutionVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<double>(1e-8, 50);
var criterion = new ResidualStopCriterion<double>(1e-8, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<double>.Build.Dense(4, 4),
Vector<double>.Build.Dense(3, 4),
@ -107,9 +107,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithNonMatchingSourceVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<double>(1e-8, 50);
var criterion = new ResidualStopCriterion<double>(1e-8, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<double>.Build.Dense(3, 4),
Vector<double>.Build.Dense(4, 4),
@ -122,9 +122,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithNonMatchingResidualVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<double>(1e-8, 50);
var criterion = new ResidualStopCriterion<double>(1e-8, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<double>.Build.Dense(3, 4),
Vector<double>.Build.Dense(3, 4),
@ -137,12 +137,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithSourceNaN()
{
var criterium = new ResidualStopCriterium<double>(1e-3, 10);
var criterion = new ResidualStopCriterion<double>(1e-3, 10);
var solution = Vector<double>.Build.Dense(new[] { 1.0, 1.0, 2.0 });
var source = Vector<double>.Build.Dense(new[] { 1.0, 1.0, double.NaN });
var residual = Vector<double>.Build.Dense(new[] { 1000.0, 1000.0, 2001.0 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Diverged, status, "Should be diverged");
}
@ -152,12 +152,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithResidualNaN()
{
var criterium = new ResidualStopCriterium<double>(1e-3, 10);
var criterion = new ResidualStopCriterion<double>(1e-3, 10);
var solution = Vector<double>.Build.Dense(new[] { 1.0, 1.0, 2.0 });
var source = Vector<double>.Build.Dense(new[] { 1.0, 1.0, 2.0 });
var residual = Vector<double>.Build.Dense(new[] { 1000.0, double.NaN, 2001.0 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Diverged, status, "Should be diverged");
}
@ -167,12 +167,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatusWithConvergenceAtFirstIteration()
{
var criterium = new ResidualStopCriterium<double>(1e-12);
var criterion = new ResidualStopCriterion<double>(1e-12);
var solution = Vector<double>.Build.Dense(new[] { 1.0, 1.0, 1.0 });
var source = Vector<double>.Build.Dense(new[] { 1.0, 1.0, 1.0 });
var residual = Vector<double>.Build.Dense(new[] { 0.0, 0.0, 0.0 });
var status = criterium.DetermineStatus(0, solution, source, residual);
var status = criterion.DetermineStatus(0, solution, source, residual);
Assert.AreEqual(IterationStatus.Converged, status, "Should be done");
}
@ -182,7 +182,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void DetermineStatus()
{
var criterium = new ResidualStopCriterium<double>(1e-3, 10);
var criterion = new ResidualStopCriterion<double>(1e-3, 10);
// the solution vector isn't actually being used so ...
var solution = Vector<double>.Build.Dense(new[] { double.NaN, double.NaN, double.NaN });
@ -193,10 +193,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
// Set the residual values
var residual = Vector<double>.Build.Dense(new[] { 0.001, 0.001, 0.002 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should still be running");
var status2 = criterium.DetermineStatus(16, solution, source, residual);
var status2 = criterion.DetermineStatus(16, solution, source, residual);
Assert.AreEqual(IterationStatus.Converged, status2, "Should be done");
}
@ -206,36 +206,36 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test]
public void ResetCalculationState()
{
var criterium = new ResidualStopCriterium<double>(1e-3, 10);
var criterion = new ResidualStopCriterion<double>(1e-3, 10);
var solution = Vector<double>.Build.Dense(new[] { 0.001, 0.001, 0.002 });
var source = Vector<double>.Build.Dense(new[] { 0.001, 0.001, 0.002 });
var residual = Vector<double>.Build.Dense(new[] { 1.000, 1.000, 2.001 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new ResidualStopCriterium<double>(1e-3, 10);
var criterion = new ResidualStopCriterion<double>(1e-3, 10);
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(ResidualStopCriterium<double>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (ResidualStopCriterion<double>), clone, "Wrong criterion type");
var clonedCriterium = clone as ResidualStopCriterium<double>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as ResidualStopCriterion<double>;
Assert.IsNotNull(clonedCriterion);
// ReSharper disable PossibleNullReferenceException
Assert.AreEqual(criterium.Maximum, clonedCriterium.Maximum, "Clone failed");
Assert.AreEqual(criterium.MinimumIterationsBelowMaximum, clonedCriterium.MinimumIterationsBelowMaximum, "Clone failed");
Assert.AreEqual(criterion.Maximum, clonedCriterion.Maximum, "Clone failed");
Assert.AreEqual(criterion.MinimumIterationsBelowMaximum, clonedCriterion.MinimumIterationsBelowMaximum, "Clone failed");
// ReSharper restore PossibleNullReferenceException
}

44
src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/BiCgStabTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -93,10 +93,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new BiCgStab();
@ -130,17 +130,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrix = SparseMatrix.CreateIdentity(100);
// Scale it with a funny number
matrix.Multiply((float) Math.PI, matrix);
matrix.Multiply((float)Math.PI, matrix);
// Create the y vector
var y = Vector<float>.Build.Dense(matrix.RowCount, 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new BiCgStab();
@ -214,10 +214,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new BiCgStab();
@ -249,15 +249,15 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
public void CanSolveForRandomVector(int order)
{
// Due to datatype "float" it can happen that solution will not converge for specific random matrix
// That's why we will do 3 tries and downgrade stop criterium each time
// That's why we will do 3 tries and downgrade stop criterion each time
for (var iteration = 6; iteration > 3; iteration--)
{
var matrixA = Matrix<float>.Build.Random(order, order, 1);
var vectorb = Vector<float>.Build.Random(order, 1);
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(Math.Pow(1.0/10.0, iteration)));
var solver = new BiCgStab();
var resultx = matrixA.SolveIterative(vectorb, solver, monitor);
@ -274,7 +274,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Check the reconstruction.
for (var i = 0; i < order; i++)
{
Assert.AreEqual(vectorb[i], matrixBReconstruct[i], (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i], matrixBReconstruct[i], (float)Math.Pow(1.0/10.0, iteration - 3));
}
return;
@ -289,15 +289,15 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
public void CanSolveForRandomMatrix(int order)
{
// Due to datatype "float" it can happen that solution will not converge for specific random matrix
// That's why we will do 3 tries and downgrade stop criterium each time
// That's why we will do 3 tries and downgrade stop criterion each time
for (var iteration = 6; iteration > 3; iteration--)
{
var matrixA = Matrix<float>.Build.Random(order, order, 1);
var matrixB = Matrix<float>.Build.Random(order, order, 1);
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(Math.Pow(1.0/10.0, iteration)));
var solver = new BiCgStab();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);
@ -321,7 +321,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{
for (var j = 0; j < matrixB.ColumnCount; j++)
{
Assert.AreEqual(matrixB[i, j], matrixBReconstruct[i, j], (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j], matrixBReconstruct[i, j], (float)Math.Pow(1.0/10.0, iteration - 3));
}
}

44
src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/GpBiCgTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -93,10 +93,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new GpBiCg();
@ -130,17 +130,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrix = SparseMatrix.CreateIdentity(100);
// Scale it with a funny number
matrix.Multiply((float) Math.PI, matrix);
matrix.Multiply((float)Math.PI, matrix);
// Create the y vector
var y = Vector<float>.Build.Dense(matrix.RowCount, 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new GpBiCg();
@ -214,10 +214,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new GpBiCg();
@ -249,15 +249,15 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
public void CanSolveForRandomVector(int order)
{
// Due to datatype "float" it can happen that solution will not converge for specific random matrix
// That's why we will do 3 tries and downgrade stop criterium each time
// That's why we will do 3 tries and downgrade stop criterion each time
for (var iteration = 6; iteration > 3; iteration--)
{
var matrixA = Matrix<float>.Build.Random(order, order, 1);
var vectorb = Vector<float>.Build.Random(order, 1);
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(Math.Pow(1.0/10.0, iteration)));
var solver = new GpBiCg();
var resultx = matrixA.SolveIterative(vectorb, solver, monitor);
@ -274,7 +274,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Check the reconstruction.
for (var i = 0; i < order; i++)
{
Assert.AreEqual(vectorb[i], matrixBReconstruct[i], (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i], matrixBReconstruct[i], (float)Math.Pow(1.0/10.0, iteration - 3));
}
return;
@ -289,15 +289,15 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
public void CanSolveForRandomMatrix(int order)
{
// Due to datatype "float" it can happen that solution will not converge for specific random matrix
// That's why we will do 3 tries and downgrade stop criterium each time
// That's why we will do 3 tries and downgrade stop criterion each time
for (var iteration = 6; iteration > 3; iteration--)
{
var matrixA = Matrix<float>.Build.Random(order, order, 1);
var matrixB = Matrix<float>.Build.Random(order, order, 1);
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(Math.Pow(1.0/10.0, iteration)));
var solver = new GpBiCg();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);
@ -321,7 +321,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{
for (var j = 0; j < matrixB.ColumnCount; j++)
{
Assert.AreEqual(matrixB[i, j], matrixBReconstruct[i, j], (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j], matrixBReconstruct[i, j], (float)Math.Pow(1.0/10.0, iteration - 3));
}
}

44
src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/MlkBiCgStabTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -93,10 +93,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new MlkBiCgStab();
@ -130,17 +130,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrix = SparseMatrix.CreateIdentity(100);
// Scale it with a funny number
matrix.Multiply((float) Math.PI, matrix);
matrix.Multiply((float)Math.PI, matrix);
// Create the y vector
var y = Vector<float>.Build.Dense(matrix.RowCount, 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new MlkBiCgStab();
@ -218,10 +218,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new MlkBiCgStab();
@ -266,15 +266,15 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
public void CanSolveForRandomVector(int order)
{
// Due to datatype "float" it can happen that solution will not converge for specific random matrix
// That's why we will do 4 tries and downgrade stop criterium each time
// That's why we will do 4 tries and downgrade stop criterion each time
for (var iteration = 6; iteration > 3; iteration--)
{
var matrixA = Matrix<float>.Build.Random(order, order, 1);
var vectorb = Vector<float>.Build.Random(order, 1);
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(Math.Pow(1.0/10.0, iteration)));
var solver = new MlkBiCgStab();
var resultx = matrixA.SolveIterative(vectorb, solver, monitor);
@ -291,7 +291,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Check the reconstruction.
for (var i = 0; i < order; i++)
{
Assert.AreEqual(vectorb[i], matrixBReconstruct[i], (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i], matrixBReconstruct[i], (float)Math.Pow(1.0/10.0, iteration - 3));
}
return;
@ -308,15 +308,15 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
public void CanSolveForRandomMatrix(int order)
{
// Due to datatype "float" it can happen that solution will not converge for specific random matrix
// That's why we will do 4 tries and downgrade stop criterium each time
// That's why we will do 4 tries and downgrade stop criterion each time
for (var iteration = 6; iteration > 3; iteration--)
{
var matrixA = Matrix<float>.Build.Random(order, order, 1);
var matrixB = Matrix<float>.Build.Random(order, order, 1);
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(Math.Pow(1.0/10.0, iteration)));
var solver = new MlkBiCgStab();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);
@ -340,7 +340,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{
for (var j = 0; j < matrixB.ColumnCount; j++)
{
Assert.AreEqual(matrixB[i, j], matrixBReconstruct[i, j], (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(matrixB[i, j], matrixBReconstruct[i, j], (float)Math.Pow(1.0/10.0, iteration - 3));
}
}

44
src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/TFQMRTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -93,10 +93,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new TFQMR();
@ -127,17 +127,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrix = SparseMatrix.CreateIdentity(100);
// Scale it with a funny number
matrix.Multiply((float) Math.PI, matrix);
matrix.Multiply((float)Math.PI, matrix);
// Create the y vector
var y = Vector<float>.Build.Dense(matrix.RowCount, 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new TFQMR();
@ -208,10 +208,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(),
new FailureStopCriterium<float>());
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(ConvergenceBoundary),
new DivergenceStopCriterion<float>(),
new FailureStopCriterion<float>());
var solver = new TFQMR();
@ -240,15 +240,15 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
public void CanSolveForRandomVector(int order)
{
// Due to datatype "float" it can happen that solution will not converge for specific random matrix
// That's why we will do 3 tries and downgrade stop criterium each time
// That's why we will do 3 tries and downgrade stop criterion each time
for (var iteration = 6; iteration > 3; iteration--)
{
var matrixA = Matrix<float>.Build.Random(order, order, 1);
var vectorb = Vector<float>.Build.Random(order, 1);
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(Math.Pow(1.0/10.0, iteration)));
var solver = new TFQMR();
var resultx = matrixA.SolveIterative(vectorb, solver, monitor);
@ -265,7 +265,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Check the reconstruction.
for (var i = 0; i < order; i++)
{
Assert.AreEqual(vectorb[i], matrixBReconstruct[i], (float) Math.Pow(1.0/10.0, iteration - 3));
Assert.AreEqual(vectorb[i], matrixBReconstruct[i], (float)Math.Pow(1.0/10.0, iteration - 3));
}
return;
@ -280,15 +280,15 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
public void CanSolveForRandomMatrix(int order)
{
// Due to datatype "float" it can happen that solution will not converge for specific random matrix
// That's why we will do 4 tries and downgrade stop criterium each time
// That's why we will do 4 tries and downgrade stop criterion each time
for (var iteration = 6; iteration > 3; iteration--)
{
var matrixA = Matrix<float>.Build.Random(order, order, 1);
var matrixB = Matrix<float>.Build.Random(order, order, 1);
var monitor = new Iterator<float>(
new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(Math.Pow(1.0 / 10.0, iteration)));
new IterationCountStopCriterion<float>(MaximumIterations),
new ResidualStopCriterion<float>(Math.Pow(1.0/10.0, iteration)));
var solver = new TFQMR();
var matrixX = matrixA.SolveIterative(matrixB, solver, monitor);
@ -312,7 +312,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{
for (var j = 0; j < matrixB.ColumnCount; j++)
{
Assert.AreEqual(matrixB[i, j], matrixBReconstruct[i, j], (float) Math.Pow(1.0/10.0, iteration - 4));
Assert.AreEqual(matrixB[i, j], matrixBReconstruct[i, j], (float)Math.Pow(1.0/10.0, iteration - 4));
}
}

28
src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs

@ -4,7 +4,7 @@
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -62,12 +62,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void DetermineStatusWithNegativeIterationNumberThrowsArgumentOutOfRangeException()
{
var criteria = new List<IIterationStopCriterium<float>>
var criteria = new List<IIterationStopCriterion<float>>
{
new FailureStopCriterium<float>(),
new DivergenceStopCriterium<float>(),
new IterationCountStopCriterium<float>(),
new ResidualStopCriterium<float>(1e-6)
new FailureStopCriterion<float>(),
new DivergenceStopCriterion<float>(),
new IterationCountStopCriterion<float>(),
new ResidualStopCriterion<float>(1e-6)
};
var iterator = new Iterator<float>(criteria);
@ -84,11 +84,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void DetermineStatus()
{
var criteria = new List<IIterationStopCriterium<float>>
var criteria = new List<IIterationStopCriterion<float>>
{
new FailureStopCriterium<float>(),
new DivergenceStopCriterium<float>(),
new IterationCountStopCriterium<float>(1)
new FailureStopCriterion<float>(),
new DivergenceStopCriterion<float>(),
new IterationCountStopCriterion<float>(1)
};
var iterator = new Iterator<float>(criteria);
@ -116,11 +116,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void ResetToPrecalculationState()
{
var criteria = new List<IIterationStopCriterium<float>>
var criteria = new List<IIterationStopCriterion<float>>
{
new FailureStopCriterium<float>(),
new DivergenceStopCriterium<float>(),
new IterationCountStopCriterium<float>(1)
new FailureStopCriterion<float>(),
new DivergenceStopCriterion<float>(),
new IterationCountStopCriterion<float>(1)
};
var iterator = new Iterator<float>(criteria);

120
src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterium/DivergenceStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterion/DivergenceStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="DivergenceStopCriteriumTest.cs" company="Math.NET">
// <copyright file="DivergenceStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,13 +34,13 @@ using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterion
{
/// <summary>
/// Divergence stop criterium test.
/// Divergence stop criterion test.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class DivergenceStopCriteriumTest
public sealed class DivergenceStopCriterionTest
{
/// <summary>
/// Create with negative maximum increase throws <c>ArgumentOutOfRangeException</c>.
@ -48,7 +48,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void CreateWithNegativeMaximumIncreaseThrowsArgumentOutOfRangeException()
{
Assert.That(() => new DivergenceStopCriterium<float>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new DivergenceStopCriterion<float>(-0.1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -57,20 +57,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new DivergenceStopCriterium<float>(minimumIterations: 2), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new DivergenceStopCriterion<float>(minimumIterations: 2), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
/// Can create stop criterium.
/// Can create stop criterion.
/// </summary>
[Test]
public void Create()
{
var criterium = new DivergenceStopCriterium<float>(0.1, 3);
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new DivergenceStopCriterion<float>(0.1, 3);
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.AreEqual(0.1, criterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(3, criterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(0.1, criterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(3, criterion.MinimumNumberOfIterations, "Incorrect iteration count");
}
/// <summary>
@ -79,8 +79,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new DivergenceStopCriterium<float>(0.5, 15);
Assert.That(() => criterium.DetermineStatus(
var criterion = new DivergenceStopCriterion<float>(0.5, 15);
Assert.That(() => criterion.DetermineStatus(
-1,
Vector<float>.Build.Dense(3, 4),
Vector<float>.Build.Dense(3, 5),
@ -96,16 +96,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<float>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<float>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have to few iterations
for (var i = 0; i < Iterations - 1; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {(i + 1)*(Increase + 0.1f)}));
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { (i + 1)*(Increase + 0.1f) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
@ -120,16 +120,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<float>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<float>(Increase, Iterations);
// Add residuals. We should not diverge because we won't have enough increase
for (var i = 0; i < Iterations*2; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {(i + 1)*(Increase - 0.01f)}));
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { (i + 1)*(Increase - 0.01f) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
@ -144,26 +144,26 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<float>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<float>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have to few iterations
for (var i = 0; i < Iterations - 5; i++)
{
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {(i + 1)*(Increase - 0.01f)}));
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { (i + 1)*(Increase - 0.01f) }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
// Now make it fail by throwing in a NaN
var status2 = criterium.DetermineStatus(
var status2 = criterion.DetermineStatus(
Iterations,
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {float.NaN}));
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { float.NaN }));
Assert.AreEqual(IterationStatus.Diverged, status2, "Status check fail.");
}
@ -177,29 +177,29 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
const float Increase = 0.5f;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<float>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<float>(Increase, Iterations);
// Add residuals. We should not diverge because we'll have one to few iterations
float previous = 1;
for (var i = 0; i < Iterations - 1; i++)
{
previous *= 1 + Increase + 0.01f;
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
i,
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {previous}));
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { previous }));
Assert.AreEqual(IterationStatus.Continue, status, "Status check fail.");
}
// Add the final residual. Now we should have divergence
previous *= 1 + Increase + 0.01f;
var status2 = criterium.DetermineStatus(
var status2 = criterion.DetermineStatus(
Iterations - 1,
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {previous}));
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { previous }));
Assert.AreEqual(IterationStatus.Diverged, status2, "Status check fail.");
}
@ -213,27 +213,27 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<float>(Increase, Iterations);
var criterion = new DivergenceStopCriterion<float>(Increase, Iterations);
// Add residuals. Blow it up instantly
var status = criterium.DetermineStatus(
var status = criterion.DetermineStatus(
1,
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {1.0f}),
new DenseVector(new[] {float.NaN}));
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { 1.0f }),
new DenseVector(new[] { float.NaN }));
Assert.AreEqual(IterationStatus.Diverged, status, "Status check fail.");
// Reset the state
criterium.Reset();
criterion.Reset();
Assert.AreEqual(Increase, criterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(Iterations, criterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Status check fail.");
Assert.AreEqual(Increase, criterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(Iterations, criterion.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Status check fail.");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
@ -241,17 +241,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
const double Increase = 0.5;
const int Iterations = 10;
var criterium = new DivergenceStopCriterium<float>(Increase, Iterations);
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new DivergenceStopCriterion<float>(Increase, Iterations);
Assert.IsNotNull(criterion, "There should be a criterion");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(DivergenceStopCriterium<float>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (DivergenceStopCriterion<float>), clone, "Wrong criterion type");
var clonedCriterium = clone as DivergenceStopCriterium<float>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as DivergenceStopCriterion<float>;
Assert.IsNotNull(clonedCriterion);
Assert.AreEqual(criterium.MaximumRelativeIncrease, clonedCriterium.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(criterium.MinimumNumberOfIterations, clonedCriterium.MinimumNumberOfIterations, "Incorrect iteration count");
Assert.AreEqual(criterion.MaximumRelativeIncrease, clonedCriterion.MaximumRelativeIncrease, "Incorrect maximum");
Assert.AreEqual(criterion.MinimumNumberOfIterations, clonedCriterion.MinimumNumberOfIterations, "Incorrect iteration count");
}
}
}

88
src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterium/FailureStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterion/FailureStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="FailureStopCriteriumTest.cs" company="Math.NET">
// <copyright file="FailureStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,13 +34,13 @@ using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterion
{
/// <summary>
/// Failure stop criterium tests.
/// Failure stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class FailureStopCriteriumTest
public sealed class FailureStopCriterionTest
{
/// <summary>
/// Can create.
@ -48,8 +48,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void Create()
{
var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "Should have a criterium now");
var criterion = new FailureStopCriterion<float>();
Assert.IsNotNull(criterion, "Should have a criterion now");
}
/// <summary>
@ -58,10 +58,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<float>();
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.That(() => criterium.DetermineStatus(-1, Vector<float>.Build.Dense(3, 4), Vector<float>.Build.Dense(3, 5), Vector<float>.Build.Dense(3, 6)), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => criterion.DetermineStatus(-1, Vector<float>.Build.Dense(3, 4), Vector<float>.Build.Dense(3, 5), Vector<float>.Build.Dense(3, 6)), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -70,10 +70,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException()
{
var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<float>();
Assert.IsNotNull(criterion, "There should be a criterion");
Assert.That(() => criterium.DetermineStatus(1, Vector<float>.Build.Dense(3, 4), Vector<float>.Build.Dense(3, 6), Vector<float>.Build.Dense(4, 4)), Throws.ArgumentException);
Assert.That(() => criterion.DetermineStatus(1, Vector<float>.Build.Dense(3, 4), Vector<float>.Build.Dense(3, 6), Vector<float>.Build.Dense(4, 4)), Throws.ArgumentException);
}
/// <summary>
@ -82,14 +82,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithResidualNaN()
{
var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<float>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {1.0f, 1.0f, 2.0f});
var source = new DenseVector(new[] {1001.0f, 0, 2003.0f});
var residual = new DenseVector(new[] {1000, float.NaN, 2001});
var solution = new DenseVector(new[] { 1.0f, 1.0f, 2.0f });
var source = new DenseVector(new[] { 1001.0f, 0, 2003.0f });
var residual = new DenseVector(new[] { 1000, float.NaN, 2001 });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Failure, status, "Should be failed");
}
@ -99,14 +99,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithSolutionNaN()
{
var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<float>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {1, 1, float.NaN});
var source = new DenseVector(new[] {1001.0f, 0.0f, 2003.0f});
var residual = new DenseVector(new[] {1000.0f, 1000.0f, 2001.0f});
var solution = new DenseVector(new[] { 1, 1, float.NaN });
var source = new DenseVector(new[] { 1001.0f, 0.0f, 2003.0f });
var residual = new DenseVector(new[] { 1000.0f, 1000.0f, 2001.0f });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Failure, status, "Should be failed");
}
@ -116,14 +116,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatus()
{
var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<float>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {3.0f, 2.0f, 1.0f});
var source = new DenseVector(new[] {1001.0f, 0.0f, 2003.0f});
var residual = new DenseVector(new[] {1.0f, 2.0f, 3.0f});
var solution = new DenseVector(new[] { 3.0f, 2.0f, 1.0f });
var source = new DenseVector(new[] { 1001.0f, 0.0f, 2003.0f });
var residual = new DenseVector(new[] { 1.0f, 2.0f, 3.0f });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
}
@ -133,31 +133,31 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void ResetCalculationState()
{
var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<float>();
Assert.IsNotNull(criterion, "There should be a criterion");
var solution = new DenseVector(new[] {1.0f, 1.0f, 2.0f});
var source = new DenseVector(new[] {1001.0f, 0.0f, 2003.0f});
var residual = new DenseVector(new[] {1000.0f, 1000.0f, 2001.0f});
var solution = new DenseVector(new[] { 1.0f, 1.0f, 2.0f });
var source = new DenseVector(new[] { 1001.0f, 0.0f, 2003.0f });
var residual = new DenseVector(new[] { 1000.0f, 1000.0f, 2001.0f });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium");
var criterion = new FailureStopCriterion<float>();
Assert.IsNotNull(criterion, "There should be a criterion");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(FailureStopCriterium<float>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (FailureStopCriterion<float>), clone, "Wrong criterion type");
}
}
}

68
src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterion/IterationCountStopCriteriumTest.cs

@ -1,4 +1,4 @@
// <copyright file="IterationCountStopCriteriumTest.cs" company="Math.NET">
// <copyright file="IterationCountStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
@ -33,13 +33,13 @@ using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterion
{
/// <summary>
/// Iteration count stop criterium tests.
/// Iteration count stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class IterationCountStopCriteriumTest
public sealed class IterationCountStopCriterionTest
{
/// <summary>
/// Create with illegal minimum iterations throws <c>ArgumentOutOfRangeException</c>.
@ -47,7 +47,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new IterationCountStopCriterium<float>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new IterationCountStopCriterion<float>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -56,8 +56,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void Create()
{
var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<float>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
}
/// <summary>
@ -66,13 +66,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void ResetMaximumIterations()
{
var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
var criterion = new IterationCountStopCriterion<float>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.AreEqual(10, criterion.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
criterium.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterium<float>.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value");
criterion.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterion.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterion<float>.DefaultMaximumNumberOfIterations, criterion.MaximumNumberOfIterations, "Reset to the wrong value");
}
/// <summary>
@ -81,10 +81,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<float>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.That(() => criterium.DetermineStatus(-1, Vector<float>.Build.Dense(3, 1), Vector<float>.Build.Dense(3, 2), Vector<float>.Build.Dense(3, 3)), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => criterion.DetermineStatus(-1, Vector<float>.Build.Dense(3, 1), Vector<float>.Build.Dense(3, 2), Vector<float>.Build.Dense(3, 3)), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -93,13 +93,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatus()
{
var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<float>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
var status = criterium.DetermineStatus(5, Vector<float>.Build.Dense(3, 1), Vector<float>.Build.Dense(3, 2), Vector<float>.Build.Dense(3, 3));
var status = criterion.DetermineStatus(5, Vector<float>.Build.Dense(3, 1), Vector<float>.Build.Dense(3, 2), Vector<float>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
var status2 = criterium.DetermineStatus(10, Vector<float>.Build.Dense(3, 1), Vector<float>.Build.Dense(3, 2), Vector<float>.Build.Dense(3, 3));
var status2 = criterion.DetermineStatus(10, Vector<float>.Build.Dense(3, 1), Vector<float>.Build.Dense(3, 2), Vector<float>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.StoppedWithoutConvergence, status2, "Should be finished");
}
@ -109,34 +109,34 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void ResetCalculationState()
{
var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
var criterion = new IterationCountStopCriterion<float>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
var status = criterium.DetermineStatus(5, Vector<float>.Build.Dense(3, 1), Vector<float>.Build.Dense(3, 2), Vector<float>.Build.Dense(3, 3));
var status = criterion.DetermineStatus(5, Vector<float>.Build.Dense(3, 1), Vector<float>.Build.Dense(3, 2), Vector<float>.Build.Dense(3, 3));
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone a stop criterium.
/// Can clone a stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum");
var criterion = new IterationCountStopCriterion<float>(10);
Assert.IsNotNull(criterion, "A criterion should have been created");
Assert.AreEqual(10, criterion.MaximumNumberOfIterations, "Incorrect maximum");
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(IterationCountStopCriterium<float>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof(IterationCountStopCriterion<float>), clone, "Wrong criterion type");
var clonedCriterium = clone as IterationCountStopCriterium<float>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as IterationCountStopCriterion<float>;
Assert.IsNotNull(clonedCriterion);
// ReSharper disable PossibleNullReferenceException
Assert.AreEqual(criterium.MaximumNumberOfIterations, clonedCriterium.MaximumNumberOfIterations, "Clone failed");
Assert.AreEqual(criterion.MaximumNumberOfIterations, clonedCriterion.MaximumNumberOfIterations, "Clone failed");
// ReSharper restore PossibleNullReferenceException
}

108
src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterium/ResidualStopCriteriumTest.cs → src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterion/ResidualStopCriteriumTest.cs

@ -1,10 +1,10 @@
// <copyright file="ResidualStopCriteriumTest.cs" company="Math.NET">
// <copyright file="ResidualStopCriterionTest.cs" company="Math.NET">
// Math.NET Numerics, part of the Math.NET Project
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
//
// Copyright (c) 2009-2013 Math.NET
// Copyright (c) 2009-2014 Math.NET
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,13 +34,13 @@ using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterium
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterion
{
/// <summary>
/// Residual stop criterium tests.
/// Residual stop criterion tests.
/// </summary>
[TestFixture, Category("LASolver")]
public sealed class ResidualStopCriteriumTest
public sealed class ResidualStopCriterionTest
{
/// <summary>
/// Create with negative maximum throws <c>ArgumentOutOfRangeException</c>.
@ -48,7 +48,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void CreateWithNegativeMaximumThrowsArgumentOutOfRangeException()
{
Assert.That(() => new ResidualStopCriterium<float>(-0.1f), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new ResidualStopCriterion<float>(-0.1f), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -57,7 +57,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{
Assert.That(() => new ResidualStopCriterium<float>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
Assert.That(() => new ResidualStopCriterion<float>(-1), Throws.TypeOf<ArgumentOutOfRangeException>());
}
/// <summary>
@ -66,10 +66,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void Create()
{
var criterium = new ResidualStopCriterium<float>(1e-6f, 50);
var criterion = new ResidualStopCriterion<float>(1e-6f, 50);
Assert.AreEqual(1e-6f, criterium.Maximum, "Incorrect maximum");
Assert.AreEqual(50, criterium.MinimumIterationsBelowMaximum, "Incorrect iteration count");
Assert.AreEqual(1e-6f, criterion.Maximum, "Incorrect maximum");
Assert.AreEqual(50, criterion.MinimumIterationsBelowMaximum, "Incorrect iteration count");
}
/// <summary>
@ -78,9 +78,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{
var criterium = new ResidualStopCriterium<float>(1e-6f, 50);
var criterion = new ResidualStopCriterion<float>(1e-6f, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
-1,
Vector<float>.Build.Dense(3, 4),
Vector<float>.Build.Dense(3, 5),
@ -93,9 +93,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithNonMatchingSolutionVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<float>(1e-6f, 50);
var criterion = new ResidualStopCriterion<float>(1e-6f, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<float>.Build.Dense(4, 4),
Vector<float>.Build.Dense(3, 4),
@ -108,9 +108,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithNonMatchingSourceVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<float>(1e-6f, 50);
var criterion = new ResidualStopCriterion<float>(1e-6f, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<float>.Build.Dense(3, 4),
Vector<float>.Build.Dense(4, 4),
@ -123,9 +123,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithNonMatchingResidualVectorThrowsArgumentException()
{
var criterium = new ResidualStopCriterium<float>(1e-6f, 50);
var criterion = new ResidualStopCriterion<float>(1e-6f, 50);
Assert.That(() => criterium.DetermineStatus(
Assert.That(() => criterion.DetermineStatus(
1,
Vector<float>.Build.Dense(3, 4),
Vector<float>.Build.Dense(3, 4),
@ -138,13 +138,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithSourceNaN()
{
var criterium = new ResidualStopCriterium<float>(1e-3f, 10);
var criterion = new ResidualStopCriterion<float>(1e-3f, 10);
var solution = new DenseVector(new[] {1.0f, 1.0f, 2.0f});
var source = new DenseVector(new[] {1.0f, 1.0f, float.NaN});
var residual = new DenseVector(new[] {1000.0f, 1000.0f, 2001.0f});
var solution = new DenseVector(new[] { 1.0f, 1.0f, 2.0f });
var source = new DenseVector(new[] { 1.0f, 1.0f, float.NaN });
var residual = new DenseVector(new[] { 1000.0f, 1000.0f, 2001.0f });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Diverged, status, "Should be diverged");
}
@ -154,13 +154,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithResidualNaN()
{
var criterium = new ResidualStopCriterium<float>(1e-3f, 10);
var criterion = new ResidualStopCriterion<float>(1e-3f, 10);
var solution = new DenseVector(new[] {1.0f, 1.0f, 2.0f});
var source = new DenseVector(new[] {1.0f, 1.0f, 2.0f});
var residual = new DenseVector(new[] {1000.0f, float.NaN, 2001.0f});
var solution = new DenseVector(new[] { 1.0f, 1.0f, 2.0f });
var source = new DenseVector(new[] { 1.0f, 1.0f, 2.0f });
var residual = new DenseVector(new[] { 1000.0f, float.NaN, 2001.0f });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Diverged, status, "Should be diverged");
}
@ -170,13 +170,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatusWithConvergenceAtFirstIteration()
{
var criterium = new ResidualStopCriterium<float>(1e-6);
var criterion = new ResidualStopCriterion<float>(1e-6);
var solution = new DenseVector(new[] {1.0f, 1.0f, 1.0f});
var source = new DenseVector(new[] {1.0f, 1.0f, 1.0f});
var residual = new DenseVector(new[] {0.0f, 0.0f, 0.0f});
var solution = new DenseVector(new[] { 1.0f, 1.0f, 1.0f });
var source = new DenseVector(new[] { 1.0f, 1.0f, 1.0f });
var residual = new DenseVector(new[] { 0.0f, 0.0f, 0.0f });
var status = criterium.DetermineStatus(0, solution, source, residual);
var status = criterion.DetermineStatus(0, solution, source, residual);
Assert.AreEqual(IterationStatus.Converged, status, "Should be done");
}
@ -186,21 +186,21 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void DetermineStatus()
{
var criterium = new ResidualStopCriterium<float>(1e-3f, 10);
var criterion = new ResidualStopCriterion<float>(1e-3f, 10);
// the solution vector isn't actually being used so ...
var solution = new DenseVector(new[] {float.NaN, float.NaN, float.NaN});
var solution = new DenseVector(new[] { float.NaN, float.NaN, float.NaN });
// Set the source values
var source = new DenseVector(new[] {1.000f, 1.000f, 2.001f});
var source = new DenseVector(new[] { 1.000f, 1.000f, 2.001f });
// Set the residual values
var residual = new DenseVector(new[] {0.001f, 0.001f, 0.002f});
var residual = new DenseVector(new[] { 0.001f, 0.001f, 0.002f });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should still be running");
var status2 = criterium.DetermineStatus(16, solution, source, residual);
var status2 = criterion.DetermineStatus(16, solution, source, residual);
Assert.AreEqual(IterationStatus.Converged, status2, "Should be done");
}
@ -210,36 +210,36 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test]
public void ResetCalculationState()
{
var criterium = new ResidualStopCriterium<float>(1e-3f, 10);
var criterion = new ResidualStopCriterion<float>(1e-3f, 10);
var solution = new DenseVector(new[] {0.001f, 0.001f, 0.002f});
var source = new DenseVector(new[] {0.001f, 0.001f, 0.002f});
var residual = new DenseVector(new[] {1.000f, 1.000f, 2.001f});
var solution = new DenseVector(new[] { 0.001f, 0.001f, 0.002f });
var source = new DenseVector(new[] { 0.001f, 0.001f, 0.002f });
var residual = new DenseVector(new[] { 1.000f, 1.000f, 2.001f });
var status = criterium.DetermineStatus(5, solution, source, residual);
var status = criterion.DetermineStatus(5, solution, source, residual);
Assert.AreEqual(IterationStatus.Continue, status, "Should be running");
criterium.Reset();
Assert.AreEqual(IterationStatus.Continue, criterium.Status, "Should not have started");
criterion.Reset();
Assert.AreEqual(IterationStatus.Continue, criterion.Status, "Should not have started");
}
/// <summary>
/// Can clone stop criterium.
/// Can clone stop criterion.
/// </summary>
[Test]
public void Clone()
{
var criterium = new ResidualStopCriterium<float>(1e-3f, 10);
var criterion = new ResidualStopCriterion<float>(1e-3f, 10);
var clone = criterium.Clone();
Assert.IsInstanceOf(typeof(ResidualStopCriterium<float>), clone, "Wrong criterium type");
var clone = criterion.Clone();
Assert.IsInstanceOf(typeof (ResidualStopCriterion<float>), clone, "Wrong criterion type");
var clonedCriterium = clone as ResidualStopCriterium<float>;
Assert.IsNotNull(clonedCriterium);
var clonedCriterion = clone as ResidualStopCriterion<float>;
Assert.IsNotNull(clonedCriterion);
// ReSharper disable PossibleNullReferenceException
Assert.AreEqual(criterium.Maximum, clonedCriterium.Maximum, "Clone failed");
Assert.AreEqual(criterium.MinimumIterationsBelowMaximum, clonedCriterium.MinimumIterationsBelowMaximum, "Clone failed");
Assert.AreEqual(criterion.Maximum, clonedCriterion.Maximum, "Clone failed");
Assert.AreEqual(criterion.MinimumIterationsBelowMaximum, clonedCriterion.MinimumIterationsBelowMaximum, "Clone failed");
// ReSharper restore PossibleNullReferenceException
}

33
src/UnitTests/UnitTests.csproj

@ -190,10 +190,10 @@
<Compile Include="LinearAlgebraTests\Complex32\Solvers\Preconditioners\IncompleteLUTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\Preconditioners\PreConditionerTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\Preconditioners\UnitPreconditionerTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\StopCriterium\DivergenceStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\StopCriterium\FailureStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\StopCriterium\IterationCountStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\StopCriterium\ResidualStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\StopCriterion\DivergenceStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\StopCriterion\FailureStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\StopCriterion\IterationCountStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\Solvers\StopCriterion\ResidualStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex32\SparseMatrixTests.cs" />
<Compile Include="LinearAlgebraTests\Complex32\SparseVectorArithmeticTheory.cs" />
<Compile Include="LinearAlgebraTests\Complex32\SparseVectorTest.cs" />
@ -239,10 +239,10 @@
<Compile Include="LinearAlgebraTests\Complex\Solvers\Preconditioners\IncompleteLUTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\Preconditioners\PreConditionerTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\Preconditioners\UnitPreconditionerTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\StopCriterium\DivergenceStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\StopCriterium\FailureStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\StopCriterium\IterationCountStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\StopCriterium\ResidualStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\StopCriterion\DivergenceStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\StopCriterion\FailureStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\StopCriterion\IterationCountStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\Solvers\StopCriterion\ResidualStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Complex\SparseMatrixTests.cs" />
<Compile Include="LinearAlgebraTests\Complex\SparseVectorArithmeticTheory.cs" />
<Compile Include="LinearAlgebraTests\Complex\SparseVectorTest.cs" />
@ -257,6 +257,10 @@
<Compile Include="LinearAlgebraTests\Complex\VectorTests.Norm.cs" />
<Compile Include="LinearAlgebraTests\Double\MatrixStructureTheory.cs" />
<Compile Include="LinearAlgebraTests\Double\ReturnTypeTests.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\StopCriterion\DivergenceStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\StopCriterion\FailureStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\StopCriterion\IterationCountStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\StopCriterion\ResidualStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Double\SparseVectorArithmeticTheory.cs" />
<Compile Include="LinearAlgebraTests\Double\DenseMatrixTests.cs" />
<Compile Include="LinearAlgebraTests\Double\DenseVectorTest.TextHandling.cs" />
@ -289,10 +293,6 @@
<Compile Include="LinearAlgebraTests\Double\Solvers\Preconditioners\IncompleteLUTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\Preconditioners\PreConditionerTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\Preconditioners\UnitPreconditionerTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\StopCriterium\DivergenceStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\StopCriterium\FailureStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\StopCriterium\IterationCountStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Double\Solvers\StopCriterium\ResidualStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Double\SparseMatrixTests.cs" />
<Compile Include="LinearAlgebraTests\Double\SparseVectorTest.cs" />
<Compile Include="LinearAlgebraTests\Double\SparseVectorTest.TextHandling.cs" />
@ -339,10 +339,10 @@
<Compile Include="LinearAlgebraTests\Single\Solvers\Preconditioners\IncompleteLUTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\Preconditioners\PreConditionerTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\Preconditioners\UnitPreconditionerTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\StopCriterium\DivergenceStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\StopCriterium\FailureStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\StopCriterium\IterationCountStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\StopCriterium\ResidualStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\StopCriterion\DivergenceStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\StopCriterion\FailureStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\StopCriterion\IterationCountStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Single\Solvers\StopCriterion\ResidualStopCriteriumTest.cs" />
<Compile Include="LinearAlgebraTests\Single\SparseMatrixTests.cs" />
<Compile Include="LinearAlgebraTests\Single\SparseVectorArithmeticTheory.cs" />
<Compile Include="LinearAlgebraTests\Single\SparseVectorTest.cs" />
@ -687,6 +687,7 @@
<ItemGroup>
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
</Project>
Loading…
Cancel
Save