Browse Source

LA: make IterationCountStopCriterium generic & shared

optimization-1
Christoph Ruegg 13 years ago
parent
commit
d1cbfb5487
  1. 2
      src/Examples/LinearAlgebra/IterativeSolvers/BiCgStabSolver.cs
  2. 2
      src/Examples/LinearAlgebra/IterativeSolvers/CompositeSolverExample.cs
  3. 2
      src/Examples/LinearAlgebra/IterativeSolvers/GpBiCgSolver.cs
  4. 2
      src/Examples/LinearAlgebra/IterativeSolvers/MlkBiCgStabSolver.cs
  5. 2
      src/Examples/LinearAlgebra/IterativeSolvers/TFQMRSolver.cs
  6. 8
      src/Numerics/LinearAlgebra/Complex/Solvers/Iterator.cs
  7. 222
      src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/IterationCountStopCriterium.cs
  8. 2
      src/Numerics/LinearAlgebra/Complex32/Solvers/Iterator.cs
  9. 217
      src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/IterationCountStopCriterium.cs
  10. 8
      src/Numerics/LinearAlgebra/Double/Solvers/Iterator.cs
  11. 215
      src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/IterationCountStopCriterium.cs
  12. 8
      src/Numerics/LinearAlgebra/Single/Solvers/Iterator.cs
  13. 28
      src/Numerics/LinearAlgebra/Solvers/StopCriterium/IterationCountStopCriterium.cs
  14. 5
      src/Numerics/Numerics.csproj
  15. 10
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/BiCgStabTest.cs
  16. 10
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/GpBiCgTest.cs
  17. 10
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/MlkBiCgStabTest.cs
  18. 10
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/TFQMRTest.cs
  19. 24
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs
  20. 26
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs
  21. 10
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/BiCgStabTest.cs
  22. 8
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/GpBiCgTest.cs
  23. 12
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/MlkBiCgStabTest.cs
  24. 12
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/TFQMRTest.cs
  25. 24
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs
  26. 26
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs
  27. 12
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/BiCgStabTest.cs
  28. 10
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/GpBiCgTest.cs
  29. 12
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/MlkBiCgStabTest.cs
  30. 12
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/TFQMRTest.cs
  31. 28
      src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs
  32. 24
      src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs
  33. 12
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/BiCgStabTest.cs
  34. 12
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/GpBiCgTest.cs
  35. 12
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/MlkBiCgStabTest.cs
  36. 12
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/TFQMRTest.cs
  37. 28
      src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs
  38. 24
      src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs

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

@ -96,7 +96,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
// - ResidualStopCriterium: monitors residuals if calculation is considered converged; // - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation // Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium(1000); var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged // Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium(1e-10); var residualStopCriterium = new ResidualStopCriterium(1e-10);

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

@ -95,7 +95,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
// - ResidualStopCriterium: monitors residuals if calculation is considered converged; // - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation // Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium(1000); var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged // Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium(1e-10); var residualStopCriterium = new ResidualStopCriterium(1e-10);

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

@ -94,7 +94,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
// - ResidualStopCriterium: monitors residuals if calculation is considered converged; // - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation // Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium(1000); var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged // Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium(1e-10); var residualStopCriterium = new ResidualStopCriterium(1e-10);

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

@ -95,7 +95,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
// - ResidualStopCriterium: monitors residuals if calculation is considered converged; // - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation // Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium(1000); var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged // Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium(1e-10); var residualStopCriterium = new ResidualStopCriterium(1e-10);

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

@ -95,7 +95,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
// - ResidualStopCriterium: monitors residuals if calculation is considered converged; // - ResidualStopCriterium: monitors residuals if calculation is considered converged;
// Stop calculation if 1000 iterations reached during calculation // Stop calculation if 1000 iterations reached during calculation
var iterationCountStopCriterium = new IterationCountStopCriterium(1000); var iterationCountStopCriterium = new IterationCountStopCriterium<double>(1000);
// Stop calculation if residuals are below 1E-10 --> the calculation is considered converged // Stop calculation if residuals are below 1E-10 --> the calculation is considered converged
var residualStopCriterium = new ResidualStopCriterium(1e-10); var residualStopCriterium = new ResidualStopCriterium(1e-10);

8
src/Numerics/LinearAlgebra/Complex/Solvers/Iterator.cs

@ -28,13 +28,13 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using System.Collections.Generic;
using System.Linq;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
using System;
using System.Collections.Generic;
using System.Linq;
namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
{ {
@ -64,7 +64,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
var iterator = new Iterator(); var iterator = new Iterator();
iterator.Add(new FailureStopCriterium()); iterator.Add(new FailureStopCriterium());
iterator.Add(new DivergenceStopCriterium()); iterator.Add(new DivergenceStopCriterium());
iterator.Add(new IterationCountStopCriterium()); iterator.Add(new IterationCountStopCriterium<Complex>());
iterator.Add(new ResidualStopCriterium()); iterator.Add(new ResidualStopCriterium());
return iterator; return iterator;

222
src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/IterationCountStopCriterium.cs

@ -1,222 +0,0 @@
// <copyright file="IterationCountStopCriterium.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
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using System;
using System.Diagnostics;
namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
{
#if NOSYSNUMERICS
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors the numbers of iteration
/// steps as stop criterium.
/// </summary>
public sealed class IterationCountStopCriterium : IIterationStopCriterium<Complex>
{
/// <summary>
/// The default value for the maximum number of iterations the process is allowed
/// to perform.
/// </summary>
public const int DefaultMaximumNumberOfIterations = 1000;
/// <summary>
/// The default status.
/// </summary>
private static readonly ICalculationStatus DefaultStatus = new CalculationIndetermined();
/// <summary>
/// The maximum number of iterations the calculation is allowed to perform.
/// </summary>
private int _maximumNumberOfIterations;
/// <summary>
/// The status of the calculation
/// </summary>
private ICalculationStatus _status = DefaultStatus;
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium"/> class with the default maximum
/// number of iterations.
/// </summary>
public IterationCountStopCriterium() : this(DefaultMaximumNumberOfIterations)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium"/> 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)
{
if (maximumNumberOfIterations < 1)
{
throw new ArgumentOutOfRangeException("maximumNumberOfIterations");
}
_maximumNumberOfIterations = maximumNumberOfIterations;
}
/// <summary>
/// Gets or sets the maximum number of iterations the calculation is allowed to perform.
/// </summary>
/// <exception cref="ArgumentOutOfRangeException">Thrown if the <c>Maximum</c> is set to a negative value.</exception>
public int MaximumNumberOfIterations
{
[DebuggerStepThrough]
get
{
return _maximumNumberOfIterations;
}
[DebuggerStepThrough]
set
{
if (value < 1)
{
throw new ArgumentOutOfRangeException("value");
}
_maximumNumberOfIterations = value;
}
}
/// <summary>
/// Returns the maximum number of iterations to the default.
/// </summary>
public void ResetMaximumNumberOfIterationsToDefault()
{
_maximumNumberOfIterations = DefaultMaximumNumberOfIterations;
}
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IterationCountStopCriterium"/>. 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>
/// <param name="sourceVector">The right hand side vector.</param>
/// <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
/// calculation has moved forwards at least one step.
/// </remarks>
public void DetermineStatus(int iterationNumber, Vector<Complex> solutionVector, Vector<Complex> sourceVector, Vector<Complex> residualVector)
{
if (iterationNumber < 0)
{
throw new ArgumentOutOfRangeException("iterationNumber");
}
if (iterationNumber >= _maximumNumberOfIterations)
{
SetStatusToFinished();
}
else
{
SetStatusToRunning();
}
}
/// <summary>
/// Set status to <see cref="CalculationFailure"/>
/// </summary>
private void SetStatusToFinished()
{
if (!(_status is CalculationStoppedWithoutConvergence))
{
_status = new CalculationStoppedWithoutConvergence();
}
}
/// <summary>
/// Set status to <see cref="CalculationRunning"/>
/// </summary>
private void SetStatusToRunning()
{
if (!(_status is CalculationRunning))
{
_status = new CalculationRunning();
}
}
/// <summary>
/// Gets the current calculation status.
/// </summary>
public ICalculationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
}
/// <summary>
/// Resets the <see cref="IterationCountStopCriterium"/> to the pre-calculation state.
/// </summary>
public void ResetToPrecalculationState()
{
_status = DefaultStatus;
}
/// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IterationCountStopCriterium"/> monitors.
/// </summary>
/// <value>Returns <see cref="StopLevel"/>.</value>
public StopLevel StopLevel
{
[DebuggerStepThrough]
get
{
return StopLevel.StoppedWithoutConvergence;
}
}
/// <summary>
/// Clones the current <see cref="IterationCountStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium"/> class.</returns>
public IIterationStopCriterium<Complex> Clone()
{
return new IterationCountStopCriterium(_maximumNumberOfIterations);
}
}
}

2
src/Numerics/LinearAlgebra/Complex32/Solvers/Iterator.cs

@ -59,7 +59,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
var iterator = new Iterator(); var iterator = new Iterator();
iterator.Add(new FailureStopCriterium()); iterator.Add(new FailureStopCriterium());
iterator.Add(new DivergenceStopCriterium()); iterator.Add(new DivergenceStopCriterium());
iterator.Add(new IterationCountStopCriterium()); iterator.Add(new IterationCountStopCriterium<Complex32>());
iterator.Add(new ResidualStopCriterium()); iterator.Add(new ResidualStopCriterium());
return iterator; return iterator;

217
src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/IterationCountStopCriterium.cs

@ -1,217 +0,0 @@
// <copyright file="IterationCountStopCriterium.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
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using System.Diagnostics;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
{
using Numerics;
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors the numbers of iteration
/// steps as stop criterium.
/// </summary>
public sealed class IterationCountStopCriterium : IIterationStopCriterium<Complex32>
{
/// <summary>
/// The default value for the maximum number of iterations the process is allowed
/// to perform.
/// </summary>
public const int DefaultMaximumNumberOfIterations = 1000;
/// <summary>
/// The default status.
/// </summary>
private static readonly ICalculationStatus DefaultStatus = new CalculationIndetermined();
/// <summary>
/// The maximum number of iterations the calculation is allowed to perform.
/// </summary>
private int _maximumNumberOfIterations;
/// <summary>
/// The status of the calculation
/// </summary>
private ICalculationStatus _status = DefaultStatus;
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium"/> class with the default maximum
/// number of iterations.
/// </summary>
public IterationCountStopCriterium() : this(DefaultMaximumNumberOfIterations)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium"/> 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)
{
if (maximumNumberOfIterations < 1)
{
throw new ArgumentOutOfRangeException("maximumNumberOfIterations");
}
_maximumNumberOfIterations = maximumNumberOfIterations;
}
/// <summary>
/// Gets or sets the maximum number of iterations the calculation is allowed to perform.
/// </summary>
/// <exception cref="ArgumentOutOfRangeException">Thrown if the <c>Maximum</c> is set to a negative value.</exception>
public int MaximumNumberOfIterations
{
[DebuggerStepThrough]
get
{
return _maximumNumberOfIterations;
}
[DebuggerStepThrough]
set
{
if (value < 1)
{
throw new ArgumentOutOfRangeException("value");
}
_maximumNumberOfIterations = value;
}
}
/// <summary>
/// Returns the maximum number of iterations to the default.
/// </summary>
public void ResetMaximumNumberOfIterationsToDefault()
{
_maximumNumberOfIterations = DefaultMaximumNumberOfIterations;
}
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IterationCountStopCriterium"/>. 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>
/// <param name="sourceVector">The right hand side vector.</param>
/// <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
/// calculation has moved forwards at least one step.
/// </remarks>
public void DetermineStatus(int iterationNumber, Vector<Complex32> solutionVector, Vector<Complex32> sourceVector, Vector<Complex32> residualVector)
{
if (iterationNumber < 0)
{
throw new ArgumentOutOfRangeException("iterationNumber");
}
if (iterationNumber >= _maximumNumberOfIterations)
{
SetStatusToFinished();
}
else
{
SetStatusToRunning();
}
}
/// <summary>
/// Set status to <see cref="CalculationFailure"/>
/// </summary>
private void SetStatusToFinished()
{
if (!(_status is CalculationStoppedWithoutConvergence))
{
_status = new CalculationStoppedWithoutConvergence();
}
}
/// <summary>
/// Set status to <see cref="CalculationRunning"/>
/// </summary>
private void SetStatusToRunning()
{
if (!(_status is CalculationRunning))
{
_status = new CalculationRunning();
}
}
/// <summary>
/// Gets the current calculation status.
/// </summary>
public ICalculationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
}
/// <summary>
/// Resets the <see cref="IterationCountStopCriterium"/> to the pre-calculation state.
/// </summary>
public void ResetToPrecalculationState()
{
_status = DefaultStatus;
}
/// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IterationCountStopCriterium"/> monitors.
/// </summary>
/// <value>Returns <see cref="StopLevel"/>.</value>
public StopLevel StopLevel
{
[DebuggerStepThrough]
get
{
return StopLevel.StoppedWithoutConvergence;
}
}
/// <summary>
/// Clones the current <see cref="IterationCountStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium"/> class.</returns>
public IIterationStopCriterium<Complex32> Clone()
{
return new IterationCountStopCriterium(_maximumNumberOfIterations);
}
}
}

8
src/Numerics/LinearAlgebra/Double/Solvers/Iterator.cs

@ -28,13 +28,13 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using System.Collections.Generic;
using System.Linq;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
using System;
using System.Collections.Generic;
using System.Linq;
namespace MathNet.Numerics.LinearAlgebra.Double.Solvers namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
{ {
@ -57,7 +57,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
var iterator = new Iterator(); var iterator = new Iterator();
iterator.Add(new FailureStopCriterium()); iterator.Add(new FailureStopCriterium());
iterator.Add(new DivergenceStopCriterium()); iterator.Add(new DivergenceStopCriterium());
iterator.Add(new IterationCountStopCriterium()); iterator.Add(new IterationCountStopCriterium<double>());
iterator.Add(new ResidualStopCriterium()); iterator.Add(new ResidualStopCriterium());
return iterator; return iterator;

215
src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/IterationCountStopCriterium.cs

@ -1,215 +0,0 @@
// <copyright file="IterationCountStopCriterium.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
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using System.Diagnostics;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors the numbers of iteration
/// steps as stop criterium.
/// </summary>
public sealed class IterationCountStopCriterium : IIterationStopCriterium<double>
{
/// <summary>
/// The default value for the maximum number of iterations the process is allowed
/// to perform.
/// </summary>
public const int DefaultMaximumNumberOfIterations = 1000;
/// <summary>
/// The default status.
/// </summary>
private static readonly ICalculationStatus DefaultStatus = new CalculationIndetermined();
/// <summary>
/// The maximum number of iterations the calculation is allowed to perform.
/// </summary>
private int _maximumNumberOfIterations;
/// <summary>
/// The status of the calculation
/// </summary>
private ICalculationStatus _status = DefaultStatus;
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium"/> class with the default maximum
/// number of iterations.
/// </summary>
public IterationCountStopCriterium() : this(DefaultMaximumNumberOfIterations)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium"/> 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)
{
if (maximumNumberOfIterations < 1)
{
throw new ArgumentOutOfRangeException("maximumNumberOfIterations");
}
_maximumNumberOfIterations = maximumNumberOfIterations;
}
/// <summary>
/// Gets or sets the maximum number of iterations the calculation is allowed to perform.
/// </summary>
/// <exception cref="ArgumentOutOfRangeException">Thrown if the <c>Maximum</c> is set to a negative value.</exception>
public int MaximumNumberOfIterations
{
[DebuggerStepThrough]
get
{
return _maximumNumberOfIterations;
}
[DebuggerStepThrough]
set
{
if (value < 1)
{
throw new ArgumentOutOfRangeException("value");
}
_maximumNumberOfIterations = value;
}
}
/// <summary>
/// Returns the maximum number of iterations to the default.
/// </summary>
public void ResetMaximumNumberOfIterationsToDefault()
{
_maximumNumberOfIterations = DefaultMaximumNumberOfIterations;
}
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IterationCountStopCriterium"/>. 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>
/// <param name="sourceVector">The right hand side vector.</param>
/// <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
/// calculation has moved forwards at least one step.
/// </remarks>
public void DetermineStatus(int iterationNumber, Vector<double> solutionVector, Vector<double> sourceVector, Vector<double> residualVector)
{
if (iterationNumber < 0)
{
throw new ArgumentOutOfRangeException("iterationNumber");
}
if (iterationNumber >= _maximumNumberOfIterations)
{
SetStatusToFinished();
}
else
{
SetStatusToRunning();
}
}
/// <summary>
/// Set status to <see cref="CalculationFailure"/>
/// </summary>
private void SetStatusToFinished()
{
if (!(_status is CalculationStoppedWithoutConvergence))
{
_status = new CalculationStoppedWithoutConvergence();
}
}
/// <summary>
/// Set status to <see cref="CalculationRunning"/>
/// </summary>
private void SetStatusToRunning()
{
if (!(_status is CalculationRunning))
{
_status = new CalculationRunning();
}
}
/// <summary>
/// Gets the current calculation status.
/// </summary>
public ICalculationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
}
/// <summary>
/// Resets the <see cref="IterationCountStopCriterium"/> to the pre-calculation state.
/// </summary>
public void ResetToPrecalculationState()
{
_status = DefaultStatus;
}
/// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IterationCountStopCriterium"/> monitors.
/// </summary>
/// <value>Returns <see cref="StopLevel"/>.</value>
public StopLevel StopLevel
{
[DebuggerStepThrough]
get
{
return StopLevel.StoppedWithoutConvergence;
}
}
/// <summary>
/// Clones the current <see cref="IterationCountStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium"/> class.</returns>
public IIterationStopCriterium<double> Clone()
{
return new IterationCountStopCriterium(_maximumNumberOfIterations);
}
}
}

8
src/Numerics/LinearAlgebra/Single/Solvers/Iterator.cs

@ -28,13 +28,13 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using System.Collections.Generic;
using System.Linq;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
using System;
using System.Collections.Generic;
using System.Linq;
namespace MathNet.Numerics.LinearAlgebra.Single.Solvers namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
{ {
@ -57,7 +57,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
var iterator = new Iterator(); var iterator = new Iterator();
iterator.Add(new FailureStopCriterium()); iterator.Add(new FailureStopCriterium());
iterator.Add(new DivergenceStopCriterium()); iterator.Add(new DivergenceStopCriterium());
iterator.Add(new IterationCountStopCriterium()); iterator.Add(new IterationCountStopCriterium<float>());
iterator.Add(new ResidualStopCriterium()); iterator.Add(new ResidualStopCriterium());
return iterator; return iterator;

28
src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/IterationCountStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/StopCriterium/IterationCountStopCriterium.cs

@ -28,18 +28,17 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium namespace MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium
{ {
/// <summary> /// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors the numbers of iteration /// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors the numbers of iteration
/// steps as stop criterium. /// steps as stop criterium.
/// </summary> /// </summary>
public sealed class IterationCountStopCriterium : IIterationStopCriterium<float> public sealed class IterationCountStopCriterium<T> : IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
{ {
/// <summary> /// <summary>
/// The default value for the maximum number of iterations the process is allowed /// The default value for the maximum number of iterations the process is allowed
@ -63,7 +62,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
private ICalculationStatus _status = DefaultStatus; private ICalculationStatus _status = DefaultStatus;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium"/> class with the default maximum /// Initializes a new instance of the <see cref="IterationCountStopCriterium{T}"/> class with the default maximum
/// number of iterations. /// number of iterations.
/// </summary> /// </summary>
public IterationCountStopCriterium() : this(DefaultMaximumNumberOfIterations) public IterationCountStopCriterium() : this(DefaultMaximumNumberOfIterations)
@ -71,7 +70,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
} }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="IterationCountStopCriterium"/> class with the specified maximum /// Initializes a new instance of the <see cref="IterationCountStopCriterium{T}"/> class with the specified maximum
/// number of iterations. /// number of iterations.
/// </summary> /// </summary>
/// <param name="maximumNumberOfIterations">The maximum number of iterations the calculation is allowed to perform.</param> /// <param name="maximumNumberOfIterations">The maximum number of iterations the calculation is allowed to perform.</param>
@ -119,7 +118,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// <summary> /// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored /// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IterationCountStopCriterium"/>. Result is set into <c>Status</c> field. /// by the current <see cref="IterationCountStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// </summary> /// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param> /// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param> /// <param name="solutionVector">The vector containing the current solution values.</param>
@ -130,7 +129,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// 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. /// calculation has moved forwards at least one step.
/// </remarks> /// </remarks>
public void DetermineStatus(int iterationNumber, Vector<float> solutionVector, Vector<float> sourceVector, Vector<float> residualVector) public void DetermineStatus(int iterationNumber, Vector<T> solutionVector, Vector<T> sourceVector, Vector<T> residualVector)
{ {
if (iterationNumber < 0) if (iterationNumber < 0)
{ {
@ -182,7 +181,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
} }
/// <summary> /// <summary>
/// Resets the <see cref="IterationCountStopCriterium"/> to the pre-calculation state. /// Resets the <see cref="IterationCountStopCriterium{T}"/> to the pre-calculation state.
/// </summary> /// </summary>
public void ResetToPrecalculationState() public void ResetToPrecalculationState()
{ {
@ -191,7 +190,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// <summary> /// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this /// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IterationCountStopCriterium"/> monitors. /// <see cref="IterationCountStopCriterium{T}"/> monitors.
/// </summary> /// </summary>
/// <value>Returns <see cref="StopLevel"/>.</value> /// <value>Returns <see cref="StopLevel"/>.</value>
public StopLevel StopLevel public StopLevel StopLevel
@ -204,13 +203,12 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
} }
/// <summary> /// <summary>
/// Clones the current <see cref="IterationCountStopCriterium"/> and its settings. /// Clones the current <see cref="IterationCountStopCriterium{T}"/> and its settings.
/// </summary> /// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium"/> class.</returns> /// <returns>A new instance of the <see cref="IterationCountStopCriterium{T}"/> class.</returns>
public IIterationStopCriterium<float> Clone() public IIterationStopCriterium<T> Clone()
{ {
return new IterationCountStopCriterium(_maximumNumberOfIterations); return new IterationCountStopCriterium<T>(_maximumNumberOfIterations);
} }
} }
} }

5
src/Numerics/Numerics.csproj

@ -122,7 +122,7 @@
<Compile Include="Distributions\Wishart.cs" /> <Compile Include="Distributions\Wishart.cs" />
<Compile Include="Distributions\Zipf.cs" /> <Compile Include="Distributions\Zipf.cs" />
<Compile Include="LinearAlgebra\Builder.cs" /> <Compile Include="LinearAlgebra\Builder.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\StopCriterium\IterationCountStopCriterium.cs" /> <Compile Include="LinearAlgebra\Solvers\StopCriterium\IterationCountStopCriterium.cs" />
<Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Complex.cs" /> <Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Complex.cs" />
<Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Complex32.cs" /> <Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Complex32.cs" />
<Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Double.cs" /> <Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Double.cs" />
@ -258,7 +258,6 @@
<Compile Include="LinearAlgebra\Complex32\Solvers\Preconditioners\UnitPreconditioner.cs" /> <Compile Include="LinearAlgebra\Complex32\Solvers\Preconditioners\UnitPreconditioner.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\StopCriterium\DivergenceStopCriterium.cs" /> <Compile Include="LinearAlgebra\Complex32\Solvers\StopCriterium\DivergenceStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\StopCriterium\FailureStopCriterium.cs" /> <Compile Include="LinearAlgebra\Complex32\Solvers\StopCriterium\FailureStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\StopCriterium\IterationCountStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\StopCriterium\ResidualStopCriterium.cs" /> <Compile Include="LinearAlgebra\Complex32\Solvers\StopCriterium\ResidualStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex32\SparseVector.cs" /> <Compile Include="LinearAlgebra\Complex32\SparseVector.cs" />
<Compile Include="LinearAlgebra\Complex\Factorization\DenseGramSchmidt.cs" /> <Compile Include="LinearAlgebra\Complex\Factorization\DenseGramSchmidt.cs" />
@ -286,7 +285,6 @@
<Compile Include="LinearAlgebra\Complex\Solvers\Preconditioners\UnitPreconditioner.cs" /> <Compile Include="LinearAlgebra\Complex\Solvers\Preconditioners\UnitPreconditioner.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\StopCriterium\DivergenceStopCriterium.cs" /> <Compile Include="LinearAlgebra\Complex\Solvers\StopCriterium\DivergenceStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\StopCriterium\FailureStopCriterium.cs" /> <Compile Include="LinearAlgebra\Complex\Solvers\StopCriterium\FailureStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\StopCriterium\IterationCountStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\StopCriterium\ResidualStopCriterium.cs" /> <Compile Include="LinearAlgebra\Complex\Solvers\StopCriterium\ResidualStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex\SparseVector.cs" /> <Compile Include="LinearAlgebra\Complex\SparseVector.cs" />
<Compile Include="LinearAlgebra\Double\DenseVector.cs" /> <Compile Include="LinearAlgebra\Double\DenseVector.cs" />
@ -335,7 +333,6 @@
<Compile Include="LinearAlgebra\Single\Solvers\Preconditioners\UnitPreconditioner.cs" /> <Compile Include="LinearAlgebra\Single\Solvers\Preconditioners\UnitPreconditioner.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\DivergenceStopCriterium.cs" /> <Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\DivergenceStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\FailureStopCriterium.cs" /> <Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\FailureStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\IterationCountStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\ResidualStopCriterium.cs" /> <Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\ResidualStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\SparseMatrix.cs" /> <Compile Include="LinearAlgebra\Single\SparseMatrix.cs" />
<Compile Include="LinearAlgebra\Single\SparseVector.cs" /> <Compile Include="LinearAlgebra\Single\SparseVector.cs" />

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

@ -98,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -143,7 +143,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -221,7 +221,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -262,7 +262,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new BiCgStab(monitor); var solver = new BiCgStab(monitor);
@ -294,7 +294,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new BiCgStab(monitor); var solver = new BiCgStab(monitor);

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

@ -98,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -143,7 +143,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -264,7 +264,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new GpBiCg(monitor); var solver = new GpBiCg(monitor);
@ -296,7 +296,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new GpBiCg(monitor); var solver = new GpBiCg(monitor);

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

@ -98,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -144,7 +144,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -263,7 +263,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new MlkBiCgStab(monitor); var solver = new MlkBiCgStab(monitor);
@ -295,7 +295,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new MlkBiCgStab(monitor); var solver = new MlkBiCgStab(monitor);

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

@ -98,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -144,7 +144,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -263,7 +263,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new TFQMR(monitor); var solver = new TFQMR(monitor);
@ -295,7 +295,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator(new IIterationStopCriterium<Complex>[] var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new TFQMR(monitor); var solver = new TFQMR(monitor);

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

@ -103,7 +103,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -150,7 +150,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(); var iterator = new Iterator();
@ -180,7 +180,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -199,7 +199,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count");
@ -218,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -255,7 +255,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -277,7 +277,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -299,7 +299,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -321,7 +321,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -343,7 +343,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(1) new IterationCountStopCriterium<Complex>(1)
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -375,7 +375,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(1) new IterationCountStopCriterium<Complex>(1)
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -405,7 +405,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };

26
src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs

@ -28,14 +28,16 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex; using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterium namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCriterium
{ {
using System.Numerics;
/// <summary> /// <summary>
/// Iteration count stop criterium tests. /// Iteration count stop criterium tests.
/// </summary> /// </summary>
@ -48,7 +50,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException() public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{ {
Assert.Throws<ArgumentOutOfRangeException>(() => new IterationCountStopCriterium(-1)); Assert.Throws<ArgumentOutOfRangeException>(() => new IterationCountStopCriterium<Complex>(-1));
} }
/// <summary> /// <summary>
@ -57,7 +59,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void Create() public void Create()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
} }
@ -67,13 +69,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void ResetMaximumIterations() public void ResetMaximumIterations()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations"); Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
criterium.ResetMaximumNumberOfIterationsToDefault(); criterium.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset"); Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterium.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value"); Assert.AreEqual(IterationCountStopCriterium<Complex>.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value");
} }
/// <summary> /// <summary>
@ -82,7 +84,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException() public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3))); Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)));
@ -94,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void DetermineStatus() public void DetermineStatus()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)); criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3));
@ -110,7 +112,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void ResetCalculationState() public void ResetCalculationState()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)); criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3));
@ -126,14 +128,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void Clone() public void Clone()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum"); Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum");
var clone = criterium.Clone(); var clone = criterium.Clone();
Assert.IsInstanceOf(typeof (IterationCountStopCriterium), clone, "Wrong criterium type"); Assert.IsInstanceOf(typeof(IterationCountStopCriterium<Complex>), clone, "Wrong criterium type");
var clonedCriterium = clone as IterationCountStopCriterium; var clonedCriterium = clone as IterationCountStopCriterium<Complex>;
Assert.IsNotNull(clonedCriterium); Assert.IsNotNull(clonedCriterium);
// ReSharper disable PossibleNullReferenceException // ReSharper disable PossibleNullReferenceException

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

@ -98,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -143,7 +143,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -221,7 +221,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -266,7 +266,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)), new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
}); });
var solver = new BiCgStab(monitor); var solver = new BiCgStab(monitor);
@ -309,7 +309,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)) new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))
}); });
var solver = new BiCgStab(monitor); var solver = new BiCgStab(monitor);

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

@ -98,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -143,7 +143,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -264,7 +264,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)), new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
}); });
var solver = new GpBiCg(monitor); var solver = new GpBiCg(monitor);

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex32; using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers; using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative; using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative;
@ -35,7 +36,6 @@ using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterative
{ {
@ -98,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -144,7 +144,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -263,7 +263,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)), new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
}); });
var solver = new MlkBiCgStab(monitor); var solver = new MlkBiCgStab(monitor);
@ -306,7 +306,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)) new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))
}); });
var solver = new MlkBiCgStab(monitor); var solver = new MlkBiCgStab(monitor);

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex32; using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers; using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative; using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative;
@ -35,7 +36,6 @@ using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterative
{ {
@ -98,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -144,7 +144,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -263,7 +263,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)), new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
}); });
var solver = new TFQMR(monitor); var solver = new TFQMR(monitor);
@ -306,7 +306,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[] var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<Complex32>(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)) new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))
}); });
var solver = new TFQMR(monitor); var solver = new TFQMR(monitor);

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

@ -103,7 +103,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -150,7 +150,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(); var iterator = new Iterator();
@ -180,7 +180,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -199,7 +199,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count");
@ -218,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -255,7 +255,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -277,7 +277,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -299,7 +299,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -321,7 +321,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -343,7 +343,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(1) new IterationCountStopCriterium<Complex32>(1)
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -375,7 +375,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(1) new IterationCountStopCriterium<Complex32>(1)
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -405,7 +405,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };

26
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs

@ -28,14 +28,16 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex32; using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterium namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCriterium
{ {
using Numerics;
/// <summary> /// <summary>
/// Iteration count stop criterium tests. /// Iteration count stop criterium tests.
/// </summary> /// </summary>
@ -48,7 +50,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException() public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{ {
Assert.Throws<ArgumentOutOfRangeException>(() => new IterationCountStopCriterium(-1)); Assert.Throws<ArgumentOutOfRangeException>(() => new IterationCountStopCriterium<Complex32>(-1));
} }
/// <summary> /// <summary>
@ -57,7 +59,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void Create() public void Create()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
} }
@ -67,13 +69,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void ResetMaximumIterations() public void ResetMaximumIterations()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations"); Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
criterium.ResetMaximumNumberOfIterationsToDefault(); criterium.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset"); Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterium.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value"); Assert.AreEqual(IterationCountStopCriterium<Complex32>.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value");
} }
/// <summary> /// <summary>
@ -82,7 +84,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException() public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3))); Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)));
@ -94,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void DetermineStatus() public void DetermineStatus()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)); criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3));
@ -110,7 +112,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void ResetCalculationState() public void ResetCalculationState()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)); criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3));
@ -126,14 +128,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void Clone() public void Clone()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<Complex32>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum"); Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum");
var clone = criterium.Clone(); var clone = criterium.Clone();
Assert.IsInstanceOf(typeof (IterationCountStopCriterium), clone, "Wrong criterium type"); Assert.IsInstanceOf(typeof(IterationCountStopCriterium<Complex32>), clone, "Wrong criterium type");
var clonedCriterium = clone as IterationCountStopCriterium; var clonedCriterium = clone as IterationCountStopCriterium<Complex32>;
Assert.IsNotNull(clonedCriterium); Assert.IsNotNull(clonedCriterium);
// ReSharper disable PossibleNullReferenceException // ReSharper disable PossibleNullReferenceException

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Double; using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers; using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative; using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
@ -35,7 +36,6 @@ using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
{ {
@ -96,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -219,7 +219,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -264,7 +264,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new BiCgStab(monitor); var solver = new BiCgStab(monitor);
@ -295,7 +295,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium(1e-10) new ResidualStopCriterium(1e-10)
}); });
var solver = new BiCgStab(monitor); var solver = new BiCgStab(monitor);

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

@ -96,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -220,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -266,7 +266,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new GpBiCg(monitor); var solver = new GpBiCg(monitor);
@ -297,7 +297,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium(1e-10) new ResidualStopCriterium(1e-10)
}); });
var solver = new GpBiCg(monitor); var solver = new GpBiCg(monitor);

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Double; using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers; using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative; using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
@ -35,7 +36,6 @@ using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
{ {
@ -96,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -142,7 +142,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -220,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -265,7 +265,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new MlkBiCgStab(monitor); var solver = new MlkBiCgStab(monitor);
@ -296,7 +296,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium(1e-10) new ResidualStopCriterium(1e-10)
}); });
var solver = new MlkBiCgStab(monitor); var solver = new MlkBiCgStab(monitor);

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Double; using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers; using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative; using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
@ -35,7 +36,6 @@ using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
{ {
@ -96,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -142,7 +142,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -220,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -261,7 +261,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium(1e-10), new ResidualStopCriterium(1e-10),
}); });
var solver = new TFQMR(monitor); var solver = new TFQMR(monitor);
@ -292,7 +292,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<double>[] var monitor = new Iterator(new IIterationStopCriterium<double>[]
{ {
new IterationCountStopCriterium(1000), new IterationCountStopCriterium<double>(1000),
new ResidualStopCriterium(1e-10) new ResidualStopCriterium(1e-10)
}); });
var solver = new TFQMR(monitor); var solver = new TFQMR(monitor);

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

@ -28,14 +28,14 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra.Double; using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers; using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
using System.Collections.Generic;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
@ -101,7 +101,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -148,7 +148,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(); var iterator = new Iterator();
@ -178,7 +178,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -197,7 +197,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count");
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -253,7 +253,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -275,7 +275,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -297,7 +297,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -319,7 +319,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -341,7 +341,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(1) new IterationCountStopCriterium<double>(1)
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -373,7 +373,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(1) new IterationCountStopCriterium<double>(1)
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -403,7 +403,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };

24
src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs

@ -28,11 +28,11 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Double; using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterium namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCriterium
{ {
@ -48,7 +48,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException() public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{ {
Assert.Throws<ArgumentOutOfRangeException>(() => new IterationCountStopCriterium(-1)); Assert.Throws<ArgumentOutOfRangeException>(() => new IterationCountStopCriterium<double>(-1));
} }
/// <summary> /// <summary>
@ -57,7 +57,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void Create() public void Create()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
} }
@ -67,13 +67,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void ResetMaximumIterations() public void ResetMaximumIterations()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations"); Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
criterium.ResetMaximumNumberOfIterationsToDefault(); criterium.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset"); Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterium.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value"); Assert.AreEqual(IterationCountStopCriterium<double>.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value");
} }
/// <summary> /// <summary>
@ -82,7 +82,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException() public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3))); Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)));
@ -94,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void DetermineStatus() public void DetermineStatus()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)); criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3));
@ -110,7 +110,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void ResetCalculationState() public void ResetCalculationState()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)); criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3));
@ -126,14 +126,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void Clone() public void Clone()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<double>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum"); Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum");
var clone = criterium.Clone(); var clone = criterium.Clone();
Assert.IsInstanceOf(typeof (IterationCountStopCriterium), clone, "Wrong criterium type"); Assert.IsInstanceOf(typeof(IterationCountStopCriterium<double>), clone, "Wrong criterium type");
var clonedCriterium = clone as IterationCountStopCriterium; var clonedCriterium = clone as IterationCountStopCriterium<double>;
Assert.IsNotNull(clonedCriterium); Assert.IsNotNull(clonedCriterium);
// ReSharper disable PossibleNullReferenceException // ReSharper disable PossibleNullReferenceException

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Single; using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers; using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative; using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative;
@ -35,7 +36,6 @@ using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{ {
@ -96,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -219,7 +219,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -262,7 +262,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)), new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
}); });
var solver = new BiCgStab(monitor); var solver = new BiCgStab(monitor);
@ -303,7 +303,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)) new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))
}); });
var solver = new BiCgStab(monitor); var solver = new BiCgStab(monitor);

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Single; using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers; using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative; using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative;
@ -35,7 +36,6 @@ using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{ {
@ -96,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -220,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -264,7 +264,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)), new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
}); });
var solver = new GpBiCg(monitor); var solver = new GpBiCg(monitor);
@ -305,7 +305,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)) new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))
}); });
var solver = new GpBiCg(monitor); var solver = new GpBiCg(monitor);

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra; using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Single; using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers; using MathNet.Numerics.LinearAlgebra.Single.Solvers;
@ -36,7 +37,6 @@ using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{ {
@ -97,7 +97,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -143,7 +143,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -225,7 +225,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -281,7 +281,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)), new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
}); });
var solver = new MlkBiCgStab(monitor); var solver = new MlkBiCgStab(monitor);
@ -324,7 +324,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)) new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))
}); });
var solver = new MlkBiCgStab(monitor); var solver = new MlkBiCgStab(monitor);

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

@ -28,6 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Single; using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers; using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative; using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative;
@ -35,7 +36,6 @@ using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
{ {
@ -96,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -142,7 +142,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -220,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
// Create an iteration monitor which will keep track of iterative convergence // Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary), new ResidualStopCriterium(ConvergenceBoundary),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new FailureStopCriterium() new FailureStopCriterium()
@ -263,7 +263,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)), new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
}); });
var solver = new TFQMR(monitor); var solver = new TFQMR(monitor);
@ -304,7 +304,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var monitor = new Iterator(new IIterationStopCriterium<float>[] var monitor = new Iterator(new IIterationStopCriterium<float>[]
{ {
new IterationCountStopCriterium(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)) new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))
}); });
var solver = new TFQMR(monitor); var solver = new TFQMR(monitor);

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

@ -28,14 +28,14 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra.Single; using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers; using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium; using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
using System.Collections.Generic;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
@ -101,7 +101,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -148,7 +148,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(); var iterator = new Iterator();
@ -178,7 +178,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -197,7 +197,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count"); Assert.AreEqual(criteria.Count, iterator.NumberOfCriteria, "Incorrect criterium count");
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -253,7 +253,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -275,7 +275,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -297,7 +297,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -319,7 +319,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -341,7 +341,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(1) new IterationCountStopCriterium<float>(1)
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -373,7 +373,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(1) new IterationCountStopCriterium<float>(1)
}; };
var iterator = new Iterator(criteria); var iterator = new Iterator(criteria);
@ -403,7 +403,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
new FailureStopCriterium(), new FailureStopCriterium(),
new DivergenceStopCriterium(), new DivergenceStopCriterium(),
new IterationCountStopCriterium(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium() new ResidualStopCriterium()
}; };

24
src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterium/IterationCountStopCriteriumTest.cs

@ -28,11 +28,11 @@
// OTHER DEALINGS IN THE SOFTWARE. // OTHER DEALINGS IN THE SOFTWARE.
// </copyright> // </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Single; using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status; using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterium namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCriterium
{ {
@ -48,7 +48,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException() public void CreateWithIllegalMinimumIterationsThrowsArgumentOutOfRangeException()
{ {
Assert.Throws<ArgumentOutOfRangeException>(() => new IterationCountStopCriterium(-1)); Assert.Throws<ArgumentOutOfRangeException>(() => new IterationCountStopCriterium<float>(-1));
} }
/// <summary> /// <summary>
@ -57,7 +57,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void Create() public void Create()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
} }
@ -67,13 +67,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void ResetMaximumIterations() public void ResetMaximumIterations()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations"); Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum number of iterations");
criterium.ResetMaximumNumberOfIterationsToDefault(); criterium.ResetMaximumNumberOfIterationsToDefault();
Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset"); Assert.AreNotEqual(10, criterium.MaximumNumberOfIterations, "Should have reset");
Assert.AreEqual(IterationCountStopCriterium.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value"); Assert.AreEqual(IterationCountStopCriterium<float>.DefaultMaximumNumberOfIterations, criterium.MaximumNumberOfIterations, "Reset to the wrong value");
} }
/// <summary> /// <summary>
@ -82,7 +82,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException() public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3))); Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)));
@ -94,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void DetermineStatus() public void DetermineStatus()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)); criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3));
@ -110,7 +110,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void ResetCalculationState() public void ResetCalculationState()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3)); criterium.DetermineStatus(5, DenseVector.Create(3, i => 1), DenseVector.Create(3, i => 2), DenseVector.Create(3, i => 3));
@ -126,14 +126,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void Clone() public void Clone()
{ {
var criterium = new IterationCountStopCriterium(10); var criterium = new IterationCountStopCriterium<float>(10);
Assert.IsNotNull(criterium, "A criterium should have been created"); Assert.IsNotNull(criterium, "A criterium should have been created");
Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum"); Assert.AreEqual(10, criterium.MaximumNumberOfIterations, "Incorrect maximum");
var clone = criterium.Clone(); var clone = criterium.Clone();
Assert.IsInstanceOf(typeof (IterationCountStopCriterium), clone, "Wrong criterium type"); Assert.IsInstanceOf(typeof(IterationCountStopCriterium<float>), clone, "Wrong criterium type");
var clonedCriterium = clone as IterationCountStopCriterium; var clonedCriterium = clone as IterationCountStopCriterium<float>;
Assert.IsNotNull(clonedCriterium); Assert.IsNotNull(clonedCriterium);
// ReSharper disable PossibleNullReferenceException // ReSharper disable PossibleNullReferenceException

Loading…
Cancel
Save