Browse Source

LA: make IIterationStopCriterium generic & shared

optimization-1
Christoph Ruegg 13 years ago
parent
commit
6a41820fc0
  1. 3
      src/Examples/LinearAlgebra/IterativeSolvers/BiCgStabSolver.cs
  2. 3
      src/Examples/LinearAlgebra/IterativeSolvers/CompositeSolverExample.cs
  3. 3
      src/Examples/LinearAlgebra/IterativeSolvers/GpBiCgSolver.cs
  4. 3
      src/Examples/LinearAlgebra/IterativeSolvers/MlkBiCgStabSolver.cs
  5. 3
      src/Examples/LinearAlgebra/IterativeSolvers/TFQMRSolver.cs
  6. 14
      src/Numerics/LinearAlgebra/Complex/Solvers/IIterator.cs
  7. 15
      src/Numerics/LinearAlgebra/Complex/Solvers/Iterator.cs
  8. 4
      src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/DivergenceStopCriterium.cs
  9. 4
      src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/FailureStopCriterium.cs
  10. 81
      src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/IIterationStopCriterium.cs
  11. 4
      src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/IterationCountStopCriterium.cs
  12. 4
      src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/ResidualStopCriterium.cs
  13. 14
      src/Numerics/LinearAlgebra/Complex32/Solvers/IIterator.cs
  14. 19
      src/Numerics/LinearAlgebra/Complex32/Solvers/Iterator.cs
  15. 4
      src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/DivergenceStopCriterium.cs
  16. 6
      src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/FailureStopCriterium.cs
  17. 76
      src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/IIterationStopCriterium.cs
  18. 10
      src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/IterationCountStopCriterium.cs
  19. 10
      src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/ResidualStopCriterium.cs
  20. 12
      src/Numerics/LinearAlgebra/Double/Solvers/IIterator.cs
  21. 17
      src/Numerics/LinearAlgebra/Double/Solvers/Iterator.cs
  22. 4
      src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/DivergenceStopCriterium.cs
  23. 4
      src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/FailureStopCriterium.cs
  24. 74
      src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/IIterationStopCriterium.cs
  25. 10
      src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/IterationCountStopCriterium.cs
  26. 6
      src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/ResidualStopCriterium.cs
  27. 2
      src/Numerics/LinearAlgebra/Factorization/ISolver.cs
  28. 14
      src/Numerics/LinearAlgebra/Single/Solvers/IIterator.cs
  29. 19
      src/Numerics/LinearAlgebra/Single/Solvers/Iterator.cs
  30. 4
      src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/DivergenceStopCriterium.cs
  31. 6
      src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/FailureStopCriterium.cs
  32. 6
      src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/IterationCountStopCriterium.cs
  33. 12
      src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/ResidualStopCriterium.cs
  34. 22
      src/Numerics/LinearAlgebra/Solvers/StopCriterium/IIterationStopCriterium.cs
  35. 6
      src/Numerics/LinearAlgebra/Solvers/StopCriterium/StopLevel.cs
  36. 9
      src/Numerics/Numerics.csproj
  37. 13
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/BiCgStabTest.cs
  38. 15
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/GpBiCgTest.cs
  39. 15
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/MlkBiCgStabTest.cs
  40. 15
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/Iterative/TFQMRTest.cs
  41. 37
      src/UnitTests/LinearAlgebraTests/Complex/Solvers/IteratorTest.cs
  42. 13
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/BiCgStabTest.cs
  43. 13
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/GpBiCgTest.cs
  44. 13
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/MlkBiCgStabTest.cs
  45. 13
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/Iterative/TFQMRTest.cs
  46. 37
      src/UnitTests/LinearAlgebraTests/Complex32/Solvers/IteratorTest.cs
  47. 11
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/BiCgStabTest.cs
  48. 11
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/GpBiCgTest.cs
  49. 11
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/MlkBiCgStabTest.cs
  50. 11
      src/UnitTests/LinearAlgebraTests/Double/Solvers/Iterative/TFQMRTest.cs
  51. 31
      src/UnitTests/LinearAlgebraTests/Double/Solvers/IteratorTest.cs
  52. 11
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/BiCgStabTest.cs
  53. 11
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/GpBiCgTest.cs
  54. 11
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/MlkBiCgStabTest.cs
  55. 11
      src/UnitTests/LinearAlgebraTests/Single/Solvers/Iterative/TFQMRTest.cs
  56. 31
      src/UnitTests/LinearAlgebraTests/Single/Solvers/IteratorTest.cs

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

@ -30,6 +30,7 @@ using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace Examples.LinearAlgebra.IterativeSolversExamples
{
@ -101,7 +102,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
var residualStopCriterium = new ResidualStopCriterium(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator(new IIterationStopCriterium[] { iterationCountStopCriterium, residualStopCriterium });
var monitor = new Iterator(new IIterationStopCriterium<double>[] { iterationCountStopCriterium, residualStopCriterium });
// Create Bi-Conjugate Gradient Stabilized solver
var solver = new BiCgStab(monitor);

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

@ -31,6 +31,7 @@ using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace Examples.LinearAlgebra.IterativeSolversExamples
{
@ -100,7 +101,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
var residualStopCriterium = new ResidualStopCriterium(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator(new IIterationStopCriterium[] { iterationCountStopCriterium, residualStopCriterium });
var monitor = new Iterator(new IIterationStopCriterium<double>[] { iterationCountStopCriterium, residualStopCriterium });
// Load all suitable solvers from current assembly. Below in this example, there is user-defined solver
// "class UserBiCgStab : IIterativeSolverSetup<double>" which uses regular BiCgStab solver. But user may create any other solver

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

@ -30,6 +30,7 @@ using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace Examples.LinearAlgebra.IterativeSolversExamples
{
@ -99,7 +100,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
var residualStopCriterium = new ResidualStopCriterium(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator(new IIterationStopCriterium[] { iterationCountStopCriterium, residualStopCriterium });
var monitor = new Iterator(new IIterationStopCriterium<double>[] { iterationCountStopCriterium, residualStopCriterium });
// Create Generalized Product Bi-Conjugate Gradient solver
var solver = new GpBiCg(monitor);

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

@ -30,6 +30,7 @@ using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace Examples.LinearAlgebra.IterativeSolversExamples
{
@ -100,7 +101,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
var residualStopCriterium = new ResidualStopCriterium(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator(new IIterationStopCriterium[] { iterationCountStopCriterium, residualStopCriterium });
var monitor = new Iterator(new IIterationStopCriterium<double>[] { iterationCountStopCriterium, residualStopCriterium });
// Create Multiple-Lanczos Bi-Conjugate Gradient Stabilized solver
var solver = new MlkBiCgStab(monitor);

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

@ -30,6 +30,7 @@ using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace Examples.LinearAlgebra.IterativeSolversExamples
{
@ -100,7 +101,7 @@ namespace Examples.LinearAlgebra.IterativeSolversExamples
var residualStopCriterium = new ResidualStopCriterium(1e-10);
// Create monitor with defined stop criteriums
var monitor = new Iterator(new IIterationStopCriterium[] { iterationCountStopCriterium, residualStopCriterium });
var monitor = new Iterator(new IIterationStopCriterium<double>[] { iterationCountStopCriterium, residualStopCriterium });
// Create Transpose Free Quasi-Minimal Residual solver
var solver = new TFQMR(monitor);

14
src/Numerics/LinearAlgebra/Complex/Solvers/IIterator.cs

@ -28,9 +28,9 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using System;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
{
@ -47,26 +47,26 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
public interface IIterator
{
/// <summary>
/// Adds an <see cref="IIterationStopCriterium"/> to the internal collection of stop-criteria. Only a
/// Adds an <see cref="IIterationStopCriterium{T}"/> to the internal collection of stop-criteria. Only a
/// single stop criterium of each type can be stored.
/// </summary>
/// <param name="stopCriterium">The stop criterium to add.</param>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="stopCriterium"/> is <see langword="null" />.</exception>
/// <exception cref="ArgumentException">Thrown if <paramref name="stopCriterium"/> is of the same type as an already stored criterium.</exception>
void Add(IIterationStopCriterium stopCriterium);
void Add(IIterationStopCriterium<Complex> stopCriterium);
/// <summary>
/// Removes the <see cref="IIterationStopCriterium"/> from the internal collection.
/// Removes the <see cref="IIterationStopCriterium{T}"/> from the internal collection.
/// </summary>
/// <param name="stopCriterium">The stop criterium that must be removed.</param>
void Remove(IIterationStopCriterium stopCriterium);
void Remove(IIterationStopCriterium<Complex> stopCriterium);
/// <summary>
/// Indicates if the specific stop criterium is stored by the <see cref="IIterator"/>.
/// </summary>
/// <param name="stopCriterium">The stop criterium.</param>
/// <returns><c>true</c> if the <see cref="IIterator"/> contains the stop criterium; otherwise <c>false</c>.</returns>
bool Contains(IIterationStopCriterium stopCriterium);
bool Contains(IIterationStopCriterium<Complex> stopCriterium);
/// <summary>
/// Indicates to the iterator that the iterative process has been cancelled.

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

@ -30,6 +30,7 @@
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.Properties;
using System;
using System.Collections.Generic;
@ -55,7 +56,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
private static readonly ICalculationStatus DefaultStatus = new CalculationIndetermined();
/// <summary>
/// Creates a default iterator with all the <see cref="IIterationStopCriterium"/> objects.
/// Creates a default iterator with all the <see cref="IIterationStopCriterium{T}"/> objects.
/// </summary>
/// <returns>A new <see cref="IIterator"/> object.</returns>
public static IIterator CreateDefault()
@ -73,7 +74,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
/// The collection that holds all the stop criteria and the flag indicating if they should be added
/// to the child iterators.
/// </summary>
private readonly Dictionary<Type, IIterationStopCriterium> _stopCriterias = new Dictionary<Type, IIterationStopCriterium>();
private readonly Dictionary<Type, IIterationStopCriterium<Complex>> _stopCriterias = new Dictionary<Type, IIterationStopCriterium<Complex>>();
/// <summary>
/// The status of the iterator.
@ -100,7 +101,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
/// of the stop criteria will be passed on to child iterators.
/// </param>
/// <exception cref="ArgumentException">Thrown if <paramref name="stopCriteria"/> contains multiple stop criteria of the same type.</exception>
public Iterator(IEnumerable<IIterationStopCriterium> stopCriteria)
public Iterator(IEnumerable<IIterationStopCriterium<Complex>> stopCriteria)
{
// Add the stop criteria
if (stopCriteria == null)
@ -124,7 +125,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
/// Thrown if <paramref name="stopCriterium"/> is of the same type as an already
/// stored criterium.
/// </exception>
public void Add(IIterationStopCriterium stopCriterium)
public void Add(IIterationStopCriterium<Complex> stopCriterium)
{
if (stopCriterium == null)
{
@ -144,7 +145,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
/// Removes the <see cref="IIterationStopCriterium"/> from the internal collection.
/// </summary>
/// <param name="stopCriterium">The stop criterium that must be removed.</param>
public void Remove(IIterationStopCriterium stopCriterium)
public void Remove(IIterationStopCriterium<Complex> stopCriterium)
{
if (stopCriterium == null)
{
@ -165,7 +166,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
/// </summary>
/// <param name="stopCriterium">The stop criterium.</param>
/// <returns><c>true</c> if the <see cref="IIterator"/> contains the stop criterium; otherwise <c>false</c>.</returns>
public bool Contains(IIterationStopCriterium stopCriterium)
public bool Contains(IIterationStopCriterium<Complex> stopCriterium)
{
return stopCriterium != null && _stopCriterias.ContainsKey(stopCriterium.GetType());
}
@ -186,7 +187,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers
/// Gets an <c>IEnumerator</c> that enumerates over all the stored stop criteria.
/// </summary>
/// <remarks>Used for testing only.</remarks>
internal IEnumerable<IIterationStopCriterium> StoredStopCriteria
internal IEnumerable<IIterationStopCriterium<Complex>> StoredStopCriteria
{
get
{

4
src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/DivergenceStopCriterium.cs

@ -45,7 +45,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
/// <summary>
/// Monitors an iterative calculation for signs of divergence.
/// </summary>
public sealed class DivergenceStopCriterium : IIterationStopCriterium
public sealed class DivergenceStopCriterium : IIterationStopCriterium<Complex>
{
/// <summary>
/// Default value for the maximum relative increase that the
@ -380,7 +380,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
/// Clones the current <see cref="DivergenceStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="DivergenceStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<Complex> Clone()
{
return new DivergenceStopCriterium(_maximumRelativeIncrease, _minimumNumberOfIterations);
}

4
src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/FailureStopCriterium.cs

@ -46,7 +46,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors residuals for NaN's.
/// </summary>
public sealed class FailureStopCriterium : IIterationStopCriterium
public sealed class FailureStopCriterium : IIterationStopCriterium<Complex>
{
/// <summary>
/// Defines the default last iteration number. Set to -1 because iterations normally
@ -188,7 +188,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
/// Clones the current <see cref="FailureStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<Complex> Clone()
{
return new FailureStopCriterium();
}

81
src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/IIterationStopCriterium.cs

@ -1,81 +0,0 @@
// <copyright file="IIterationStopCriterium.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;
namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
{
#if NOSYSNUMERICS
using Complex = Numerics.Complex;
#else
using Complex = System.Numerics.Complex;
#endif
/// <summary>
/// The base interface for classes that provide stop criteria for iterative calculations.
/// </summary>
public interface IIterationStopCriterium
{
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium"/>. Status is set to <c>Status</c> field of current object.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
/// <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>
void DetermineStatus(int iterationNumber, Vector<Complex> solutionVector, Vector<Complex> sourceVector, Vector<Complex> residualVector);
/// <summary>
/// Gets the current calculation status.
/// </summary>
/// <remarks><see langword="null" /> is not a legal value. Status should be set in <see cref="DetermineStatus"/> implementation.</remarks>
ICalculationStatus Status { get; }
/// <summary>
/// Resets the <see cref="IIterationStopCriterium"/> to the pre-calculation state.
/// </summary>
/// <remarks>To implementers: Invoking this method should not clear the user defined
/// property values, only the state that is used to track the progress of the
/// calculation.</remarks>
void ResetToPrecalculationState();
/// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IIterationStopCriterium"/> monitors.
/// </summary>
StopLevel StopLevel { get; }
IIterationStopCriterium Clone();
}
}

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

@ -46,7 +46,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
/// Defines an <see cref="IIterationStopCriterium"/> that monitors the numbers of iteration
/// steps as stop criterium.
/// </summary>
public sealed class IterationCountStopCriterium : IIterationStopCriterium
public sealed class IterationCountStopCriterium : IIterationStopCriterium<Complex>
{
/// <summary>
/// The default value for the maximum number of iterations the process is allowed
@ -214,7 +214,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
/// Clones the current <see cref="IterationCountStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<Complex> Clone()
{
return new IterationCountStopCriterium(_maximumNumberOfIterations);
}

4
src/Numerics/LinearAlgebra/Complex/Solvers/StopCriterium/ResidualStopCriterium.cs

@ -46,7 +46,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors residuals as stop criterium.
/// </summary>
public sealed class ResidualStopCriterium : IIterationStopCriterium
public sealed class ResidualStopCriterium : IIterationStopCriterium<Complex>
{
/// <summary>
/// The default value for the maximum value of the residual.
@ -396,7 +396,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium
/// Clones the current <see cref="ResidualStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="ResidualStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<Complex> Clone()
{
return new ResidualStopCriterium(_maximum, _minimumIterationsBelowMaximum);
}

14
src/Numerics/LinearAlgebra/Complex32/Solvers/IIterator.cs

@ -28,9 +28,9 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using System;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
{
@ -42,26 +42,26 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
public interface IIterator
{
/// <summary>
/// Adds an <see cref="IIterationStopCriterium"/> to the internal collection of stop-criteria. Only a
/// Adds an <see cref="IIterationStopCriterium{T}"/> to the internal collection of stop-criteria. Only a
/// single stop criterium of each type can be stored.
/// </summary>
/// <param name="stopCriterium">The stop criterium to add.</param>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="stopCriterium"/> is <see langword="null" />.</exception>
/// <exception cref="ArgumentException">Thrown if <paramref name="stopCriterium"/> is of the same type as an already stored criterium.</exception>
void Add(IIterationStopCriterium stopCriterium);
void Add(IIterationStopCriterium<Complex32> stopCriterium);
/// <summary>
/// Removes the <see cref="IIterationStopCriterium"/> from the internal collection.
/// Removes the <see cref="IIterationStopCriterium{T}"/> from the internal collection.
/// </summary>
/// <param name="stopCriterium">The stop criterium that must be removed.</param>
void Remove(IIterationStopCriterium stopCriterium);
void Remove(IIterationStopCriterium<Complex32> stopCriterium);
/// <summary>
/// Indicates if the specific stop criterium is stored by the <see cref="IIterator"/>.
/// </summary>
/// <param name="stopCriterium">The stop criterium.</param>
/// <returns><c>true</c> if the <see cref="IIterator"/> contains the stop criterium; otherwise <c>false</c>.</returns>
bool Contains(IIterationStopCriterium stopCriterium);
bool Contains(IIterationStopCriterium<Complex32> stopCriterium);
/// <summary>
/// Indicates to the iterator that the iterative process has been cancelled.

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

@ -28,12 +28,13 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.Properties;
using System;
using System.Collections.Generic;
using System.Linq;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.Properties;
namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
{
@ -68,7 +69,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
/// The collection that holds all the stop criteria and the flag indicating if they should be added
/// to the child iterators.
/// </summary>
private readonly Dictionary<Type, IIterationStopCriterium> _stopCriterias = new Dictionary<Type, IIterationStopCriterium>();
private readonly Dictionary<Type, IIterationStopCriterium<Complex32>> _stopCriterias = new Dictionary<Type, IIterationStopCriterium<Complex32>>();
/// <summary>
/// The status of the iterator.
@ -95,7 +96,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
/// of the stop criteria will be passed on to child iterators.
/// </param>
/// <exception cref="ArgumentException">Thrown if <paramref name="stopCriteria"/> contains multiple stop criteria of the same type.</exception>
public Iterator(IEnumerable<IIterationStopCriterium> stopCriteria)
public Iterator(IEnumerable<IIterationStopCriterium<Complex32>> stopCriteria)
{
// Add the stop criteria
if (stopCriteria == null)
@ -119,7 +120,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
/// Thrown if <paramref name="stopCriterium"/> is of the same type as an already
/// stored criterium.
/// </exception>
public void Add(IIterationStopCriterium stopCriterium)
public void Add(IIterationStopCriterium<Complex32> stopCriterium)
{
if (stopCriterium == null)
{
@ -139,7 +140,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
/// Removes the <see cref="IIterationStopCriterium"/> from the internal collection.
/// </summary>
/// <param name="stopCriterium">The stop criterium that must be removed.</param>
public void Remove(IIterationStopCriterium stopCriterium)
public void Remove(IIterationStopCriterium<Complex32> stopCriterium)
{
if (stopCriterium == null)
{
@ -160,7 +161,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
/// </summary>
/// <param name="stopCriterium">The stop criterium.</param>
/// <returns><c>true</c> if the <see cref="IIterator"/> contains the stop criterium; otherwise <c>false</c>.</returns>
public bool Contains(IIterationStopCriterium stopCriterium)
public bool Contains(IIterationStopCriterium<Complex32> stopCriterium)
{
return stopCriterium != null && _stopCriterias.ContainsKey(stopCriterium.GetType());
}
@ -181,7 +182,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers
/// Gets an <c>IEnumerator</c> that enumerates over all the stored stop criteria.
/// </summary>
/// <remarks>Used for testing only.</remarks>
internal IEnumerable<IIterationStopCriterium> StoredStopCriteria
internal IEnumerable<IIterationStopCriterium<Complex32>> StoredStopCriteria
{
get
{

4
src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/DivergenceStopCriterium.cs

@ -40,7 +40,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
/// <summary>
/// Monitors an iterative calculation for signs of divergence.
/// </summary>
public sealed class DivergenceStopCriterium : IIterationStopCriterium
public sealed class DivergenceStopCriterium : IIterationStopCriterium<Complex32>
{
/// <summary>
/// Default value for the maximum relative increase that the
@ -375,7 +375,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
/// Clones the current <see cref="DivergenceStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="DivergenceStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<Complex32> Clone()
{
return new DivergenceStopCriterium(_maximumRelativeIncrease, _minimumNumberOfIterations);
}

6
src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/FailureStopCriterium.cs

@ -41,7 +41,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors residuals for NaN's.
/// </summary>
public sealed class FailureStopCriterium : IIterationStopCriterium
public sealed class FailureStopCriterium : IIterationStopCriterium<Complex32>
{
/// <summary>
/// Defines the default last iteration number. Set to -1 because iterations normally
@ -167,7 +167,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
/// <summary>
/// Gets the <see cref="StopLevel"/>which indicates what sort of stop criterium this
/// <see cref="IIterationStopCriterium"/> monitors.
/// <see cref="IIterationStopCriterium{T}"/> monitors.
/// </summary>
/// <value>Returns <see cref="CalculationFailure"/>.</value>
public StopLevel StopLevel
@ -183,7 +183,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
/// Clones the current <see cref="FailureStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<Complex32> Clone()
{
return new FailureStopCriterium();
}

76
src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/IIterationStopCriterium.cs

@ -1,76 +0,0 @@
// <copyright file="IIterationStopCriterium.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;
namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
{
using Numerics;
/// <summary>
/// The base interface for classes that provide stop criteria for iterative calculations.
/// </summary>
public interface IIterationStopCriterium
{
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium"/>. Status is set to <c>Status</c> field of current object.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
/// <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>
void DetermineStatus(int iterationNumber, Vector<Complex32> solutionVector, Vector<Complex32> sourceVector, Vector<Complex32> residualVector);
/// <summary>
/// Gets the current calculation status.
/// </summary>
/// <remarks><see langword="null" /> is not a legal value. Status should be set in <see cref="DetermineStatus"/> implementation.</remarks>
ICalculationStatus Status { get; }
/// <summary>
/// Resets the <see cref="IIterationStopCriterium"/> to the pre-calculation state.
/// </summary>
/// <remarks>To implementers: Invoking this method should not clear the user defined
/// property values, only the state that is used to track the progress of the
/// calculation.</remarks>
void ResetToPrecalculationState();
/// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IIterationStopCriterium"/> monitors.
/// </summary>
StopLevel StopLevel { get; }
IIterationStopCriterium Clone();
}
}

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

@ -28,20 +28,20 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
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"/> that monitors the numbers of iteration
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors the numbers of iteration
/// steps as stop criterium.
/// </summary>
public sealed class IterationCountStopCriterium : IIterationStopCriterium
public sealed class IterationCountStopCriterium : IIterationStopCriterium<Complex32>
{
/// <summary>
/// The default value for the maximum number of iterations the process is allowed
@ -209,7 +209,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
/// Clones the current <see cref="IterationCountStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<Complex32> Clone()
{
return new IterationCountStopCriterium(_maximumNumberOfIterations);
}

10
src/Numerics/LinearAlgebra/Complex32/Solvers/StopCriterium/ResidualStopCriterium.cs

@ -28,20 +28,20 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using System.Diagnostics;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.Properties;
using System;
using System.Diagnostics;
namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
{
using Numerics;
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors residuals as stop criterium.
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals as stop criterium.
/// </summary>
public sealed class ResidualStopCriterium : IIterationStopCriterium
public sealed class ResidualStopCriterium : IIterationStopCriterium<Complex32>
{
/// <summary>
/// The default value for the maximum value of the residual.
@ -391,7 +391,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium
/// Clones the current <see cref="ResidualStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="ResidualStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<Complex32> Clone()
{
return new ResidualStopCriterium(_maximum, _minimumIterationsBelowMaximum);
}

12
src/Numerics/LinearAlgebra/Double/Solvers/IIterator.cs

@ -28,7 +28,7 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using System;
@ -40,26 +40,26 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
public interface IIterator
{
/// <summary>
/// Adds an <see cref="IIterationStopCriterium"/> to the internal collection of stop-criteria. Only a
/// Adds an <see cref="IIterationStopCriterium{T}"/> to the internal collection of stop-criteria. Only a
/// single stop criterium of each type can be stored.
/// </summary>
/// <param name="stopCriterium">The stop criterium to add.</param>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="stopCriterium"/> is <see langword="null" />.</exception>
/// <exception cref="ArgumentException">Thrown if <paramref name="stopCriterium"/> is of the same type as an already stored criterium.</exception>
void Add(IIterationStopCriterium stopCriterium);
void Add(IIterationStopCriterium<double> stopCriterium);
/// <summary>
/// Removes the <see cref="IIterationStopCriterium"/> from the internal collection.
/// Removes the <see cref="IIterationStopCriterium{T}"/> from the internal collection.
/// </summary>
/// <param name="stopCriterium">The stop criterium that must be removed.</param>
void Remove(IIterationStopCriterium stopCriterium);
void Remove(IIterationStopCriterium<double> stopCriterium);
/// <summary>
/// Indicates if the specific stop criterium is stored by the <see cref="IIterator"/>.
/// </summary>
/// <param name="stopCriterium">The stop criterium.</param>
/// <returns><c>true</c> if the <see cref="IIterator"/> contains the stop criterium; otherwise <c>false</c>.</returns>
bool Contains(IIterationStopCriterium stopCriterium);
bool Contains(IIterationStopCriterium<double> stopCriterium);
/// <summary>
/// Indicates to the iterator that the iterative process has been cancelled.

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

@ -30,6 +30,7 @@
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.Properties;
using System;
using System.Collections.Generic;
@ -48,7 +49,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
private static readonly ICalculationStatus DefaultStatus = new CalculationIndetermined();
/// <summary>
/// Creates a default iterator with all the <see cref="IIterationStopCriterium"/> objects.
/// Creates a default iterator with all the <see cref="IIterationStopCriterium{T}"/> objects.
/// </summary>
/// <returns>A new <see cref="IIterator"/> object.</returns>
public static IIterator CreateDefault()
@ -66,7 +67,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
/// The collection that holds all the stop criteria and the flag indicating if they should be added
/// to the child iterators.
/// </summary>
private readonly Dictionary<Type, IIterationStopCriterium> _stopCriterias = new Dictionary<Type, IIterationStopCriterium>();
private readonly Dictionary<Type, IIterationStopCriterium<double>> _stopCriterias = new Dictionary<Type, IIterationStopCriterium<double>>();
/// <summary>
/// The status of the iterator.
@ -93,7 +94,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
/// of the stop criteria will be passed on to child iterators.
/// </param>
/// <exception cref="ArgumentException">Thrown if <paramref name="stopCriteria"/> contains multiple stop criteria of the same type.</exception>
public Iterator(IEnumerable<IIterationStopCriterium> stopCriteria)
public Iterator(IEnumerable<IIterationStopCriterium<double>> stopCriteria)
{
// Add the stop criteria
if (stopCriteria == null)
@ -117,7 +118,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
/// Thrown if <paramref name="stopCriterium"/> is of the same type as an already
/// stored criterium.
/// </exception>
public void Add(IIterationStopCriterium stopCriterium)
public void Add(IIterationStopCriterium<double> stopCriterium)
{
if (stopCriterium == null)
{
@ -134,10 +135,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
}
/// <summary>
/// Removes the <see cref="IIterationStopCriterium"/> from the internal collection.
/// Removes the <see cref="IIterationStopCriterium{T}"/> from the internal collection.
/// </summary>
/// <param name="stopCriterium">The stop criterium that must be removed.</param>
public void Remove(IIterationStopCriterium stopCriterium)
public void Remove(IIterationStopCriterium<double> stopCriterium)
{
if (stopCriterium == null)
{
@ -158,7 +159,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
/// </summary>
/// <param name="stopCriterium">The stop criterium.</param>
/// <returns><c>true</c> if the <see cref="IIterator"/> contains the stop criterium; otherwise <c>false</c>.</returns>
public bool Contains(IIterationStopCriterium stopCriterium)
public bool Contains(IIterationStopCriterium<double> stopCriterium)
{
return stopCriterium != null && _stopCriterias.ContainsKey(stopCriterium.GetType());
}
@ -179,7 +180,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers
/// Gets an <c>IEnumerator</c> that enumerates over all the stored stop criteria.
/// </summary>
/// <remarks>Used for testing only.</remarks>
internal IEnumerable<IIterationStopCriterium> StoredStopCriteria
internal IEnumerable<IIterationStopCriterium<double>> StoredStopCriteria
{
get
{

4
src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/DivergenceStopCriterium.cs

@ -38,7 +38,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
/// <summary>
/// Monitors an iterative calculation for signs of divergence.
/// </summary>
public sealed class DivergenceStopCriterium : IIterationStopCriterium
public sealed class DivergenceStopCriterium : IIterationStopCriterium<double>
{
/// <summary>
/// Default value for the maximum relative increase that the
@ -373,7 +373,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
/// Clones the current <see cref="DivergenceStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="DivergenceStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<double> Clone()
{
return new DivergenceStopCriterium(_maximumRelativeIncrease, _minimumNumberOfIterations);
}

4
src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/FailureStopCriterium.cs

@ -39,7 +39,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors residuals for NaN's.
/// </summary>
public sealed class FailureStopCriterium : IIterationStopCriterium
public sealed class FailureStopCriterium : IIterationStopCriterium<double>
{
/// <summary>
/// Defines the default last iteration number. Set to -1 because iterations normally
@ -181,7 +181,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
/// Clones the current <see cref="FailureStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<double> Clone()
{
return new FailureStopCriterium();
}

74
src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/IIterationStopCriterium.cs

@ -1,74 +0,0 @@
// <copyright file="IIterationStopCriterium.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;
namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
{
/// <summary>
/// The base interface for classes that provide stop criteria for iterative calculations.
/// </summary>
public interface IIterationStopCriterium
{
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium"/>. Status is set to <c>Status</c> field of current object.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
/// <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>
void DetermineStatus(int iterationNumber, Vector<double> solutionVector, Vector<double> sourceVector, Vector<double> residualVector);
/// <summary>
/// Gets the current calculation status.
/// </summary>
/// <remarks><see langword="null" /> is not a legal value. Status should be set in <see cref="DetermineStatus"/> implementation.</remarks>
ICalculationStatus Status { get; }
/// <summary>
/// Resets the <see cref="IIterationStopCriterium"/> to the pre-calculation state.
/// </summary>
/// <remarks>To implementers: Invoking this method should not clear the user defined
/// property values, only the state that is used to track the progress of the
/// calculation.</remarks>
void ResetToPrecalculationState();
/// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IIterationStopCriterium"/> monitors.
/// </summary>
StopLevel StopLevel { get; }
IIterationStopCriterium Clone();
}
}

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

@ -28,18 +28,18 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
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"/> that monitors the numbers of iteration
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors the numbers of iteration
/// steps as stop criterium.
/// </summary>
public sealed class IterationCountStopCriterium : IIterationStopCriterium
public sealed class IterationCountStopCriterium : IIterationStopCriterium<double>
{
/// <summary>
/// The default value for the maximum number of iterations the process is allowed
@ -207,7 +207,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
/// Clones the current <see cref="IterationCountStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<double> Clone()
{
return new IterationCountStopCriterium(_maximumNumberOfIterations);
}

6
src/Numerics/LinearAlgebra/Double/Solvers/StopCriterium/ResidualStopCriterium.cs

@ -37,9 +37,9 @@ using System.Diagnostics;
namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors residuals as stop criterium.
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals as stop criterium.
/// </summary>
public sealed class ResidualStopCriterium : IIterationStopCriterium
public sealed class ResidualStopCriterium : IIterationStopCriterium<double>
{
/// <summary>
/// The default value for the maximum value of the residual.
@ -389,7 +389,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium
/// Clones the current <see cref="ResidualStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="ResidualStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<double> Clone()
{
return new ResidualStopCriterium(_maximum, _minimumIterationsBelowMaximum);
}

2
src/Numerics/LinearAlgebra/ISolver.cs → src/Numerics/LinearAlgebra/Factorization/ISolver.cs

@ -30,7 +30,7 @@
using System;
namespace MathNet.Numerics.LinearAlgebra
namespace MathNet.Numerics.LinearAlgebra.Factorization
{
/// <summary>
/// Classes that solves a system of linear equations, <c>AX = B</c>.

14
src/Numerics/LinearAlgebra/Single/Solvers/IIterator.cs

@ -28,9 +28,9 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using System;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
{
@ -40,26 +40,26 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
public interface IIterator
{
/// <summary>
/// Adds an <see cref="IIterationStopCriterium"/> to the internal collection of stop-criteria. Only a
/// Adds an <see cref="IIterationStopCriterium{T}"/> to the internal collection of stop-criteria. Only a
/// single stop criterium of each type can be stored.
/// </summary>
/// <param name="stopCriterium">The stop criterium to add.</param>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="stopCriterium"/> is <see langword="null" />.</exception>
/// <exception cref="ArgumentException">Thrown if <paramref name="stopCriterium"/> is of the same type as an already stored criterium.</exception>
void Add(IIterationStopCriterium stopCriterium);
void Add(IIterationStopCriterium<float> stopCriterium);
/// <summary>
/// Removes the <see cref="IIterationStopCriterium"/> from the internal collection.
/// Removes the <see cref="IIterationStopCriterium{T}"/> from the internal collection.
/// </summary>
/// <param name="stopCriterium">The stop criterium that must be removed.</param>
void Remove(IIterationStopCriterium stopCriterium);
void Remove(IIterationStopCriterium<float> stopCriterium);
/// <summary>
/// Indicates if the specific stop criterium is stored by the <see cref="IIterator"/>.
/// </summary>
/// <param name="stopCriterium">The stop criterium.</param>
/// <returns><c>true</c> if the <see cref="IIterator"/> contains the stop criterium; otherwise <c>false</c>.</returns>
bool Contains(IIterationStopCriterium stopCriterium);
bool Contains(IIterationStopCriterium<float> stopCriterium);
/// <summary>
/// Indicates to the iterator that the iterative process has been cancelled.

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

@ -30,6 +30,7 @@
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using MathNet.Numerics.Properties;
using System;
using System.Collections.Generic;
@ -48,7 +49,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
private static readonly ICalculationStatus DefaultStatus = new CalculationIndetermined();
/// <summary>
/// Creates a default iterator with all the <see cref="IIterationStopCriterium"/> objects.
/// Creates a default iterator with all the <see cref="IIterationStopCriterium{T}"/> objects.
/// </summary>
/// <returns>A new <see cref="IIterator"/> object.</returns>
public static IIterator CreateDefault()
@ -66,7 +67,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
/// The collection that holds all the stop criteria and the flag indicating if they should be added
/// to the child iterators.
/// </summary>
private readonly Dictionary<Type, IIterationStopCriterium> _stopCriterias = new Dictionary<Type, IIterationStopCriterium>();
private readonly Dictionary<Type, IIterationStopCriterium<float>> _stopCriterias = new Dictionary<Type, IIterationStopCriterium<float>>();
/// <summary>
/// The status of the iterator.
@ -93,7 +94,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
/// of the stop criteria will be passed on to child iterators.
/// </param>
/// <exception cref="ArgumentException">Thrown if <paramref name="stopCriteria"/> contains multiple stop criteria of the same type.</exception>
public Iterator(IEnumerable<IIterationStopCriterium> stopCriteria)
public Iterator(IEnumerable<IIterationStopCriterium<float>> stopCriteria)
{
// Add the stop criteria
if (stopCriteria == null)
@ -108,7 +109,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
}
/// <summary>
/// Adds an <see cref="IIterationStopCriterium"/> to the internal collection of stop-criteria. Only a
/// Adds an <see cref="IIterationStopCriterium{T}"/> to the internal collection of stop-criteria. Only a
/// single stop criterium of each type can be stored.
/// </summary>
/// <param name="stopCriterium">The stop criterium to add.</param>
@ -117,7 +118,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
/// Thrown if <paramref name="stopCriterium"/> is of the same type as an already
/// stored criterium.
/// </exception>
public void Add(IIterationStopCriterium stopCriterium)
public void Add(IIterationStopCriterium<float> stopCriterium)
{
if (stopCriterium == null)
{
@ -134,10 +135,10 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
}
/// <summary>
/// Removes the <see cref="IIterationStopCriterium"/> from the internal collection.
/// Removes the <see cref="IIterationStopCriterium{T}"/> from the internal collection.
/// </summary>
/// <param name="stopCriterium">The stop criterium that must be removed.</param>
public void Remove(IIterationStopCriterium stopCriterium)
public void Remove(IIterationStopCriterium<float> stopCriterium)
{
if (stopCriterium == null)
{
@ -158,7 +159,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
/// </summary>
/// <param name="stopCriterium">The stop criterium.</param>
/// <returns><c>true</c> if the <see cref="IIterator"/> contains the stop criterium; otherwise <c>false</c>.</returns>
public bool Contains(IIterationStopCriterium stopCriterium)
public bool Contains(IIterationStopCriterium<float> stopCriterium)
{
return stopCriterium != null && _stopCriterias.ContainsKey(stopCriterium.GetType());
}
@ -179,7 +180,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers
/// Gets an <c>IEnumerator</c> that enumerates over all the stored stop criteria.
/// </summary>
/// <remarks>Used for testing only.</remarks>
internal IEnumerable<IIterationStopCriterium> StoredStopCriteria
internal IEnumerable<IIterationStopCriterium<float>> StoredStopCriteria
{
get
{

4
src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/DivergenceStopCriterium.cs

@ -38,7 +38,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// <summary>
/// Monitors an iterative calculation for signs of divergence.
/// </summary>
public sealed class DivergenceStopCriterium : IIterationStopCriterium
public sealed class DivergenceStopCriterium : IIterationStopCriterium<float>
{
/// <summary>
/// Default value for the maximum relative increase that the
@ -373,7 +373,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// Clones the current <see cref="DivergenceStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="DivergenceStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<float> Clone()
{
return new DivergenceStopCriterium(_maximumRelativeIncrease, _minimumNumberOfIterations);
}

6
src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/FailureStopCriterium.cs

@ -37,9 +37,9 @@ using System.Diagnostics;
namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors residuals for NaN's.
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals for NaN's.
/// </summary>
public sealed class FailureStopCriterium : IIterationStopCriterium
public sealed class FailureStopCriterium : IIterationStopCriterium<float>
{
/// <summary>
/// Defines the default last iteration number. Set to -1 because iterations normally
@ -181,7 +181,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// Clones the current <see cref="FailureStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="FailureStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<float> Clone()
{
return new FailureStopCriterium();
}

6
src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/IterationCountStopCriterium.cs

@ -36,10 +36,10 @@ using System.Diagnostics;
namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors the numbers of iteration
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors the numbers of iteration
/// steps as stop criterium.
/// </summary>
public sealed class IterationCountStopCriterium : IIterationStopCriterium
public sealed class IterationCountStopCriterium : IIterationStopCriterium<float>
{
/// <summary>
/// The default value for the maximum number of iterations the process is allowed
@ -207,7 +207,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// Clones the current <see cref="IterationCountStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="IterationCountStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<float> Clone()
{
return new IterationCountStopCriterium(_maximumNumberOfIterations);
}

12
src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/ResidualStopCriterium.cs

@ -37,9 +37,9 @@ using System.Diagnostics;
namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
{
/// <summary>
/// Defines an <see cref="IIterationStopCriterium"/> that monitors residuals as stop criterium.
/// Defines an <see cref="IIterationStopCriterium{T}"/> that monitors residuals as stop criterium.
/// </summary>
public sealed class ResidualStopCriterium : IIterationStopCriterium
public sealed class ResidualStopCriterium : IIterationStopCriterium<float>
{
/// <summary>
/// The default value for the maximum value of the residual.
@ -211,7 +211,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium"/>. Result is set into <c>Status</c> field.
/// 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>
@ -362,7 +362,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
}
/// <summary>
/// Resets the <see cref="IIterationStopCriterium"/> to the pre-calculation state.
/// Resets the <see cref="IIterationStopCriterium{T}"/> to the pre-calculation state.
/// </summary>
public void ResetToPrecalculationState()
{
@ -373,7 +373,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IIterationStopCriterium"/> monitors.
/// <see cref="IIterationStopCriterium{T}"/> monitors.
/// </summary>
/// <value>Returns <see cref="StopLevel"/>.</value>
public StopLevel StopLevel
@ -389,7 +389,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// Clones the current <see cref="ResidualStopCriterium"/> and its settings.
/// </summary>
/// <returns>A new instance of the <see cref="ResidualStopCriterium"/> class.</returns>
public IIterationStopCriterium Clone()
public IIterationStopCriterium<float> Clone()
{
return new ResidualStopCriterium(_maximum, _minimumIterationsBelowMaximum);
}

22
src/Numerics/LinearAlgebra/Single/Solvers/StopCriterium/IIterationStopCriterium.cs → src/Numerics/LinearAlgebra/Solvers/StopCriterium/IIterationStopCriterium.cs

@ -3,7 +3,9 @@
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
// Copyright (c) 2009-2010 Math.NET
//
// Copyright (c) 2009-2013 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
@ -12,8 +14,10 @@
// 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
@ -24,19 +28,19 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
namespace MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium
{
/// <summary>
/// The base interface for classes that provide stop criteria for iterative calculations.
/// </summary>
public interface IIterationStopCriterium
public interface IIterationStopCriterium<T> where T : struct, IEquatable<T>, IFormattable
{
/// <summary>
/// Determines the status of the iterative calculation based on the stop criteria stored
/// by the current <see cref="IIterationStopCriterium"/>. Status is set to <c>Status</c> field of current object.
/// by the current IIterationStopCriterium. Status is set to <c>Status</c> field of current object.
/// </summary>
/// <param name="iterationNumber">The number of iterations that have passed so far.</param>
/// <param name="solutionVector">The vector containing the current solution values.</param>
@ -47,7 +51,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// on the invocation of this method. Therefore this method should only be called if the
/// calculation has moved forwards at least one step.
/// </remarks>
void DetermineStatus(int iterationNumber, Vector<float> solutionVector, Vector<float> sourceVector, Vector<float> residualVector);
void DetermineStatus(int iterationNumber, Vector<T> solutionVector, Vector<T> sourceVector, Vector<T> residualVector);
/// <summary>
/// Gets the current calculation status.
@ -56,7 +60,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
ICalculationStatus Status { get; }
/// <summary>
/// Resets the <see cref="IIterationStopCriterium"/> to the pre-calculation state.
/// Resets the IIterationStopCriterium to the pre-calculation state.
/// </summary>
/// <remarks>To implementers: Invoking this method should not clear the user defined
/// property values, only the state that is used to track the progress of the
@ -65,10 +69,10 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium
/// <summary>
/// Gets the <see cref="StopLevel"/> which indicates what sort of stop criterium this
/// <see cref="IIterationStopCriterium"/> monitors.
/// IIterationStopCriterium monitors.
/// </summary>
StopLevel StopLevel { get; }
IIterationStopCriterium Clone();
IIterationStopCriterium<T> Clone();
}
}

6
src/Numerics/LinearAlgebra/Solvers/StopCriterium/StopLevel.cs

@ -3,7 +3,9 @@
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
// Copyright (c) 2009-2010 Math.NET
//
// Copyright (c) 2009-2013 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
@ -12,8 +14,10 @@
// 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

9
src/Numerics/Numerics.csproj

@ -122,6 +122,7 @@
<Compile Include="Distributions\Wishart.cs" />
<Compile Include="Distributions\Zipf.cs" />
<Compile Include="LinearAlgebra\Builder.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\StopCriterium\IterationCountStopCriterium.cs" />
<Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Complex.cs" />
<Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Complex32.cs" />
<Compile Include="Providers\LinearAlgebra\Acml\AcmlLinearAlgebraProvider.Double.cs" />
@ -193,7 +194,6 @@
<Compile Include="LinearAlgebra\Complex32\Solvers\IIterativeSolverSetup.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\IIterator.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\Preconditioners\IPreConditioner.cs" />
<Compile Include="LinearAlgebra\Complex32\Solvers\StopCriterium\IIterationStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex32\SparseMatrix.cs" />
<Compile Include="LinearAlgebra\Complex32\Vector.cs" />
<Compile Include="LinearAlgebra\Complex\DenseMatrix.cs" />
@ -213,7 +213,6 @@
<Compile Include="LinearAlgebra\Complex\Solvers\IIterativeSolverSetup.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\IIterator.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\Preconditioners\IPreConditioner.cs" />
<Compile Include="LinearAlgebra\Complex\Solvers\StopCriterium\IIterationStopCriterium.cs" />
<Compile Include="LinearAlgebra\Complex\SparseMatrix.cs" />
<Compile Include="LinearAlgebra\Complex\Vector.cs" />
<Compile Include="LinearAlgebra\Double\ExtensionMethods.cs" />
@ -230,7 +229,7 @@
<Compile Include="LinearAlgebra\Double\Solvers\IIterativeSolverSetup.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\IIterator.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\Preconditioners\IPreConditioner.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\StopCriterium\IIterationStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\StopCriterium\IIterationStopCriterium.cs" />
<Compile Include="LinearAlgebra\Double\SparseMatrix.cs" />
<Compile Include="LinearAlgebra\Double\Vector.cs" />
<Compile Include="LinearAlgebra\Complex32\DenseVector.cs" />
@ -336,7 +335,6 @@
<Compile Include="LinearAlgebra\Single\Solvers\Preconditioners\UnitPreconditioner.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\DivergenceStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\FailureStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\IIterationStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\IterationCountStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\Solvers\StopCriterium\ResidualStopCriterium.cs" />
<Compile Include="LinearAlgebra\Single\SparseMatrix.cs" />
@ -354,7 +352,7 @@
<Compile Include="LinearAlgebra\Double\Factorization\UserLU.cs" />
<Compile Include="LinearAlgebra\Double\Factorization\UserQR.cs" />
<Compile Include="LinearAlgebra\Double\Factorization\UserSvd.cs" />
<Compile Include="LinearAlgebra\ISolver.cs" />
<Compile Include="LinearAlgebra\Factorization\ISolver.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\Iterative\BiCgStab.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\Iterative\CompositeSolver.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\Iterative\GpBiCg.cs" />
@ -378,7 +376,6 @@
<Compile Include="LinearAlgebra\Solvers\Status\ICalculationStatus.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\StopCriterium\DivergenceStopCriterium.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\StopCriterium\FailureStopCriterium.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\StopCriterium\IterationCountStopCriterium.cs" />
<Compile Include="LinearAlgebra\Double\Solvers\StopCriterium\ResidualStopCriterium.cs" />
<Compile Include="LinearAlgebra\Solvers\StopCriterium\StopLevel.cs" />
<Compile Include="LinearAlgebra\Double\SparseVector.cs" />

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

@ -28,13 +28,14 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterative
{
@ -95,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => Complex.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -140,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => Complex.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -218,7 +219,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => Complex.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -259,7 +260,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),
@ -291,7 +292,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),

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

@ -28,16 +28,19 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterative
{
using System.Numerics;
/// <summary>
/// Tests for Generalized Product Bi-Conjugate Gradient iterative matrix solver.
/// </summary>
@ -93,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -138,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -259,7 +262,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),
@ -291,7 +294,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),

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

@ -28,16 +28,19 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterative
{
using System.Numerics;
/// <summary>
/// Tests for Multiple-Lanczos Bi-Conjugate Gradient stabilized iterative matrix solver.
/// </summary>
@ -93,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -139,7 +142,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -258,7 +261,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),
@ -290,7 +293,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),

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

@ -28,16 +28,19 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterative
{
using System.Numerics;
/// <summary>
/// Tests of Transpose Free Quasi-Minimal Residual iterative matrix solver.
/// </summary>
@ -93,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -139,7 +142,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -258,7 +261,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),
@ -290,7 +293,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers.Iterativ
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),

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

@ -28,16 +28,19 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra.Complex;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
using System.Collections.Generic;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
{
using System.Numerics;
/// <summary>
/// Iterator tests
/// </summary>
@ -61,7 +64,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void CreateWithEmptyCollection()
{
var iterator = new Iterator(new IIterationStopCriterium[] {});
var iterator = new Iterator(new IIterationStopCriterium<Complex>[] { });
Assert.IsNotNull(iterator, "Should have an iterator");
Assert.AreEqual(0, iterator.NumberOfCriteria, "There shouldn't be any criteria");
}
@ -72,7 +75,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void CreateWithCollectionWithNulls()
{
var iterator = new Iterator(new IIterationStopCriterium[] {null, null});
var iterator = new Iterator(new IIterationStopCriterium<Complex>[] { null, null });
Assert.IsNotNull(iterator, "Should have an iterator");
Assert.AreEqual(0, iterator.NumberOfCriteria, "There shouldn't be any criteria");
}
@ -83,7 +86,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void CreateWithDuplicatesThrowsArgumentException()
{
Assert.Throws<ArgumentException>(() => new Iterator(new IIterationStopCriterium[]
Assert.Throws<ArgumentException>(() => new Iterator(new IIterationStopCriterium<Complex>[]
{
new FailureStopCriterium(),
new FailureStopCriterium()
@ -96,7 +99,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void CreateWithCollection()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -143,7 +146,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void Add()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -173,7 +176,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void RemoveWithNullStopCriteriumThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -192,7 +195,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void RemoveWithNonExistingStopCriterium()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -211,7 +214,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void Remove()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -248,7 +251,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void DetermineStatusWithNegativeIterationNumberThrowsArgumentOutOfRangeException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -270,7 +273,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void DetermineStatusWithNullSolutionVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -292,7 +295,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void DetermineStatusWithNullSourceVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -314,7 +317,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void DetermineStatusWithNullResidualVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -336,7 +339,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void DetermineStatus()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -368,7 +371,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void ResetToPrecalculationState()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -398,7 +401,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.Solvers
[Test]
public void Clone()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),

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

@ -28,13 +28,14 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterative
{
@ -95,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => Complex32.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -140,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => Complex32.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -218,7 +219,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => Complex32.One);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -263,7 +264,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
@ -306,7 +307,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))

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

@ -28,16 +28,19 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterative
{
using Numerics;
/// <summary>
/// Tests for Generalized Product Bi-Conjugate Gradient iterative matrix solver.
/// </summary>
@ -93,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -138,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -259,7 +262,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),

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

@ -33,11 +33,14 @@ using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterative
{
using Numerics;
/// <summary>
/// Tests for Multiple-Lanczos Bi-Conjugate Gradient stabilized iterative matrix solver.
/// </summary>
@ -93,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -139,7 +142,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -258,7 +261,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
@ -301,7 +304,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))

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

@ -33,11 +33,14 @@ using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterative
{
using Numerics;
/// <summary>
/// Tests of Transpose Free Quasi-Minimal Residual iterative matrix solver.
/// </summary>
@ -93,7 +96,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -139,7 +142,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +220,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -258,7 +261,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
@ -301,7 +304,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers.Iterat
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<Complex32>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))

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

@ -28,16 +28,19 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra.Complex32;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers;
using MathNet.Numerics.LinearAlgebra.Complex32.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
using System.Collections.Generic;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
{
using Numerics;
/// <summary>
/// Iterator tests
/// </summary>
@ -61,7 +64,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void CreateWithEmptyCollection()
{
var iterator = new Iterator(new IIterationStopCriterium[] {});
var iterator = new Iterator(new IIterationStopCriterium<Complex32>[] { });
Assert.IsNotNull(iterator, "Should have an iterator");
Assert.AreEqual(0, iterator.NumberOfCriteria, "There shouldn't be any criteria");
}
@ -72,7 +75,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void CreateWithCollectionWithNulls()
{
var iterator = new Iterator(new IIterationStopCriterium[] {null, null});
var iterator = new Iterator(new IIterationStopCriterium<Complex32>[] { null, null });
Assert.IsNotNull(iterator, "Should have an iterator");
Assert.AreEqual(0, iterator.NumberOfCriteria, "There shouldn't be any criteria");
}
@ -83,7 +86,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void CreateWithDuplicatesThrowsArgumentException()
{
Assert.Throws<ArgumentException>(() => new Iterator(new IIterationStopCriterium[]
Assert.Throws<ArgumentException>(() => new Iterator(new IIterationStopCriterium<Complex32>[]
{
new FailureStopCriterium(),
new FailureStopCriterium()
@ -96,7 +99,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void CreateWithCollection()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -143,7 +146,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void Add()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -173,7 +176,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void RemoveWithNullStopCriteriumThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -192,7 +195,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void RemoveWithNonExistingStopCriterium()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -211,7 +214,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void Remove()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -248,7 +251,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void DetermineStatusWithNegativeIterationNumberThrowsArgumentOutOfRangeException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -270,7 +273,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void DetermineStatusWithNullSolutionVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -292,7 +295,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void DetermineStatusWithNullSourceVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -314,7 +317,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void DetermineStatusWithNullResidualVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -336,7 +339,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void DetermineStatus()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -368,7 +371,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void ResetToPrecalculationState()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -398,7 +401,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Solvers
[Test]
public void Clone()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<Complex32>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),

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

@ -33,6 +33,7 @@ using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
@ -93,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -138,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -216,7 +217,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -261,7 +262,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),
@ -292,7 +293,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10)

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

@ -33,6 +33,7 @@ using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
@ -93,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -138,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -263,7 +264,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),
@ -294,7 +295,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10)

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

@ -33,6 +33,7 @@ using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
@ -93,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -139,7 +140,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -262,7 +263,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),
@ -293,7 +294,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10)

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

@ -33,6 +33,7 @@ using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
@ -93,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -139,7 +140,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -258,7 +259,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10),
@ -289,7 +290,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<double>[]
{
new IterationCountStopCriterium(1000),
new ResidualStopCriterium(1e-10)

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

@ -32,6 +32,7 @@ using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearAlgebra.Double.Solvers;
using MathNet.Numerics.LinearAlgebra.Double.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
using System.Collections.Generic;
@ -61,7 +62,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void CreateWithEmptyCollection()
{
var iterator = new Iterator(new IIterationStopCriterium[] {});
var iterator = new Iterator(new IIterationStopCriterium<double>[] { });
Assert.IsNotNull(iterator, "Should have an iterator");
Assert.AreEqual(0, iterator.NumberOfCriteria, "There shouldn't be any criteria");
}
@ -72,7 +73,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void CreateWithCollectionWithNulls()
{
var iterator = new Iterator(new IIterationStopCriterium[] {null, null});
var iterator = new Iterator(new IIterationStopCriterium<double>[] { null, null });
Assert.IsNotNull(iterator, "Should have an iterator");
Assert.AreEqual(0, iterator.NumberOfCriteria, "There shouldn't be any criteria");
}
@ -83,7 +84,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void CreateWithDuplicatesThrowsArgumentException()
{
Assert.Throws<ArgumentException>(() => new Iterator(new IIterationStopCriterium[]
Assert.Throws<ArgumentException>(() => new Iterator(new IIterationStopCriterium<double>[]
{
new FailureStopCriterium(),
new FailureStopCriterium()
@ -96,7 +97,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void CreateWithCollection()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -143,7 +144,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void Add()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -173,7 +174,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void RemoveWithNullStopCriteriumThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -192,7 +193,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void RemoveWithNonExistingStopCriterium()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -211,7 +212,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void Remove()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -248,7 +249,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void DetermineStatusWithNegativeIterationNumberThrowsArgumentOutOfRangeException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -270,7 +271,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void DetermineStatusWithNullSolutionVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -292,7 +293,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void DetermineStatusWithNullSourceVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -314,7 +315,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void DetermineStatusWithNullResidualVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -336,7 +337,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void DetermineStatus()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -368,7 +369,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void ResetToPrecalculationState()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -398,7 +399,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double.Solvers
[Test]
public void Clone()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<double>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),

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

@ -33,6 +33,7 @@ using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
@ -93,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -138,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -216,7 +217,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -259,7 +260,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
@ -300,7 +301,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))

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

@ -33,6 +33,7 @@ using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
@ -93,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -138,7 +139,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -261,7 +262,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
@ -302,7 +303,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))

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

@ -34,6 +34,7 @@ using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
@ -94,7 +95,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -140,7 +141,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -222,7 +223,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
for (var iteration = 0; iteration <= 3; iteration++)
{
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -278,7 +279,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
@ -321,7 +322,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))

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

@ -33,6 +33,7 @@ using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
@ -93,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -139,7 +140,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -217,7 +218,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var y = DenseVector.Create(matrix.RowCount, i => 1);
// Create an iteration monitor which will keep track of iterative convergence
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium(ConvergenceBoundary),
@ -260,7 +261,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var vectorb = MatrixLoader.GenerateRandomDenseVector(order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration)),
@ -301,7 +302,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers.Iterative
var matrixA = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var matrixB = MatrixLoader.GenerateRandomDenseMatrix(order, order);
var monitor = new Iterator(new IIterationStopCriterium[]
var monitor = new Iterator(new IIterationStopCriterium<float>[]
{
new IterationCountStopCriterium(MaximumIterations),
new ResidualStopCriterium((float) Math.Pow(1.0/10.0, iteration))

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

@ -32,6 +32,7 @@ using MathNet.Numerics.LinearAlgebra.Single;
using MathNet.Numerics.LinearAlgebra.Single.Solvers;
using MathNet.Numerics.LinearAlgebra.Single.Solvers.StopCriterium;
using MathNet.Numerics.LinearAlgebra.Solvers.Status;
using MathNet.Numerics.LinearAlgebra.Solvers.StopCriterium;
using NUnit.Framework;
using System;
using System.Collections.Generic;
@ -61,7 +62,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void CreateWithEmptyCollection()
{
var iterator = new Iterator(new IIterationStopCriterium[] {});
var iterator = new Iterator(new IIterationStopCriterium<float>[] { });
Assert.IsNotNull(iterator, "Should have an iterator");
Assert.AreEqual(0, iterator.NumberOfCriteria, "There shouldn't be any criteria");
}
@ -72,7 +73,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void CreateWithCollectionWithNulls()
{
var iterator = new Iterator(new IIterationStopCriterium[] {null, null});
var iterator = new Iterator(new IIterationStopCriterium<float>[] { null, null });
Assert.IsNotNull(iterator, "Should have an iterator");
Assert.AreEqual(0, iterator.NumberOfCriteria, "There shouldn't be any criteria");
}
@ -83,7 +84,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void CreateWithDuplicatesThrowsArgumentException()
{
Assert.Throws<ArgumentException>(() => new Iterator(new IIterationStopCriterium[]
Assert.Throws<ArgumentException>(() => new Iterator(new IIterationStopCriterium<float>[]
{
new FailureStopCriterium(),
new FailureStopCriterium()
@ -96,7 +97,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void CreateWithCollection()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -143,7 +144,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void Add()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -173,7 +174,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void RemoveWithNullStopCriteriumThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -192,7 +193,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void RemoveWithNonExistingStopCriterium()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -211,7 +212,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void Remove()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -248,7 +249,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void DetermineStatusWithNegativeIterationNumberThrowsArgumentOutOfRangeException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -270,7 +271,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void DetermineStatusWithNullSolutionVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -292,7 +293,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void DetermineStatusWithNullSourceVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -314,7 +315,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void DetermineStatusWithNullResidualVectorThrowsArgumentNullException()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -336,7 +337,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void DetermineStatus()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -368,7 +369,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void ResetToPrecalculationState()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),
@ -398,7 +399,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single.Solvers
[Test]
public void Clone()
{
var criteria = new List<IIterationStopCriterium>
var criteria = new List<IIterationStopCriterium<float>>
{
new FailureStopCriterium(),
new DivergenceStopCriterium(),

Loading…
Cancel
Save