[ https://issues.apache.org/jira/browse/MATH-735?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sébastien Brisard closed MATH-735. ---------------------------------- Fixed in 3.0. > Improvements to linear iterative solvers > ---------------------------------------- > > Key: MATH-735 > URL: https://issues.apache.org/jira/browse/MATH-735 > Project: Commons Math > Issue Type: Improvement > Affects Versions: 3.0 > Reporter: Sébastien Brisard > Assignee: Sébastien Brisard > Labels: event, linear, solver > > Before we release version 3.0, I would like to perform some changes to the > general framework for linear iterative solvers. > # Remove interface {{InvertibleRealLinearOperator}}: this was only proposed > for handling preconditioners. Let {{M}} be this preconditioner. In the course > of the iterations, only matrix-vector products of the form {{M^(-1) . y}} are > needed, never direct products {{M . x}}. So it's just as simple to provide > {{M^(-1)}} as a standard {{RealLinearOperator}}, rather than {{M}} as an > {{InvertibleRealLinearOperator}}. This removes a little bit of clutter in the > class hierarchy. > # {{o.a.c.m.util.IterationEvent}} should at the very least have a method to > get the current iteration number. Overwise, I find myself keeping track of > the number of times > {{o.a.c.m.util.IterationManager.fireIterationPerformedEvent(IterationEvent)}} > is called, which is both ugly and painfull. > # {{o.a.c.m.util.linear.IterativeLinearSolverEvent}} should have a method to > access the norm of the residual. I was reluctant to specify such a method in > the interface at the start, because I was not sure any iterative solver > provides an updated estimate of this quantity at each iteration. In fact, > I've realized that most (if not all) solvers do, and it's quite nice to be > able to access this value while monitoring the progress of the inversion > (through {{o.a.c.m.utils.IterationListener}}). Otherwise, one has to compute > {{b - A . x}} inside the listener, which *doubles* the cost of each iteration! > # {{o.a.c.m.util.linear.IterativeLinearSolverEvent}} should have a method to > access the residual (the vector itself, not only its norm). I'm not sure > *all* solvers can do that, so this should be an optional feature, which might > be useful. I see two different possible implementations > ## specify {{RealVector > o.a.c.m.util.linear.IterativeLinearSolverEvent.getResidual()}} as an optional > feature (potentially throwing {{UnsupportedOperationException}}), together > with a method {{boolean > o.a.c.m.util.linear.IterativeLinearSolverEvent.providesResidual()}}. I think > some of us do not like {{UnsupportedOperationException}}, but this would be > similar to what was done in > {{RealLinearOperator.operateTranspose(RealVector)}}. > ## create a new interface {{RealVector > o.a.c.m.util.linear.IterativeLinearSolverWithResidualEvent}}. This is similar > to what is done currently, see {{o.a.c.m.linear.ProvidesResidual}}. > I would love to have some feedback on the last point. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira