Skip to content

Commit a8aaef4

Browse files
committed
add lsqr solver
1 parent 00f1078 commit a8aaef4

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/solvers.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const solvers_nls_const = Dict(
3939
[:shifts => 10.0 .^ (collect(-10.0:0.5:20.0))],
4040
),
4141
:ST_TROpGN => (HessGaussNewtonOp, PDataST, solve_modelST_TR, ()),
42-
:ST_TROpGNLS => (HessGaussNewtonOp, PDataNLSST, solve_modelNLSST_TR, ()),
42+
:ST_TROpGNLSCgls => (HessGaussNewtonOp, PDataNLSST, solve_modelNLSST_TR, [:solver_method => :cgls]),
43+
:ST_TROpGNLSLsqr => (HessGaussNewtonOp, PDataNLSST, solve_modelNLSST_TR, [:solver_method => :lsqr]),
4344
:ST_TROpLS => (HessOp, PDataNLSST, solve_modelNLSST_TR, ()),
4445
)

src/utils/pdata_struct.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,16 @@ function PDataNLSST(
252252
mintol = sqrt(eps(T)),
253253
cgatol = (ζ, ξ, maxtol, mintol, gNorm2) -> max(mintol, min(maxtol, ξ * gNorm2^(1 + ζ))),
254254
cgrtol = (ζ, ξ, maxtol, mintol, gNorm2) -> max(mintol, min(maxtol, ξ * gNorm2^ζ)),
255+
solver_method = :cgls,
255256
kwargs...,
256257
) where {S,T}
257258
d = S(undef, n)
258259
λ = zero(T)
259260
OK = true
260-
solver = CglsSolver(m, n, S)
261+
solver = if solver_method == :cgls
262+
CglsSolver(m, n, S)
263+
else
264+
LsqrSolver(m, n, S)
265+
end
261266
return PDataNLSST(d, λ, ζ, ξ, maxtol, mintol, cgatol, cgrtol, OK, solver)
262267
end

0 commit comments

Comments
 (0)