Browse Source

LA: Make builder much more complete

optimization-1
Christoph Ruegg 13 years ago
parent
commit
31eda8d8b0
  1. 863
      src/Numerics/LinearAlgebra/Builder.cs
  2. 2
      src/Numerics/LinearAlgebra/Factorization/LU.cs
  3. 4
      src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs
  4. 26
      src/Numerics/LinearAlgebra/Matrix.Solve.cs
  5. 10
      src/Numerics/LinearAlgebra/Matrix.cs
  6. 2
      src/Numerics/LinearAlgebra/Solvers/Iterator.cs
  7. 2
      src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs
  8. 2
      src/Numerics/LinearAlgebra/Storage/VectorStorage.cs
  9. 4
      src/Numerics/LinearAlgebra/Vector.Arithmetic.cs
  10. 2
      src/Numerics/LinearAlgebra/Vector.cs

863
src/Numerics/LinearAlgebra/Builder.cs

File diff suppressed because it is too large

2
src/Numerics/LinearAlgebra/Factorization/LU.cs

@ -46,7 +46,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization
public abstract class LU<T> : ISolver<T>
where T : struct, IEquatable<T>, IFormattable
{
static readonly T One = Builder<T>.Instance.One;
static readonly T One = BuilderInstance<T>.Instance.One;
readonly Lazy<Matrix<T>> _lazyL;
readonly Lazy<Matrix<T>> _lazyU;

4
src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs

@ -41,12 +41,12 @@ namespace MathNet.Numerics.LinearAlgebra
/// <summary>
/// The value of 1.0.
/// </summary>
public static readonly T One = Builder<T>.Instance.One;
public static readonly T One = BuilderInstance<T>.Instance.One;
/// <summary>
/// The value of 0.0.
/// </summary>
public static readonly T Zero = Builder<T>.Instance.Zero;
public static readonly T Zero = BuilderInstance<T>.Instance.Zero;
/// <summary>
/// Negate each element of this matrix and place the results into the result matrix.

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

@ -161,7 +161,7 @@ namespace MathNet.Numerics.LinearAlgebra
{
if (iterator == null)
{
iterator = new Iterator<T>(Builder.IterativeSolverStopCriteria());
iterator = new Iterator<T>(Build.IterativeSolverStopCriteria());
}
if (preconditioner == null)
@ -191,7 +191,7 @@ namespace MathNet.Numerics.LinearAlgebra
if (iterator == null)
{
iterator = new Iterator<T>(Builder.IterativeSolverStopCriteria());
iterator = new Iterator<T>(Build.IterativeSolverStopCriteria());
}
if (preconditioner == null)
@ -201,7 +201,7 @@ namespace MathNet.Numerics.LinearAlgebra
for (var column = 0; column < input.ColumnCount; column++)
{
var solution = Builder.DenseVector(RowCount);
var solution = Build.DenseVector(RowCount);
solver.Solve(this, input.Column(column), solution, iterator, preconditioner);
@ -225,7 +225,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="preconditioner">The preconditioner to use for approximations.</param>
public IterationStatus TrySolveIterative(Vector<T> input, Vector<T> result, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterium<T>[] stopCriteria)
{
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Builder.IterativeSolverStopCriteria() : stopCriteria);
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Build.IterativeSolverStopCriteria() : stopCriteria);
return TrySolveIterative(input, result, solver, iterator, preconditioner);
}
@ -239,7 +239,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="preconditioner">The preconditioner to use for approximations.</param>
public IterationStatus TrySolveIterative(Matrix<T> input, Matrix<T> result, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterium<T>[] stopCriteria)
{
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Builder.IterativeSolverStopCriteria() : stopCriteria);
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Build.IterativeSolverStopCriteria() : stopCriteria);
return TrySolveIterative(input, result, solver, iterator, preconditioner);
}
@ -252,7 +252,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
public IterationStatus TrySolveIterative(Vector<T> input, Vector<T> result, IIterativeSolver<T> solver, params IIterationStopCriterium<T>[] stopCriteria)
{
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Builder.IterativeSolverStopCriteria() : stopCriteria);
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Build.IterativeSolverStopCriteria() : stopCriteria);
return TrySolveIterative(input, result, solver, iterator);
}
@ -265,7 +265,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <param name="stopCriteria">Criteria to control when to stop iterating.</param>
public IterationStatus TrySolveIterative(Matrix<T> input, Matrix<T> result, IIterativeSolver<T> solver, params IIterationStopCriterium<T>[] stopCriteria)
{
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Builder.IterativeSolverStopCriteria() : stopCriteria);
var iterator = new Iterator<T>(stopCriteria.Length == 0 ? Build.IterativeSolverStopCriteria() : stopCriteria);
return TrySolveIterative(input, result, solver, iterator);
}
@ -283,7 +283,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <returns>The result vector <c>x</c>.</returns>
public Vector<T> SolveIterative(Vector<T> input, IIterativeSolver<T> solver, Iterator<T> iterator = null, IPreconditioner<T> preconditioner = null)
{
var result = Builder.DenseVector(RowCount);
var result = Build.DenseVector(RowCount);
TrySolveIterative(input, result, solver, iterator, preconditioner);
return result;
}
@ -298,7 +298,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <returns>The result matrix <c>X</c>.</returns>
public Matrix<T> SolveIterative(Matrix<T> input, IIterativeSolver<T> solver, Iterator<T> iterator = null, IPreconditioner<T> preconditioner = null)
{
var result = Builder.DenseMatrix(input.RowCount, input.ColumnCount);
var result = Build.DenseMatrix(input.RowCount, input.ColumnCount);
TrySolveIterative(input, result, solver, iterator, preconditioner);
return result;
}
@ -313,7 +313,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <returns>The result vector <c>x</c>.</returns>
public Vector<T> SolveIterative(Vector<T> input, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterium<T>[] stopCriteria)
{
var result = Builder.DenseVector(RowCount);
var result = Build.DenseVector(RowCount);
TrySolveIterative(input, result, solver, preconditioner, stopCriteria);
return result;
}
@ -328,7 +328,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <returns>The result matrix <c>X</c>.</returns>
public Matrix<T> SolveIterative(Matrix<T> input, IIterativeSolver<T> solver, IPreconditioner<T> preconditioner, params IIterationStopCriterium<T>[] stopCriteria)
{
var result = Builder.DenseMatrix(input.RowCount, input.ColumnCount);
var result = Build.DenseMatrix(input.RowCount, input.ColumnCount);
TrySolveIterative(input, result, solver, preconditioner, stopCriteria);
return result;
}
@ -342,7 +342,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <returns>The result vector <c>x</c>.</returns>
public Vector<T> SolveIterative(Vector<T> input, IIterativeSolver<T> solver, params IIterationStopCriterium<T>[] stopCriteria)
{
var result = Builder.DenseVector(RowCount);
var result = Build.DenseVector(RowCount);
TrySolveIterative(input, result, solver, stopCriteria);
return result;
}
@ -356,7 +356,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <returns>The result matrix <c>X</c>.</returns>
public Matrix<T> SolveIterative(Matrix<T> input, IIterativeSolver<T> solver, params IIterationStopCriterium<T>[] stopCriteria)
{
var result = Builder.DenseMatrix(input.RowCount, input.ColumnCount);
var result = Build.DenseMatrix(input.RowCount, input.ColumnCount);
TrySolveIterative(input, result, solver, stopCriteria);
return result;
}

10
src/Numerics/LinearAlgebra/Matrix.cs

@ -58,7 +58,7 @@ namespace MathNet.Numerics.LinearAlgebra
ColumnCount = storage.ColumnCount;
}
public static readonly IGenericBuilder<T> Builder = Builder<T>.Instance;
public static readonly Builder<T> Build = BuilderInstance<T>.Instance;
/// <summary>
/// Gets the raw matrix data storage.
@ -244,8 +244,8 @@ namespace MathNet.Numerics.LinearAlgebra
public Matrix<T> CreateMatrix(int rows, int columns)
{
return Storage.IsDense
? Builder.DenseMatrix(rows, columns)
: Builder.SparseMatrix(rows, columns);
? Build.DenseMatrix(rows, columns)
: Build.SparseMatrix(rows, columns);
}
/// <summary>
@ -256,8 +256,8 @@ namespace MathNet.Numerics.LinearAlgebra
public Vector<T> CreateVector(int size)
{
return Storage.IsDense
? Builder.DenseVector(size)
: Builder.SparseVector(size);
? Build.DenseVector(size)
: Build.SparseVector(size);
}
/// <summary>

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

@ -56,7 +56,7 @@ namespace MathNet.Numerics.LinearAlgebra.Solvers
/// </summary>
public Iterator()
{
_stopCriteria = new List<IIterationStopCriterium<T>>(Matrix<T>.Builder.IterativeSolverStopCriteria());
_stopCriteria = new List<IIterationStopCriterium<T>>(Matrix<T>.Build.IterativeSolverStopCriteria());
}
/// <summary>

2
src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs

@ -40,7 +40,7 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
{
// [ruegg] public fields are OK here
protected static readonly T Zero = Builder<T>.Instance.Zero;
protected static readonly T Zero = BuilderInstance<T>.Instance.Zero;
public readonly int RowCount;
public readonly int ColumnCount;

2
src/Numerics/LinearAlgebra/Storage/VectorStorage.cs

@ -40,7 +40,7 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
{
// [ruegg] public fields are OK here
protected static readonly T Zero = Builder<T>.Instance.Zero;
protected static readonly T Zero = BuilderInstance<T>.Instance.Zero;
public readonly int Length;
protected VectorStorage(int length)

4
src/Numerics/LinearAlgebra/Vector.Arithmetic.cs

@ -38,12 +38,12 @@ namespace MathNet.Numerics.LinearAlgebra
/// <summary>
/// The zero value for type T.
/// </summary>
public static readonly T Zero = Builder<T>.Instance.Zero;
public static readonly T Zero = BuilderInstance<T>.Instance.Zero;
/// <summary>
/// The value of 1.0 for type T.
/// </summary>
public static readonly T One = Builder<T>.Instance.One;
public static readonly T One = BuilderInstance<T>.Instance.One;
/// <summary>
/// Negates vector and save result to <paramref name="result"/>

2
src/Numerics/LinearAlgebra/Vector.cs

@ -58,7 +58,7 @@ namespace MathNet.Numerics.LinearAlgebra
Count = storage.Length;
}
public static readonly IGenericBuilder<T> Builder = Builder<T>.Instance;
public static readonly Builder<T> Builder = BuilderInstance<T>.Instance;
/// <summary>
/// Gets the raw vector data storage.

Loading…
Cancel
Save