Skip to content

Commit 615d895

Browse files
Merge pull request #179 from yash2798/ys/tr_test
iip vs oop iteration test
2 parents c1267c8 + 99fc63f commit 615d895

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/trustRegion.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ function SciMLBase.__init(prob::NonlinearProblem{uType, iip}, alg::TrustRegion,
324324
initial_trust_radius = convert(eltype(u), p1 * (norm(fu)^0.99))
325325
end
326326

327+
327328
return TrustRegionCache{iip}(f, alg, u, fu, p, uf, linsolve, J, jac_config,
328329
1, false, maxiters, internalnorm,
329330
ReturnCode.Default, abstol, prob, radius_update_scheme, initial_trust_radius,

test/basictests.jl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,42 @@ for options in list_of_options
486486
@test all(abs.(f(u, p)) .< 1e-10)
487487
end
488488

489+
# Testing consistency of iip vs oop iterations
490+
491+
maxiterations = [2, 3, 4, 5]
492+
u0 = [1.0, 1.0]
493+
function iip_oop(f, fip, u0, radius_update_scheme, maxiters)
494+
prob_iip = NonlinearProblem{true}(fip, u0)
495+
solver = init(prob_iip, TrustRegion(radius_update_scheme = radius_update_scheme), abstol = 1e-9, maxiters = maxiters)
496+
sol_iip = solve!(solver)
497+
498+
prob_oop = NonlinearProblem{false}(f, u0)
499+
solver = init(prob_oop, TrustRegion(radius_update_scheme = radius_update_scheme), abstol = 1e-9, maxiters = maxiters)
500+
sol_oop = solve!(solver)
501+
502+
return sol_iip.u[end], sol_oop.u[end]
503+
end
504+
505+
for maxiters in maxiterations
506+
iip, oop = iip_oop(ff, ffiip, u0, RadiusUpdateSchemes.Simple, maxiters)
507+
@test iip == oop
508+
end
509+
510+
for maxiters in maxiterations
511+
iip, oop = iip_oop(ff, ffiip, u0, RadiusUpdateSchemes.Hei, maxiters)
512+
@test iip == oop
513+
end
514+
515+
for maxiters in maxiterations
516+
iip, oop = iip_oop(ff, ffiip, u0, RadiusUpdateSchemes.Yuan, maxiters)
517+
@test iip == oop
518+
end
519+
520+
for maxiters in maxiterations
521+
iip, oop = iip_oop(ff, ffiip, u0, RadiusUpdateSchemes.Fan, maxiters)
522+
@test iip == oop
523+
end
524+
489525
# --- LevenbergMarquardt tests ---
490526

491527
function benchmark_immutable(f, u0)

0 commit comments

Comments
 (0)