Browse Source

LA: Iterative solvers: make failure stop criterium generic/shared

optimization-1
Christoph Ruegg 13 years ago
parent
commit
9e2b83551c
  1. 8
      src/Numerics/LinearAlgebra/Builder.cs
  2. 138
      src/Numerics/LinearAlgebra/Complex/Solvers/FailureStopCriterium.cs
  3. 133
      src/Numerics/LinearAlgebra/Complex32/Solvers/FailureStopCriterium.cs
  4. 131
      src/Numerics/LinearAlgebra/Double/Solvers/FailureStopCriterium.cs
  5. 25
      src/Numerics/LinearAlgebra/Solvers/FailureStopCriterium.cs
  6. 5
      src/Numerics/Numerics.csproj
  7. 6
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/BiCgStabTest.cs
  8. 6
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/GpBiCgTest.cs
  9. 6
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/MlkBiCgStabTest.cs
  10. 6
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/TFQMRTest.cs
  11. 7
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs
  12. 19
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterium/FailureStopCriteriumTest.cs
  13. 6
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/BiCgStabTest.cs
  14. 6
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/GpBiCgTest.cs
  15. 6
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/MlkBiCgStabTest.cs
  16. 6
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/TFQMRTest.cs
  17. 7
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs
  18. 19
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterium/FailureStopCriteriumTest.cs
  19. 6
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/BiCgStabTest.cs
  20. 6
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/GpBiCgTest.cs
  21. 6
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/MlkBiCgStabTest.cs
  22. 6
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/TFQMRTest.cs
  23. 7
      src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs
  24. 19
      src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterium/FailureStopCriteriumTest.cs
  25. 6
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/BiCgStabTest.cs
  26. 6
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/GpBiCgTest.cs
  27. 6
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/MlkBiCgStabTest.cs
  28. 6
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/TFQMRTest.cs
  29. 7
      src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs
  30. 19
      src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterium/FailureStopCriteriumTest.cs

8
src/Numerics/LinearAlgebra/Builder.cs

@ -77,7 +77,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
{ {
return new IIterationStopCriterium<double>[] return new IIterationStopCriterium<double>[]
{ {
new FailureStopCriterium(), new FailureStopCriterium<double>(),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new IterationCountStopCriterium<double>(maxIterations), new IterationCountStopCriterium<double>(maxIterations),
new ResidualStopCriterium<double>(1e-12) new ResidualStopCriterium<double>(1e-12)
@ -154,7 +154,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single
{ {
return new IIterationStopCriterium<float>[] return new IIterationStopCriterium<float>[]
{ {
new FailureStopCriterium(), new FailureStopCriterium<float>(),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new IterationCountStopCriterium<float>(maxIterations), new IterationCountStopCriterium<float>(maxIterations),
new ResidualStopCriterium<float>(1e-6) new ResidualStopCriterium<float>(1e-6)
@ -237,7 +237,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
{ {
return new IIterationStopCriterium<Complex>[] return new IIterationStopCriterium<Complex>[]
{ {
new FailureStopCriterium(), new FailureStopCriterium<Complex>(),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new IterationCountStopCriterium<Complex>(maxIterations), new IterationCountStopCriterium<Complex>(maxIterations),
new ResidualStopCriterium<Complex>(1e-12) new ResidualStopCriterium<Complex>(1e-12)
@ -314,7 +314,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
{ {
return new IIterationStopCriterium<Numerics.Complex32>[] return new IIterationStopCriterium<Numerics.Complex32>[]
{ {
new FailureStopCriterium(), new FailureStopCriterium<Numerics.Complex32>(),
new DivergenceStopCriterium<Numerics.Complex32>(), new DivergenceStopCriterium<Numerics.Complex32>(),
new IterationCountStopCriterium<Numerics.Complex32>(maxIterations), new IterationCountStopCriterium<Numerics.Complex32>(maxIterations),
new ResidualStopCriterium<Numerics.Complex32>(1e-6) new ResidualStopCriterium<Numerics.Complex32>(1e-6)

138
src/Numerics/LinearAlgebra/Complex/Solvers/FailureStopCriterium.cs

@ -1,138 +0,0 @@
// <copyright file="FailureStopCriterium.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;
using MathNet.Numerics.Properties;
namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
{
#if NOSYSNUMERICS
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals for NaN's.
/// </summary>
public sealed class FailureStopCriterium : IIterationStopCriterium<Complex>
{
/// <summary>
/// Defines the default last iteration number. Set to -1 because iterations normally
/// start at 0.
/// </summary>
const int DefaultLastIterationNumber = -1;
/// <summary>
/// The status of the calculation
/// </summary>
IterationStatus _status = IterationStatus.Continue;
/// <summary>
/// The iteration number of the last iteration.
/// </summary>
int _lastIteration = DefaultLastIterationNumber;
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// </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 IterationStatus DetermineStatus(int iterationNumber, Vector<Complex> solutionVector, Vector<Complex> sourceVector, Vector<Complex> residualVector)
{
if (iterationNumber < 0)
{
throw new ArgumentOutOfRangeException("iterationNumber");
}
if (solutionVector.Count != residualVector.Count)
{
throw new ArgumentException(Resources.ArgumentArraysSameLength);
}
if (_lastIteration >= iterationNumber)
{
// We have already stored the actual last iteration number
// For now do nothing. We only care about the next step.
return _status;
}
// Store the infinity norms of both the solution and residual vectors
double residualNorm = residualVector.InfinityNorm();
double solutionNorm = solutionVector.InfinityNorm();
_status = double.IsNaN(solutionNorm) || double.IsNaN(residualNorm) ? IterationStatus.Failure : IterationStatus.Continue;
_lastIteration = iterationNumber;
return _status;
}
/// <summary>
/// Gets the current calculation status.
/// </summary>
public IterationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
}
/// <summary>
/// Resets the <see cref="IIterationStopCriterium{T}"/> to the pre-calculation state.
/// </summary>
public void Reset()
{
_status = IterationStatus.Continue;
_lastIteration = DefaultLastIterationNumber;
}
/// <summary>
/// Clones the current <see cref="FailureStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium"/> class.</returns>
public IIterationStopCriterium<Complex> Clone()
{
return new FailureStopCriterium();
}
}
}

133
src/Numerics/LinearAlgebra/Complex32/Solvers/FailureStopCriterium.cs

@ -1,133 +0,0 @@
// <copyright file="FailureStopCriterium.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;
using MathNet.Numerics.Properties;
namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
{
using Numerics;
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals for NaN's.
/// </summary>
public sealed class FailureStopCriterium : IIterationStopCriterium<Complex32>
{
/// <summary>
/// Defines the default last iteration number. Set to -1 because iterations normally
/// start at 0.
/// </summary>
const int DefaultLastIterationNumber = -1;
/// <summary>
/// The status of the calculation
/// </summary>
IterationStatus _status = IterationStatus.Continue;
/// <summary>
/// The iteration number of the last iteration.
/// </summary>
int _lastIteration = DefaultLastIterationNumber;
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// </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 IterationStatus DetermineStatus(int iterationNumber, Vector<Complex32> solutionVector, Vector<Complex32> sourceVector, Vector<Complex32> residualVector)
{
if (iterationNumber < 0)
{
throw new ArgumentOutOfRangeException("iterationNumber");
}
if (solutionVector.Count != residualVector.Count)
{
throw new ArgumentException(Resources.ArgumentArraysSameLength);
}
if (_lastIteration >= iterationNumber)
{
// We have already stored the actual last iteration number
// For now do nothing. We only care about the next step.
return _status;
}
// Store the infinity norms of both the solution and residual vectors
double residualNorm = residualVector.InfinityNorm();
double solutionNorm = solutionVector.InfinityNorm();
_status = double.IsNaN(solutionNorm) || double.IsNaN(residualNorm) ? IterationStatus.Failure : IterationStatus.Continue;
_lastIteration = iterationNumber;
return _status;
}
/// <summary>
/// Gets the current calculation status.
/// </summary>
public IterationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
}
/// <summary>
/// Resets the <see cref="IIterationStopCriterium{T}"/> to the pre-calculation state.
/// </summary>
public void Reset()
{
_status = IterationStatus.Continue;
_lastIteration = DefaultLastIterationNumber;
}
/// <summary>
/// Clones the current <see cref="FailureStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium"/> class.</returns>
public IIterationStopCriterium<Complex32> Clone()
{
return new FailureStopCriterium();
}
}
}

131
src/Numerics/LinearAlgebra/Double/Solvers/FailureStopCriterium.cs

@ -1,131 +0,0 @@
// <copyright file="FailureStopCriterium.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;
using MathNet.Numerics.Properties;
namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals for NaN's.
/// </summary>
public sealed class FailureStopCriterium : IIterationStopCriterium<double>
{
/// <summary>
/// Defines the default last iteration number. Set to -1 because iterations normally
/// start at 0.
/// </summary>
const int DefaultLastIterationNumber = -1;
/// <summary>
/// The status of the calculation
/// </summary>
IterationStatus _status = IterationStatus.Continue;
/// <summary>
/// The iteration number of the last iteration.
/// </summary>
int _lastIteration = DefaultLastIterationNumber;
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium{T}"/>. Result is set into <c>Status</c> field.
/// </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 IterationStatus DetermineStatus(int iterationNumber, Vector<double> solutionVector, Vector<double> sourceVector, Vector<double> residualVector)
{
if (iterationNumber < 0)
{
throw new ArgumentOutOfRangeException("iterationNumber");
}
if (solutionVector.Count != residualVector.Count)
{
throw new ArgumentException(Resources.ArgumentArraysSameLength);
}
if (_lastIteration >= iterationNumber)
{
// We have already stored the actual last iteration number
// For now do nothing. We only care about the next step.
return _status;
}
// Store the infinity norms of both the solution and residual vectors
double residualNorm = residualVector.InfinityNorm();
double solutionNorm = solutionVector.InfinityNorm();
_status = double.IsNaN(solutionNorm) || double.IsNaN(residualNorm) ? IterationStatus.Failure : IterationStatus.Continue;
_lastIteration = iterationNumber;
return _status;
}
/// <summary>
/// Gets the current calculation status.
/// </summary>
public IterationStatus Status
{
[DebuggerStepThrough]
get
{
return _status;
}
}
/// <summary>
/// Resets the <see cref="IIterationStopCriterium{T}"/> to the pre-calculation state.
/// </summary>
public void Reset()
{
_status = IterationStatus.Continue;
_lastIteration = DefaultLastIterationNumber;
}
/// <summary>
/// Clones the current <see cref="FailureStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium"/> class.</returns>
public IIterationStopCriterium<double> Clone()
{
return new FailureStopCriterium();
}
}
}

25
src/Numerics/LinearAlgebra/Single/Solvers/FailureStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/FailureStopCriterium.cs

@ -30,22 +30,15 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using MathNet.Numerics.LinearAlgebra.Solvers;
using MathNet.Numerics.Properties; using MathNet.Numerics.Properties;
namespace MathNet.Numerics.LinearAlgebra.Single.Solvers namespace MathNet.Numerics.LinearAlgebra.Solvers
{ {
/// <summary> /// <summary>
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals for NaN's. /// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals for NaN's.
/// </summary> /// </summary>
public sealed class FailureStopCriterium : IIterationStopCriterium<float> public sealed class FailureStopCriterium<T> : IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
{ {
/// <summary>
/// Defines the default last iteration number. Set to -1 because iterations normally
/// start at 0.
/// </summary>
const int DefaultLastIterationNumber = -1;
/// <summary> /// <summary>
/// The status of the calculation /// The status of the calculation
/// </summary> /// </summary>
@ -54,7 +47,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
/// <summary> /// <summary>
/// The iteration number of the last iteration. /// The iteration number of the last iteration.
/// </summary> /// </summary>
int _lastIteration = DefaultLastIterationNumber; int _lastIteration = -1;
/// <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
@ -69,7 +62,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
/// 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 IterationStatus DetermineStatus(int iterationNumber, Vector<float> solutionVector, Vector<float> sourceVector, Vector<float> residualVector) public IterationStatus DetermineStatus(int iterationNumber, Vector<T> solutionVector, Vector<T> sourceVector, Vector<T> residualVector)
{ {
if (iterationNumber < 0) if (iterationNumber < 0)
{ {
@ -116,16 +109,16 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
public void Reset() public void Reset()
{ {
_status = IterationStatus.Continue; _status = IterationStatus.Continue;
_lastIteration = DefaultLastIterationNumber; _lastIteration = -1;
} }
/// <summary> /// <summary>
/// Clones the current <see cref="FailureStopCriterium"/> and its settings. /// Clones the current <see cref="FailureStopCriterium{T}"/> and its settings.
/// </summary> /// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium"/> class.</returns> /// <returns>A new instance of the <see cref="FailureStopCriterium{T}"/> class.</returns>
public IIterationStopCriterium<float> Clone() public IIterationStopCriterium<T> Clone()
{ {
return new FailureStopCriterium(); return new FailureStopCriterium<T>();
} }
} }
} }

5
src/Numerics/Numerics.csproj

@ -255,7 +255,6 @@
<Compile Include="LinearAlgebra\Complex32\Solvers\DiagonalPreconditioner.cs" /> <Compile Include="LinearAlgebra\Complex32\Solvers\DiagonalPreconditioner.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\ILUTPPreconditioner.cs" /> <Compile Include="LinearAlgebra\Complex32\Solvers\ILUTPPreconditioner.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\ILU0Preconditioner.cs" /> <Compile Include="LinearAlgebra\Complex32\Solvers\ILU0Preconditioner.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\FailureStopCriterium.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" />
<Compile Include="LinearAlgebra\Complex\Factorization\DenseEvd.cs" /> <Compile Include="LinearAlgebra\Complex\Factorization\DenseEvd.cs" />
@ -277,7 +276,6 @@
<Compile Include="LinearAlgebra\Complex\Solvers\DiagonalPreconditioner.cs" /> <Compile Include="LinearAlgebra\Complex\Solvers\DiagonalPreconditioner.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\ILUTPPreconditioner.cs" /> <Compile Include="LinearAlgebra\Complex\Solvers\ILUTPPreconditioner.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\ILU0Preconditioner.cs" /> <Compile Include="LinearAlgebra\Complex\Solvers\ILU0Preconditioner.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\FailureStopCriterium.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" />
<Compile Include="LinearAlgebra\Double\Factorization\DenseGramSchmidt.cs" /> <Compile Include="LinearAlgebra\Double\Factorization\DenseGramSchmidt.cs" />
@ -316,7 +314,7 @@
<Compile Include="LinearAlgebra\Single\Solvers\ILUTPPreconditioner.cs" /> <Compile Include="LinearAlgebra\Single\Solvers\ILUTPPreconditioner.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\ILU0Preconditioner.cs" /> <Compile Include="LinearAlgebra\Single\Solvers\ILU0Preconditioner.cs" />
<Compile Include="LinearAlgebra\Solvers\DivergenceStopCriterium.cs" /> <Compile Include="LinearAlgebra\Solvers\DivergenceStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\FailureStopCriterium.cs" /> <Compile Include="LinearAlgebra\Solvers\FailureStopCriterium.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" />
<Compile Include="LinearAlgebra\Factorization\Cholesky.cs" /> <Compile Include="LinearAlgebra\Factorization\Cholesky.cs" />
@ -342,7 +340,6 @@
<Compile Include="LinearAlgebra\Double\Solvers\ILUTPPreconditioner.cs" /> <Compile Include="LinearAlgebra\Double\Solvers\ILUTPPreconditioner.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\ILU0Preconditioner.cs" /> <Compile Include="LinearAlgebra\Double\Solvers\ILU0Preconditioner.cs" />
<Compile Include="LinearAlgebra\Solvers\UnitPreconditioner.cs" /> <Compile Include="LinearAlgebra\Solvers\UnitPreconditioner.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\FailureStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\ResidualStopCriterium.cs" /> <Compile Include="LinearAlgebra\Solvers\ResidualStopCriterium.cs" />
<Compile Include="LinearAlgebra\Double\SparseVector.cs" /> <Compile Include="LinearAlgebra\Double\SparseVector.cs" />
<Compile Include="LinearAlgebra\Matrix.Arithmetic.cs" /> <Compile Include="LinearAlgebra\Matrix.Arithmetic.cs" />

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

@ -101,7 +101,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new BiCgStab(); var solver = new BiCgStab();
@ -144,7 +144,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator<Complex>(new IterationCountStopCriterium<Complex>(MaximumIterations), var monitor = new Iterator<Complex>(new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new BiCgStab(); var solver = new BiCgStab();
@ -220,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var monitor = new Iterator<Complex>(new IterationCountStopCriterium<Complex>(MaximumIterations), var monitor = new Iterator<Complex>(new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new BiCgStab(); var solver = new BiCgStab();

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

@ -101,7 +101,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new GpBiCg(); var solver = new GpBiCg();
@ -145,7 +145,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new GpBiCg(); var solver = new GpBiCg();
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new GpBiCg(); var solver = new GpBiCg();

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

@ -101,7 +101,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();
@ -145,7 +145,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();

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

@ -101,7 +101,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new TFQMR(); var solver = new TFQMR();
@ -145,7 +145,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new TFQMR(); var solver = new TFQMR();
@ -222,7 +222,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
new IterationCountStopCriterium<Complex>(MaximumIterations), new IterationCountStopCriterium<Complex>(MaximumIterations),
new ResidualStopCriterium<Complex>(ConvergenceBoundary), new ResidualStopCriterium<Complex>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex>());
var solver = new TFQMR(); var solver = new TFQMR();

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

@ -31,7 +31,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra.Complex; using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers;
using MathNet.Numerics.LinearAlgebra.Solvers; using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework; using NUnit.Framework;
@ -71,7 +70,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
var criteria = new List<IIterationStopCriterium<Complex>> var criteria = new List<IIterationStopCriterium<Complex>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<Complex>(),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new IterationCountStopCriterium<Complex>(), new IterationCountStopCriterium<Complex>(),
new ResidualStopCriterium<Complex>(1e-12) new ResidualStopCriterium<Complex>(1e-12)
@ -93,7 +92,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
var criteria = new List<IIterationStopCriterium<Complex>> var criteria = new List<IIterationStopCriterium<Complex>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<Complex>(),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new IterationCountStopCriterium<Complex>(1) new IterationCountStopCriterium<Complex>(1)
}; };
@ -125,7 +124,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{ {
var criteria = new List<IIterationStopCriterium<Complex>> var criteria = new List<IIterationStopCriterium<Complex>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<Complex>(),
new DivergenceStopCriterium<Complex>(), new DivergenceStopCriterium<Complex>(),
new IterationCountStopCriterium<Complex>(1) new IterationCountStopCriterium<Complex>(1)
}; };

19
src/UnitTests/LinearAlgebraTests/Complex/Solvers/StopCriterium/FailureStopCriteriumTest.cs

@ -30,7 +30,6 @@
using System; using System;
using MathNet.Numerics.LinearAlgebra.Complex; using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers;
using MathNet.Numerics.LinearAlgebra.Solvers; using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework; using NUnit.Framework;
@ -54,7 +53,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void Create() public void Create()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "Should have a criterium now"); Assert.IsNotNull(criterium, "Should have a criterium now");
} }
@ -64,7 +63,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException() public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 5), DenseVector.Create(3, i => 6))); Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 5), DenseVector.Create(3, i => 6)));
@ -76,7 +75,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException() public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
Assert.Throws<ArgumentException>(() => criterium.DetermineStatus(1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 6), DenseVector.Create(4, i => 4))); Assert.Throws<ArgumentException>(() => criterium.DetermineStatus(1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 6), DenseVector.Create(4, i => 4)));
@ -88,7 +87,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void DetermineStatusWithResidualNaN() public void DetermineStatusWithResidualNaN()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(2.0, 0)}); var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(2.0, 0)});
@ -105,7 +104,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void DetermineStatusWithSolutionNaN() public void DetermineStatusWithSolutionNaN()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(double.NaN, 0)}); var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(double.NaN, 0)});
@ -122,7 +121,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void DetermineStatus() public void DetermineStatus()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {new Complex(3.0, 0), new Complex(2.0, 0), new Complex(1, 0)}); var solution = new DenseVector(new[] {new Complex(3.0, 0), new Complex(2.0, 0), new Complex(1, 0)});
@ -139,7 +138,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void ResetCalculationState() public void ResetCalculationState()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(2, 0)}); var solution = new DenseVector(new[] {new Complex(1.0, 0), new Complex(1.0, 0), new Complex(2, 0)});
@ -159,10 +158,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.StopCrit
[Test] [Test]
public void Clone() public void Clone()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var clone = criterium.Clone(); var clone = criterium.Clone();
Assert.IsInstanceOf(typeof (FailureStopCriterium), clone, "Wrong criterium type"); Assert.IsInstanceOf(typeof(FailureStopCriterium<Complex>), clone, "Wrong criterium type");
} }
} }
} }

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

@ -97,7 +97,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new BiCgStab(); var solver = new BiCgStab();
@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new BiCgStab(); var solver = new BiCgStab();
@ -218,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new BiCgStab(); var solver = new BiCgStab();

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

@ -97,7 +97,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new GpBiCg(); var solver = new GpBiCg();
@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new GpBiCg(); var solver = new GpBiCg();
@ -218,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new GpBiCg(); var solver = new GpBiCg();

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

@ -97,7 +97,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();
@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();
@ -218,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();

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

@ -97,7 +97,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new TFQMR(); var solver = new TFQMR();
@ -141,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new TFQMR(); var solver = new TFQMR();
@ -218,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
new IterationCountStopCriterium<Complex32>(MaximumIterations), new IterationCountStopCriterium<Complex32>(MaximumIterations),
new ResidualStopCriterium<Complex32>(ConvergenceBoundary), new ResidualStopCriterium<Complex32>(ConvergenceBoundary),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new FailureStopCriterium()); new FailureStopCriterium<Complex32>());
var solver = new TFQMR(); var solver = new TFQMR();

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

@ -31,7 +31,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra.Complex32; using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Solvers; using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework; using NUnit.Framework;
@ -67,7 +66,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
var criteria = new List<IIterationStopCriterium<Complex32>> var criteria = new List<IIterationStopCriterium<Complex32>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<Complex32>(),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new IterationCountStopCriterium<Complex32>(), new IterationCountStopCriterium<Complex32>(),
new ResidualStopCriterium<Complex32>(1e-6) new ResidualStopCriterium<Complex32>(1e-6)
@ -89,7 +88,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
var criteria = new List<IIterationStopCriterium<Complex32>> var criteria = new List<IIterationStopCriterium<Complex32>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<Complex32>(),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new IterationCountStopCriterium<Complex32>(1) new IterationCountStopCriterium<Complex32>(1)
}; };
@ -121,7 +120,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{ {
var criteria = new List<IIterationStopCriterium<Complex32>> var criteria = new List<IIterationStopCriterium<Complex32>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<Complex32>(),
new DivergenceStopCriterium<Complex32>(), new DivergenceStopCriterium<Complex32>(),
new IterationCountStopCriterium<Complex32>(1) new IterationCountStopCriterium<Complex32>(1)
}; };

19
src/UnitTests/LinearAlgebraTests/Complex32/Solvers/StopCriterium/FailureStopCriteriumTest.cs

@ -30,7 +30,6 @@
using System; using System;
using MathNet.Numerics.LinearAlgebra.Complex32; using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Solvers; using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework; using NUnit.Framework;
@ -50,7 +49,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void Create() public void Create()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "Should have a criterium now"); Assert.IsNotNull(criterium, "Should have a criterium now");
} }
@ -60,7 +59,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException() public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 5), DenseVector.Create(3, i => 6))); Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 5), DenseVector.Create(3, i => 6)));
@ -72,7 +71,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException() public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
Assert.Throws<ArgumentException>(() => criterium.DetermineStatus(1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 6), DenseVector.Create(4, i => 4))); Assert.Throws<ArgumentException>(() => criterium.DetermineStatus(1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 6), DenseVector.Create(4, i => 4)));
@ -84,7 +83,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void DetermineStatusWithResidualNaN() public void DetermineStatusWithResidualNaN()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(2.0f, 0)}); var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(2.0f, 0)});
@ -101,7 +100,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void DetermineStatusWithSolutionNaN() public void DetermineStatusWithSolutionNaN()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(float.NaN, 0)}); var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(float.NaN, 0)});
@ -118,7 +117,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void DetermineStatus() public void DetermineStatus()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {new Complex32(3.0f, 0), new Complex32(2.0f, 0), new Complex32(1, 0)}); var solution = new DenseVector(new[] {new Complex32(3.0f, 0), new Complex32(2.0f, 0), new Complex32(1, 0)});
@ -135,7 +134,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void ResetCalculationState() public void ResetCalculationState()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(2, 0)}); var solution = new DenseVector(new[] {new Complex32(1.0f, 0), new Complex32(1.0f, 0), new Complex32(2, 0)});
@ -155,11 +154,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.StopCr
[Test] [Test]
public void Clone() public void Clone()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<Complex32>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var clone = criterium.Clone(); var clone = criterium.Clone();
Assert.IsInstanceOf(typeof (FailureStopCriterium), clone, "Wrong criterium type"); Assert.IsInstanceOf(typeof(FailureStopCriterium<Complex32>), clone, "Wrong criterium type");
} }
} }
} }

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

@ -95,7 +95,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new BiCgStab(); var solver = new BiCgStab();
@ -139,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new BiCgStab(); var solver = new BiCgStab();
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new BiCgStab(); var solver = new BiCgStab();

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

@ -95,7 +95,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new GpBiCg(); var solver = new GpBiCg();
@ -139,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new GpBiCg(); var solver = new GpBiCg();
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new GpBiCg(); var solver = new GpBiCg();

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

@ -95,7 +95,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();
@ -139,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();

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

@ -95,7 +95,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new TFQMR(); var solver = new TFQMR();
@ -139,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new TFQMR(); var solver = new TFQMR();
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
new IterationCountStopCriterium<double>(MaximumIterations), new IterationCountStopCriterium<double>(MaximumIterations),
new ResidualStopCriterium<double>(ConvergenceBoundary), new ResidualStopCriterium<double>(ConvergenceBoundary),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new FailureStopCriterium()); new FailureStopCriterium<double>());
var solver = new TFQMR(); var solver = new TFQMR();

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

@ -31,7 +31,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra.Double; using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Solvers; using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework; using NUnit.Framework;
@ -65,7 +64,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
var criteria = new List<IIterationStopCriterium<double>> var criteria = new List<IIterationStopCriterium<double>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<double>(),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new IterationCountStopCriterium<double>(), new IterationCountStopCriterium<double>(),
new ResidualStopCriterium<double>(1e-12) new ResidualStopCriterium<double>(1e-12)
@ -87,7 +86,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
var criteria = new List<IIterationStopCriterium<double>> var criteria = new List<IIterationStopCriterium<double>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<double>(),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new IterationCountStopCriterium<double>(1) new IterationCountStopCriterium<double>(1)
}; };
@ -119,7 +118,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
{ {
var criteria = new List<IIterationStopCriterium<double>> var criteria = new List<IIterationStopCriterium<double>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<double>(),
new DivergenceStopCriterium<double>(), new DivergenceStopCriterium<double>(),
new IterationCountStopCriterium<double>(1) new IterationCountStopCriterium<double>(1)
}; };

19
src/UnitTests/LinearAlgebraTests/Double/Solvers/StopCriterium/FailureStopCriteriumTest.cs

@ -30,7 +30,6 @@
using System; using System;
using MathNet.Numerics.LinearAlgebra.Double; using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Solvers; using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework; using NUnit.Framework;
@ -48,7 +47,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void Create() public void Create()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "Should have a criterium now"); Assert.IsNotNull(criterium, "Should have a criterium now");
} }
@ -58,7 +57,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException() public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 5), DenseVector.Create(3, i => 6))); Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 5), DenseVector.Create(3, i => 6)));
@ -70,7 +69,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException() public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
Assert.Throws<ArgumentException>(() => criterium.DetermineStatus(1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 6), DenseVector.Create(4, i => 4))); Assert.Throws<ArgumentException>(() => criterium.DetermineStatus(1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 6), DenseVector.Create(4, i => 4)));
@ -82,7 +81,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithResidualNaN() public void DetermineStatusWithResidualNaN()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {1.0, 1.0, 2.0}); var solution = new DenseVector(new[] {1.0, 1.0, 2.0});
@ -99,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithSolutionNaN() public void DetermineStatusWithSolutionNaN()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {1.0, 1.0, double.NaN}); var solution = new DenseVector(new[] {1.0, 1.0, double.NaN});
@ -116,7 +115,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void DetermineStatus() public void DetermineStatus()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {3.0, 2.0, 1.0}); var solution = new DenseVector(new[] {3.0, 2.0, 1.0});
@ -133,7 +132,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void ResetCalculationState() public void ResetCalculationState()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {1.0, 1.0, 2.0}); var solution = new DenseVector(new[] {1.0, 1.0, 2.0});
@ -153,10 +152,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.StopCrite
[Test] [Test]
public void Clone() public void Clone()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<double>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var clone = criterium.Clone(); var clone = criterium.Clone();
Assert.IsInstanceOf(typeof (FailureStopCriterium), clone, "Wrong criterium type"); Assert.IsInstanceOf(typeof(FailureStopCriterium<double>), clone, "Wrong criterium type");
} }
} }
} }

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

@ -95,7 +95,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new BiCgStab(); var solver = new BiCgStab();
@ -139,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new BiCgStab(); var solver = new BiCgStab();
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new BiCgStab(); var solver = new BiCgStab();

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

@ -95,7 +95,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new GpBiCg(); var solver = new GpBiCg();
@ -139,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new GpBiCg(); var solver = new GpBiCg();
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new GpBiCg(); var solver = new GpBiCg();

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

@ -96,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();
@ -140,7 +140,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();
@ -221,7 +221,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new MlkBiCgStab(); var solver = new MlkBiCgStab();

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

@ -95,7 +95,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new TFQMR(); var solver = new TFQMR();
@ -139,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new TFQMR(); var solver = new TFQMR();
@ -216,7 +216,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
new IterationCountStopCriterium<float>(MaximumIterations), new IterationCountStopCriterium<float>(MaximumIterations),
new ResidualStopCriterium<float>(ConvergenceBoundary), new ResidualStopCriterium<float>(ConvergenceBoundary),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new FailureStopCriterium()); new FailureStopCriterium<float>());
var solver = new TFQMR(); var solver = new TFQMR();

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

@ -31,7 +31,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra.Single; using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Solvers; using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework; using NUnit.Framework;
@ -65,7 +64,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
var criteria = new List<IIterationStopCriterium<float>> var criteria = new List<IIterationStopCriterium<float>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<float>(),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new IterationCountStopCriterium<float>(), new IterationCountStopCriterium<float>(),
new ResidualStopCriterium<float>(1e-6) new ResidualStopCriterium<float>(1e-6)
@ -87,7 +86,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
var criteria = new List<IIterationStopCriterium<float>> var criteria = new List<IIterationStopCriterium<float>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<float>(),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new IterationCountStopCriterium<float>(1) new IterationCountStopCriterium<float>(1)
}; };
@ -119,7 +118,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
{ {
var criteria = new List<IIterationStopCriterium<float>> var criteria = new List<IIterationStopCriterium<float>>
{ {
new FailureStopCriterium(), new FailureStopCriterium<float>(),
new DivergenceStopCriterium<float>(), new DivergenceStopCriterium<float>(),
new IterationCountStopCriterium<float>(1) new IterationCountStopCriterium<float>(1)
}; };

19
src/UnitTests/LinearAlgebraTests/Single/Solvers/StopCriterium/FailureStopCriteriumTest.cs

@ -30,7 +30,6 @@
using System; using System;
using MathNet.Numerics.LinearAlgebra.Single; using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Solvers; using MathNet.Numerics.LinearAlgebra.Solvers;
using NUnit.Framework; using NUnit.Framework;
@ -48,7 +47,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void Create() public void Create()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "Should have a criterium now"); Assert.IsNotNull(criterium, "Should have a criterium now");
} }
@ -58,7 +57,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException() public void DetermineStatusWithIllegalIterationNumberThrowsArgumentOutOfRangeException()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 5), DenseVector.Create(3, i => 6))); Assert.Throws<ArgumentOutOfRangeException>(() => criterium.DetermineStatus(-1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 5), DenseVector.Create(3, i => 6)));
@ -70,7 +69,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException() public void DetermineStatusWithNonMatchingVectorsThrowsArgumentException()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
Assert.Throws<ArgumentException>(() => criterium.DetermineStatus(1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 6), DenseVector.Create(4, i => 4))); Assert.Throws<ArgumentException>(() => criterium.DetermineStatus(1, DenseVector.Create(3, i => 4), DenseVector.Create(3, i => 6), DenseVector.Create(4, i => 4)));
@ -82,7 +81,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithResidualNaN() public void DetermineStatusWithResidualNaN()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {1.0f, 1.0f, 2.0f}); var solution = new DenseVector(new[] {1.0f, 1.0f, 2.0f});
@ -99,7 +98,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void DetermineStatusWithSolutionNaN() public void DetermineStatusWithSolutionNaN()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {1, 1, float.NaN}); var solution = new DenseVector(new[] {1, 1, float.NaN});
@ -116,7 +115,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void DetermineStatus() public void DetermineStatus()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {3.0f, 2.0f, 1.0f}); var solution = new DenseVector(new[] {3.0f, 2.0f, 1.0f});
@ -133,7 +132,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void ResetCalculationState() public void ResetCalculationState()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var solution = new DenseVector(new[] {1.0f, 1.0f, 2.0f}); var solution = new DenseVector(new[] {1.0f, 1.0f, 2.0f});
@ -153,11 +152,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.StopCrite
[Test] [Test]
public void Clone() public void Clone()
{ {
var criterium = new FailureStopCriterium(); var criterium = new FailureStopCriterium<float>();
Assert.IsNotNull(criterium, "There should be a criterium"); Assert.IsNotNull(criterium, "There should be a criterium");
var clone = criterium.Clone(); var clone = criterium.Clone();
Assert.IsInstanceOf(typeof (FailureStopCriterium), clone, "Wrong criterium type"); Assert.IsInstanceOf(typeof(FailureStopCriterium<float>), clone, "Wrong criterium type");
} }
} }
} }

Loading…
Cancel
Save