|
|
@ -56,7 +56,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers |
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// The collection of solvers that will be used
|
|
|
/// The collection of solvers that will be used
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
readonly List<Tuple<IIterativeSolver<Numerics.Complex32>, IPreConditioner<Numerics.Complex32>>> _solvers; |
|
|
readonly List<Tuple<IIterativeSolver<Numerics.Complex32>, IPreconditioner<Numerics.Complex32>>> _solvers; |
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// The status of the calculation.
|
|
|
/// The status of the calculation.
|
|
|
@ -76,7 +76,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers |
|
|
|
|
|
|
|
|
public CompositeSolver(IEnumerable<IIterativeSolverSetup<Numerics.Complex32>> solvers) |
|
|
public CompositeSolver(IEnumerable<IIterativeSolverSetup<Numerics.Complex32>> solvers) |
|
|
{ |
|
|
{ |
|
|
_solvers = solvers.Select(setup => new Tuple<IIterativeSolver<Numerics.Complex32>, IPreConditioner<Numerics.Complex32>>(setup.CreateSolver(), setup.CreatePreconditioner() ?? new UnitPreconditioner<Numerics.Complex32>())).ToList(); |
|
|
_solvers = solvers.Select(setup => new Tuple<IIterativeSolver<Numerics.Complex32>, IPreconditioner<Numerics.Complex32>>(setup.CreateSolver(), setup.CreatePreconditioner() ?? new UnitPreconditioner<Numerics.Complex32>())).ToList(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
@ -102,7 +102,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers |
|
|
/// <param name="matrix">The coefficient matrix, <c>A</c>.</param>
|
|
|
/// <param name="matrix">The coefficient matrix, <c>A</c>.</param>
|
|
|
/// <param name="vector">The solution vector, <c>b</c>.</param>
|
|
|
/// <param name="vector">The solution vector, <c>b</c>.</param>
|
|
|
/// <returns>The result vector, <c>x</c>.</returns>
|
|
|
/// <returns>The result vector, <c>x</c>.</returns>
|
|
|
public Vector<Numerics.Complex32> Solve(Matrix<Numerics.Complex32> matrix, Vector<Numerics.Complex32> vector, Iterator<Numerics.Complex32> iterator = null, IPreConditioner<Numerics.Complex32> preconditioner = null) |
|
|
public Vector<Numerics.Complex32> Solve(Matrix<Numerics.Complex32> matrix, Vector<Numerics.Complex32> vector, Iterator<Numerics.Complex32> iterator = null, IPreconditioner<Numerics.Complex32> preconditioner = null) |
|
|
{ |
|
|
{ |
|
|
var result = new DenseVector(matrix.RowCount); |
|
|
var result = new DenseVector(matrix.RowCount); |
|
|
Solve(matrix, vector, result, iterator, preconditioner); |
|
|
Solve(matrix, vector, result, iterator, preconditioner); |
|
|
@ -116,7 +116,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers |
|
|
/// <param name="matrix">The coefficient matrix, <c>A</c>.</param>
|
|
|
/// <param name="matrix">The coefficient matrix, <c>A</c>.</param>
|
|
|
/// <param name="input">The solution vector, <c>b</c></param>
|
|
|
/// <param name="input">The solution vector, <c>b</c></param>
|
|
|
/// <param name="result">The result vector, <c>x</c></param>
|
|
|
/// <param name="result">The result vector, <c>x</c></param>
|
|
|
public void Solve(Matrix<Numerics.Complex32> matrix, Vector<Numerics.Complex32> input, Vector<Numerics.Complex32> result, Iterator<Numerics.Complex32> iterator = null, IPreConditioner<Numerics.Complex32> preconditioner = null) |
|
|
public void Solve(Matrix<Numerics.Complex32> matrix, Vector<Numerics.Complex32> input, Vector<Numerics.Complex32> result, Iterator<Numerics.Complex32> iterator = null, IPreconditioner<Numerics.Complex32> preconditioner = null) |
|
|
{ |
|
|
{ |
|
|
// If we were stopped before, we are no longer
|
|
|
// If we were stopped before, we are no longer
|
|
|
// We're doing this at the start of the method to ensure
|
|
|
// We're doing this at the start of the method to ensure
|
|
|
@ -212,7 +212,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers |
|
|
/// <param name="matrix">The coefficient matrix, <c>A</c>.</param>
|
|
|
/// <param name="matrix">The coefficient matrix, <c>A</c>.</param>
|
|
|
/// <param name="input">The solution matrix, <c>B</c>.</param>
|
|
|
/// <param name="input">The solution matrix, <c>B</c>.</param>
|
|
|
/// <returns>The result matrix, <c>X</c>.</returns>
|
|
|
/// <returns>The result matrix, <c>X</c>.</returns>
|
|
|
public Matrix<Numerics.Complex32> Solve(Matrix<Numerics.Complex32> matrix, Matrix<Numerics.Complex32> input, Iterator<Numerics.Complex32> iterator = null, IPreConditioner<Numerics.Complex32> preconditioner = null) |
|
|
public Matrix<Numerics.Complex32> Solve(Matrix<Numerics.Complex32> matrix, Matrix<Numerics.Complex32> input, Iterator<Numerics.Complex32> iterator = null, IPreconditioner<Numerics.Complex32> preconditioner = null) |
|
|
{ |
|
|
{ |
|
|
var result = matrix.CreateMatrix(input.RowCount, input.ColumnCount); |
|
|
var result = matrix.CreateMatrix(input.RowCount, input.ColumnCount); |
|
|
Solve(matrix, input, result, iterator, preconditioner); |
|
|
Solve(matrix, input, result, iterator, preconditioner); |
|
|
@ -226,7 +226,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers |
|
|
/// <param name="matrix">The coefficient matrix, <c>A</c>.</param>
|
|
|
/// <param name="matrix">The coefficient matrix, <c>A</c>.</param>
|
|
|
/// <param name="input">The solution matrix, <c>B</c>.</param>
|
|
|
/// <param name="input">The solution matrix, <c>B</c>.</param>
|
|
|
/// <param name="result">The result matrix, <c>X</c></param>
|
|
|
/// <param name="result">The result matrix, <c>X</c></param>
|
|
|
public void Solve(Matrix<Numerics.Complex32> matrix, Matrix<Numerics.Complex32> input, Matrix<Numerics.Complex32> result, Iterator<Numerics.Complex32> iterator = null, IPreConditioner<Numerics.Complex32> preconditioner = null) |
|
|
public void Solve(Matrix<Numerics.Complex32> matrix, Matrix<Numerics.Complex32> input, Matrix<Numerics.Complex32> result, Iterator<Numerics.Complex32> iterator = null, IPreconditioner<Numerics.Complex32> preconditioner = null) |
|
|
{ |
|
|
{ |
|
|
if (matrix.RowCount != input.RowCount || input.RowCount != result.RowCount || input.ColumnCount != result.ColumnCount) |
|
|
if (matrix.RowCount != input.RowCount || input.RowCount != result.RowCount || input.ColumnCount != result.ColumnCount) |
|
|
{ |
|
|
{ |
|
|
|