Author: celestin Date: Sat Oct 1 19:09:00 2011 New Revision: 1178073 URL: http://svn.apache.org/viewvc?rev=1178073&view=rev Log: Some changes to the interface of iterative linear solvers. Replaced the confusing boolean param inPlace in the solve() methods by two sets of methods: solve() and solveInPlace().
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ConjugateGradient.java commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/IterativeLinearSolver.java commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/PreconditionedIterativeLinearSolver.java commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ConjugateGradientTest.java Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ConjugateGradient.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ConjugateGradient.java?rev=1178073&r1=1178072&r2=1178073&view=diff ============================================================================== --- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ConjugateGradient.java (original) +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ConjugateGradient.java Sat Oct 1 19:09:00 2011 @@ -61,8 +61,9 @@ import org.apache.commons.math.util.Iter * <dt><a id="BARR1994">Barret et al. (1994)</a></dt> * <dd>R. Barrett, M. Berry, T. F. Chan, J. Demmel, J. M. Donato, J. Dongarra, * V. Eijkhout, R. Pozo, C. Romine and H. Van der Vorst, - * <em>Templates for the Solution of Linear Systems: Building Blocks for - * Iterative Methods</em>, SIAM</dd> + * <a href="http://www.netlib.org/linalg/html_templates/Templates.html"><em> + * Templates for the Solution of Linear Systems: Building Blocks for Iterative + * Methods</em></a>, SIAM</dd> * <dt><a id="STRA2002">Strakos and Tichy (2002) * <dt> * <dd>Z. Strakos and P. Tichy, <a @@ -82,7 +83,8 @@ public class ConjugateGradient * The type of all events fired by this implementation of the Conjugate * Gradient method. * - * @version $Id$ + * @version $Id: ConjugateGradient.java 1175404 2011-09-25 14:48:18Z + * celestin $ */ public abstract static class ConjugateGradientEvent extends IterativeLinearSolverEvent @@ -95,7 +97,7 @@ public class ConjugateGradient * Creates a new instance of this class. * * @param source The iterative algorithm on which the event initially - * occurred. + * occurred. */ public ConjugateGradientEvent(final Object source) { super(source); @@ -124,7 +126,7 @@ public class ConjugateGradient * @param maxIterations Maximum number of iterations. * @param delta δ parameter for the default stopping criterion. * @param check {@code true} if positive definiteness of both matrix and - * preconditioner should be checked. + * preconditioner should be checked. */ public ConjugateGradient(final int maxIterations, final double delta, final boolean check) { @@ -140,7 +142,7 @@ public class ConjugateGradient * @param manager Custom iteration manager. * @param delta δ parameter for the default stopping criterion. * @param check {@code true} if positive definiteness of both matrix and - * preconditioner should be checked. + * preconditioner should be checked. */ public ConjugateGradient(final IterationManager manager, final double delta, final boolean check) { @@ -161,13 +163,12 @@ public class ConjugateGradient /** {@inheritDoc} */ @Override - public RealVector solve(final RealLinearOperator a, - final InvertibleRealLinearOperator m, - final RealVector b, final RealVector x0, - final boolean inPlace) + public RealVector solveInPlace(final RealLinearOperator a, + final InvertibleRealLinearOperator m, + final RealVector b, final RealVector x0) throws NullArgumentException, NonSquareLinearOperatorException, DimensionMismatchException, MaxCountExceededException { - checkParameters(a, m, b, x0, inPlace); + checkParameters(a, m, b, x0); final IterationManager manager = getIterationManager(); // Initialization of default stopping criterion manager.resetIterationCount(); @@ -176,16 +177,7 @@ public class ConjugateGradient // p and x are constructed as copies of x0, since presumably, the type // of x is optimized for the calculation of the matrix-vector product // A.x. - final RealVector x; - if (inPlace) { - x = x0; - } else { - if (x0 != null) { - x = x0.copy(); - } else { - x = new ArrayRealVector(a.getColumnDimension()); - } - } + final RealVector x = x0; final RealVector p = x.copy(); RealVector q = a.operate(p); manager.incrementIterationCount(); Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/IterativeLinearSolver.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/IterativeLinearSolver.java?rev=1178073&r1=1178072&r2=1178073&view=diff ============================================================================== --- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/IterativeLinearSolver.java (original) +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/IterativeLinearSolver.java Sat Oct 1 19:09:00 2011 @@ -49,35 +49,36 @@ public abstract class IterativeLinearSol * Creates a new instance of this class, with custom iteration manager. * * @param manager Custom iteration manager. + * @throws NullArgumentException if {@code manager} is {@code null}. */ - public IterativeLinearSolver(final IterationManager manager) { + public IterativeLinearSolver(final IterationManager manager) + throws NullArgumentException { MathUtils.checkNotNull(manager); this.manager = manager; } + /** * Performs all dimension checks on the parameters of - * {@link #solve(RealLinearOperator, RealVector, RealVector, boolean)}, and - * throws an exception if one of the checks fails. + * {@link #solve(RealLinearOperator, RealVector, RealVector) solve} and + * {@link #solveInPlace(RealLinearOperator, RealVector, RealVector) solveInPlace}, + * and throws an exception if one of the checks fails. * * @param a Linear operator A of the system. * @param b Right-hand side vector. - * @param x0 Initial guess of the solution (can be {@code null} if - * {@code inPlace} is set to {@code false}). - * @param inPlace {@code true} if the initial guess is to be updated with - * the current estimate of the solution. + * @param x0 Initial guess of the solution. * @throws NullArgumentException if one of the parameters is {@code null}. * @throws NonSquareLinearOperatorException if {@code a} is not square. * @throws DimensionMismatchException if {@code b} or {@code x0} have - * dimensions inconsistent with {@code a}. + * dimensions inconsistent with {@code a}. */ protected static void checkParameters(final RealLinearOperator a, final RealVector b, - final RealVector x0, - final boolean inPlace) + final RealVector x0) throws NullArgumentException, NonSquareLinearOperatorException, DimensionMismatchException { MathUtils.checkNotNull(a); MathUtils.checkNotNull(b); + MathUtils.checkNotNull(x0); if (a.getRowDimension() != a.getColumnDimension()) { throw new NonSquareLinearOperatorException(a.getRowDimension(), a.getColumnDimension()); @@ -86,10 +87,7 @@ public abstract class IterativeLinearSol throw new DimensionMismatchException(b.getDimension(), a.getRowDimension()); } - if (inPlace) { - MathUtils.checkNotNull(x0); - } - if ((x0 != null) && (x0.getDimension() != a.getColumnDimension())) { + if (x0.getDimension() != a.getColumnDimension()) { throw new DimensionMismatchException(x0.getDimension(), a.getColumnDimension()); } @@ -106,28 +104,70 @@ public abstract class IterativeLinearSol /** * Returns an estimate of the solution to the linear system A · x = - * b. If no initial estimate of the solution is provided, (0, …, 0) - * is assumed. + * b. + * + * @param a Linear operator A of the system. + * @param b Right-hand side vector. + * @return A new vector containing the solution. + * @throws NullArgumentException if one of the parameters is {@code null}. + * @throws NonSquareLinearOperatorException if {@code a} is not square. + * @throws DimensionMismatchException if {@code b} has dimensions + * inconsistent with {@code a}. + * @throws MaxCountExceededException at exhaustion of the iteration count, + * unless a custom {@link MaxCountExceededCallback callback} has been set at + * construction. + */ + public RealVector solve(RealLinearOperator a, RealVector b) + throws NullArgumentException, NonSquareLinearOperatorException, + DimensionMismatchException, MaxCountExceededException { + MathUtils.checkNotNull(a); + final RealVector x = new ArrayRealVector(a.getColumnDimension()); + x.set(0.); + return solveInPlace(a, b, x); + } + + /** + * Returns an estimate of the solution to the linear system A · x = + * b. + * + * @param a Linear operator A of the system. + * @param b Right-hand side vector. + * @param x0 Initial guess of the solution. + * @return A new vector containing the solution. + * @throws NullArgumentException if one of the parameters is {@code null}. + * @throws NonSquareLinearOperatorException if {@code a} is not square. + * @throws DimensionMismatchException if {@code b} or {@code x0} have + * dimensions inconsistent with {@code a}. + * @throws MaxCountExceededException at exhaustion of the iteration count, + * unless a custom {@link MaxCountExceededCallback callback} has been set at + * construction. + */ + public RealVector solve(RealLinearOperator a, RealVector b, RealVector x0) + throws NullArgumentException, NonSquareLinearOperatorException, + DimensionMismatchException, MaxCountExceededException { + MathUtils.checkNotNull(x0); + return solveInPlace(a, b, x0.copy()); + } + + /** + * Returns an estimate of the solution to the linear system A · x = + * b. The solution is computed in-place (initial guess is modified). * * @param a Linear operator A of the system. * @param b Right-hand side vector. - * @param x0 Initial guess of the solution (can be {@code null} if - * {@code inPlace} is set to {@code false}). - * @param inPlace {@code true} if the initial guess is to be updated with - * the current estimate of the solution. - * @return A reference to {@code x0} (shallow copy) if {@code inPlace} was - * set to {@code true}. Otherwise, a new vector containing the - * solution. + * @param x0 Initial guess of the solution. + * @return A reference to {@code x0} (shallow copy) updated with the + * solution. * @throws NullArgumentException if one of the parameters is {@code null}. * @throws NonSquareLinearOperatorException if {@code a} is not square. * @throws DimensionMismatchException if {@code b} or {@code x0} have - * dimensions inconsistent with {@code a}. + * dimensions inconsistent with {@code a}. * @throws MaxCountExceededException at exhaustion of the iteration count, - * unless a custom {@link MaxCountExceededCallback callback} has - * been set at construction. + * unless a custom {@link MaxCountExceededCallback callback} has been set at + * construction. */ - public abstract RealVector solve(RealLinearOperator a, RealVector b, - RealVector x0, boolean inPlace) + public abstract RealVector solveInPlace(RealLinearOperator a, RealVector b, + RealVector x0) throws NullArgumentException, NonSquareLinearOperatorException, DimensionMismatchException, MaxCountExceededException; } Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/PreconditionedIterativeLinearSolver.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/PreconditionedIterativeLinearSolver.java?rev=1178073&r1=1178072&r2=1178073&view=diff ============================================================================== --- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/PreconditionedIterativeLinearSolver.java (original) +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/PreconditionedIterativeLinearSolver.java Sat Oct 1 19:09:00 2011 @@ -20,6 +20,7 @@ import org.apache.commons.math.exception import org.apache.commons.math.exception.MaxCountExceededException; import org.apache.commons.math.exception.NullArgumentException; import org.apache.commons.math.util.IterationManager; +import org.apache.commons.math.util.MathUtils; /** * This abstract class defines preconditioned iterative solvers. When A is @@ -48,41 +49,88 @@ public abstract class PreconditionedIter * Creates a new instance of this class, with custom iteration manager. * * @param manager Custom iteration manager. + * @throws NullArgumentException if {@code manager} is {@code null}. */ - public PreconditionedIterativeLinearSolver(final IterationManager manager) { + public PreconditionedIterativeLinearSolver(final IterationManager manager) + throws NullArgumentException { super(manager); } /** + * Returns an estimate of the solution to the linear system A · x = + * b. + * + * @param a Linear operator A of the system. + * @param m Preconditioner (can be {@code null}). + * @param b Right-hand side vector. + * @param x0 Initial guess of the solution. + * @return A new vector containing the solution. + * @throws NullArgumentException if one of the parameters is {@code null}. + * @throws NonSquareLinearOperatorException if {@code a} or {@code m} is not + * square. + * @throws DimensionMismatchException if {@code m}, {@code b} or {@code x0} + * have dimensions inconsistent with {@code a}. + * @throws MaxCountExceededException at exhaustion of the iteration count, + * unless a custom {@link MaxCountExceededCallback callback} has been set at + * construction. + */ + public RealVector solve(final RealLinearOperator a, + final InvertibleRealLinearOperator m, + final RealVector b, final RealVector x0) + throws NullArgumentException, NonSquareLinearOperatorException, + DimensionMismatchException, MaxCountExceededException { + MathUtils.checkNotNull(x0); + return solveInPlace(a, m, b, x0.copy()); + } + + /** {@inheritDoc} */ + @Override + public RealVector solve(final RealLinearOperator a, final RealVector b) + throws NullArgumentException, NonSquareLinearOperatorException, + DimensionMismatchException, MaxCountExceededException { + MathUtils.checkNotNull(a); + final RealVector x = new ArrayRealVector(a.getColumnDimension()); + x.set(0.); + return solveInPlace(a, null, b, x); + } + + /** {@inheritDoc} */ + @Override + public RealVector solve(final RealLinearOperator a, final RealVector b, + final RealVector x0) + throws NullArgumentException, NonSquareLinearOperatorException, + DimensionMismatchException, MaxCountExceededException { + MathUtils.checkNotNull(x0); + return solveInPlace(a, null, b, x0.copy()); + } + + /** * Performs all dimension checks on the parameters of - * {@link #solve(RealLinearOperator, InvertibleRealLinearOperator, RealVector, RealVector, boolean)} + * {@link #solve(RealLinearOperator, InvertibleRealLinearOperator, RealVector, RealVector) solve} + * and + * {@link #solveInPlace(RealLinearOperator, InvertibleRealLinearOperator, RealVector, RealVector) solveInPlace} * , and throws an exception if one of the checks fails. * * @param a Linear operator A of the system. * @param m Preconditioner (can be {@code null}). * @param b Right-hand side vector. - * @param x0 Initial guess of the solution (can be {@code null} if - * {@code inPlace} is set to {@code false}). - * @param inPlace {@code true} if the initial guess is to be updated with - * the current estimate of the solution. + * @param x0 Initial guess of the solution. * @throws NullArgumentException if one of the parameters is {@code null}. * @throws NonSquareLinearOperatorException if {@code a} or {@code m} is not - * square. - * @throws DimensionMismatchException if {@code m}, {@code b} or {@code x} - * have dimensions inconsistent with {@code a}. + * square. + * @throws DimensionMismatchException if {@code m}, {@code b} or {@code x0} + * have dimensions inconsistent with {@code a}. */ protected static void checkParameters(final RealLinearOperator a, final InvertibleRealLinearOperator m, final RealVector b, - final RealVector x0, - final boolean inPlace) + final RealVector x0) throws NullArgumentException, NonSquareLinearOperatorException, DimensionMismatchException { - checkParameters(a, b, x0, inPlace); + checkParameters(a, b, x0); if (m != null) { if (m.getColumnDimension() != m.getRowDimension()) { - throw new NonSquareLinearOperatorException( - m.getColumnDimension(), + throw new NonSquareLinearOperatorException(m.getColumnDimension(), m.getRowDimension()); } if (m.getRowDimension() != a.getRowDimension()) { @@ -94,42 +142,61 @@ public abstract class PreconditionedIter /** * Returns an estimate of the solution to the linear system A · x = - * b. If no initial estimate of the solution is provided, (0, …, 0) - * is assumed. + * b. * * @param a Linear operator A of the system. * @param m Preconditioner (can be {@code null}). * @param b Right-hand side vector. - * @param x0 Initial guess of the solution (can be {@code null} if - * {@code inPlace} is set to {@code false}). - * @param inPlace {@code true} if the initial guess is to be updated with - * the current estimate of the solution. - * @return A reference to {@code x0} (shallow copy) if {@code update} was - * set to {@code true}. Otherwise, a new vector containing the - * solution. + * @return A new vector containing the solution. * @throws NullArgumentException if one of the parameters is {@code null}. * @throws NonSquareLinearOperatorException if {@code a} or {@code m} is not - * square. - * @throws DimensionMismatchException if {@code m}, {@code b} or {@code x} - * have dimensions inconsistent with {@code a}. + * square. + * @throws DimensionMismatchException if {@code m} or {@code b} have + * dimensions inconsistent with {@code a}. * @throws MaxCountExceededException at exhaustion of the iteration count, - * unless a custom {@link MaxCountExceededCallback callback} has - * been set at construction. + * unless a custom {@link MaxCountExceededCallback callback} has been set at + * construction. */ - public abstract RealVector solve(RealLinearOperator a, - InvertibleRealLinearOperator m, - RealVector b, RealVector x0, - final boolean inPlace) + public RealVector solve(RealLinearOperator a, + InvertibleRealLinearOperator m, RealVector b) + throws NullArgumentException, NonSquareLinearOperatorException, + DimensionMismatchException, MaxCountExceededException { + MathUtils.checkNotNull(a); + final RealVector x = new ArrayRealVector(a.getColumnDimension()); + return solveInPlace(a, m, b, x); + } + + /** + * Returns an estimate of the solution to the linear system A · x = + * b. The solution is computed in-place (initial guess is modified). + * + * @param a Linear operator A of the system. + * @param m Preconditioner (can be {@code null}). + * @param b Right-hand side vector. + * @param x0 Initial guess of the solution. + * @return A reference to {@code x0} (shallow copy) updated with the + * solution. + * @throws NullArgumentException if one of the parameters is {@code null}. + * @throws NonSquareLinearOperatorException if {@code a} or {@code m} is not + * square. + * @throws DimensionMismatchException if {@code m}, {@code b} or {@code x0} + * have dimensions inconsistent with {@code a}. + * @throws MaxCountExceededException at exhaustion of the iteration count, + * unless a custom {@link MaxCountExceededCallback callback} has been set at + * construction. + */ + public abstract RealVector solveInPlace(RealLinearOperator a, + InvertibleRealLinearOperator m, + RealVector b, RealVector x0) throws NullArgumentException, NonSquareLinearOperatorException, DimensionMismatchException, MaxCountExceededException; /** {@inheritDoc} */ @Override - public RealVector solve(final RealLinearOperator a, final RealVector b, - final RealVector x0, final boolean inPlace) + public RealVector solveInPlace(final RealLinearOperator a, + final RealVector b, final RealVector x0) throws NullArgumentException, NonSquareLinearOperatorException, DimensionMismatchException, MaxCountExceededException { - checkParameters(a, b, x0, inPlace); - return solve(a, null, b, x0, inPlace); + return solveInPlace(a, null, b, x0); } } Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ConjugateGradientTest.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ConjugateGradientTest.java?rev=1178073&r1=1178072&r2=1178073&view=diff ============================================================================== --- commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ConjugateGradientTest.java (original) +++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ConjugateGradientTest.java Sat Oct 1 19:09:00 2011 @@ -32,7 +32,7 @@ public class ConjugateGradientTest { solver = new ConjugateGradient(10, 0., false); final ArrayRealVector b = new ArrayRealVector(a.getRowDimension()); final ArrayRealVector x = new ArrayRealVector(a.getColumnDimension()); - solver.solve(a, b, x, false); + solver.solve(a, b, x); } @Test(expected = DimensionMismatchException.class) @@ -42,7 +42,7 @@ public class ConjugateGradientTest { solver = new ConjugateGradient(10, 0., false); final ArrayRealVector b = new ArrayRealVector(2); final ArrayRealVector x = new ArrayRealVector(3); - solver.solve(a, b, x, false); + solver.solve(a, b, x); } @Test(expected = DimensionMismatchException.class) @@ -52,7 +52,7 @@ public class ConjugateGradientTest { solver = new ConjugateGradient(10, 0., false); final ArrayRealVector b = new ArrayRealVector(3); final ArrayRealVector x = new ArrayRealVector(2); - solver.solve(a, b, x, false); + solver.solve(a, b, x); } @Test(expected = NonPositiveDefiniteLinearOperatorException.class) @@ -68,7 +68,7 @@ public class ConjugateGradientTest { b.setEntry(0, -1.); b.setEntry(1, -1.); final ArrayRealVector x = new ArrayRealVector(2); - solver.solve(a, b, x, false); + solver.solve(a, b, x); } @Test @@ -83,7 +83,7 @@ public class ConjugateGradientTest { for (int j = 0; j < n; j++) { b.set(0.); b.setEntry(j, 1.); - final RealVector x = solver.solve(a, b, null, false); + final RealVector x = solver.solve(a, b); for (int i = 0; i < n; i++) { final double actual = x.getEntry(i); final double expected = ainv.getEntry(i, j); @@ -108,7 +108,7 @@ public class ConjugateGradientTest { b.setEntry(j, 1.); final RealVector x0 = new ArrayRealVector(n); x0.set(1.); - final RealVector x = solver.solve(a, b, x0, true); + final RealVector x = solver.solveInPlace(a, b, x0); Assert.assertSame("x should be a reference to x0", x0, x); for (int i = 0; i < n; i++) { final double actual = x.getEntry(i); @@ -134,7 +134,7 @@ public class ConjugateGradientTest { b.setEntry(j, 1.); final RealVector x0 = new ArrayRealVector(n); x0.set(1.); - final RealVector x = solver.solve(a, b, x0, false); + final RealVector x = solver.solve(a, b, x0); Assert.assertNotSame("x should not be a reference to x0", x0, x); for (int i = 0; i < n; i++) { final double actual = x.getEntry(i); @@ -186,7 +186,7 @@ public class ConjugateGradientTest { b.set(0.); b.setEntry(j, 1.); - final RealVector x = solver.solve(a, b, null, false); + final RealVector x = solver.solve(a, b); final RealVector y = a.operate(x); for (int i = 0; i < n; i++) { final double actual = b.getEntry(i) - y.getEntry(i); @@ -228,7 +228,7 @@ public class ConjugateGradientTest { final PreconditionedIterativeLinearSolver solver; solver = new ConjugateGradient(10, 0d, false); final ArrayRealVector b = new ArrayRealVector(a.getRowDimension()); - solver.solve(a, m, b, null, false); + solver.solve(a, m, b); } @Test(expected = DimensionMismatchException.class) @@ -260,7 +260,7 @@ public class ConjugateGradientTest { final PreconditionedIterativeLinearSolver solver; solver = new ConjugateGradient(10, 0d, false); final ArrayRealVector b = new ArrayRealVector(a.getRowDimension()); - solver.solve(a, m, b, null, false); + solver.solve(a, m, b); } @Test(expected = NonPositiveDefiniteLinearOperatorException.class) @@ -304,7 +304,7 @@ public class ConjugateGradientTest { final ArrayRealVector b = new ArrayRealVector(2); b.setEntry(0, -1d); b.setEntry(1, -1d); - solver.solve(a, m, b, null, false); + solver.solve(a, m, b); } @Test @@ -320,7 +320,7 @@ public class ConjugateGradientTest { for (int j = 0; j < n; j++) { b.set(0.); b.setEntry(j, 1.); - final RealVector x = solver.solve(a, m, b, null, false); + final RealVector x = solver.solve(a, m, b); for (int i = 0; i < n; i++) { final double actual = x.getEntry(i); final double expected = ainv.getEntry(i, j); @@ -364,7 +364,7 @@ public class ConjugateGradientTest { for (int j = 0; j < n; j++) { b.set(0.); b.setEntry(j, 1.); - final RealVector x = solver.solve(a, m, b, null, false); + final RealVector x = solver.solve(a, m, b); final RealVector y = a.operate(x); double rnorm = 0.; for (int i = 0; i < n; i++) { @@ -411,8 +411,8 @@ public class ConjugateGradientTest { for (int j = 0; j < 1; j++) { b.set(0.); b.setEntry(j, 1.); - final RealVector px = pcg.solve(a, m, b, null, false); - final RealVector x = cg.solve(a, b, null, false); + final RealVector px = pcg.solve(a, m, b); + final RealVector x = cg.solve(a, b); final int npcg = pcg.getIterationManager().getIterations(); final int ncg = cg.getIterationManager().getIterations(); msg = String.format(pattern, npcg, ncg); @@ -465,7 +465,7 @@ public class ConjugateGradientTest { for (int j = 0; j < n; j++) { b.set(0.); b.setEntry(j, 1.); - solver.solve(a, b, null, false); + solver.solve(a, b); String msg = String.format("column %d (initialization)", j); Assert.assertEquals(msg, 1, count[0]); msg = String.format("column %d (iterations started)", j);