Skip to content

Commit 36f0811

Browse files
committed
add lsqr version
1 parent e05e9f9 commit 36f0811

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,7 +39,8 @@ 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
:LSARCqKOpCgls => (HessGaussNewtonOp, PDataLSKARC, solve_modelLSKARC, [:shifts => 10.0 .^ (collect(-10.0:0.5:20.0)), :solver_method => :cgls]),
4546
:LSARCqKOpLsqr => (HessGaussNewtonOp, PDataLSKARC, solve_modelLSKARC, [:shifts => 10.0 .^ (collect(-10.0:0.5:20.0)), :solver_method => :lsqr]),

src/utils/pdata_struct.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,11 +328,16 @@ function PDataNLSST(
328328
mintol = sqrt(eps(T)),
329329
cgatol = (ζ, ξ, maxtol, mintol, gNorm2) -> max(mintol, min(maxtol, ξ * gNorm2^(1 + ζ))),
330330
cgrtol = (ζ, ξ, maxtol, mintol, gNorm2) -> max(mintol, min(maxtol, ξ * gNorm2^ζ)),
331+
solver_method = :cgls,
331332
kwargs...,
332333
) where {S,T}
333334
d = S(undef, n)
334335
λ = zero(T)
335336
OK = true
336-
solver = CglsSolver(m, n, S)
337+
solver = if solver_method == :cgls
338+
CglsSolver(m, n, S)
339+
else
340+
LsqrSolver(m, n, S)
341+
end
337342
return PDataNLSST(d, λ, ζ, ξ, maxtol, mintol, cgatol, cgrtol, OK, solver)
338343
end

0 commit comments

Comments
 (0)