-
Notifications
You must be signed in to change notification settings - Fork 53
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix preconditioning in cg
when optional radius
argument is positive
#868
Conversation
Thanks @mpf! |
Note the new 4th argument z, which is a vector that provides workspace for the mul! (or ldiv!) operations on the preconditioner. This isn't needed when M=I`. Because z is modified in place, probably the function should be renamed to to_boundary! (add exclamation).
@mpf Do you confirm that if we use a trust region in CG (and other Krylov solvers like CR, CRLS, CGLS, LSQR, LSMR), we need both I don't remember why the norm of the trust region is defined by an elliptic norm induced by the inverse of the preconditioner. I need to update the docstings to specify that after your PR. |
@amontoison say the trust-region constraint is s’Ms ≤ Δ². Then change variable: t = M^{½} s. |
@dpo Thanks! Can you confirm that we must provide both functions |
The role of Currently, the user supplies |
That would indeed simplify Gould, Lucidi, Roma, and Toint [SIAM Opt, 1999, p.514] describe an approach that tracks |
Update the arguments of to_boundary
As highlighted by @amontoison in this issue, the step-to-the-boundary computation in to_boundary needs to be updated so that it solves the equation
where
‖v‖_M^2 = v'Mv
. This pull request implements the required changes toto_boundary
.Note:
cg
is the only calling routine that's been correspondingly modified. Presumably all other solvers will also need to be suitably modified.to_boundary
implements two products with the preconditioner in order to computeMd
andMx
. It should be possible to avoid these products by instead accummulating the products in the callingcg
routine.See also this JSOSolvers.jl issue.