|
352 | 352 | @test gnewton(p) ≈ [sqrt(p[2] / p[1])]
|
353 | 353 | @test ForwardDiff.jacobian(gnewton, p) ≈ ForwardDiff.jacobian(t, p)
|
354 | 354 |
|
| 355 | +gnewton = function (p) |
| 356 | + probN = NonlinearProblem{false}(f, 0.5, p) |
| 357 | + sol = solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Yuan)) |
| 358 | + return [sol.u] |
| 359 | +end |
| 360 | +@test gnewton(p) ≈ [sqrt(p[2] / p[1])] |
| 361 | +@test ForwardDiff.jacobian(gnewton, p) ≈ ForwardDiff.jacobian(t, p) |
| 362 | + |
| 363 | +gnewton = function (p) |
| 364 | + probN = NonlinearProblem{false}(f, 0.5, p) |
| 365 | + sol = solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Fan)) |
| 366 | + return [sol.u] |
| 367 | +end |
| 368 | +@test gnewton(p) ≈ [sqrt(p[2] / p[1])] |
| 369 | +@test ForwardDiff.jacobian(gnewton, p) ≈ ForwardDiff.jacobian(t, p) |
| 370 | + |
355 | 371 | # Iterator interface
|
356 | 372 | f = (u, p) -> u * u - p
|
357 | 373 | g = function (p_range)
|
@@ -396,6 +412,9 @@ probN = NonlinearProblem(f, u0)
|
396 | 412 | @test solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Yuan)).u[end] ≈ sqrt(2.0)
|
397 | 413 | @test solve(probN, TrustRegion(; radius_update_scheme = RadiusUpdateSchemes.Yuan, autodiff = false)).u[end] ≈ sqrt(2.0)
|
398 | 414 |
|
| 415 | +@test solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Fan)).u[end] ≈ sqrt(2.0) |
| 416 | +@test solve(probN, TrustRegion(; radius_update_scheme = RadiusUpdateSchemes.Fan, autodiff = false)).u[end] ≈ sqrt(2.0) |
| 417 | + |
399 | 418 | for u0 in [1.0, [1, 1.0]]
|
400 | 419 | local f, probN, sol
|
401 | 420 | f = (u, p) -> u .* u .- 2.0
|
@@ -428,6 +447,16 @@ u = g(p)
|
428 | 447 | f(u, p)
|
429 | 448 | @test all(abs.(f(u, p)) .< 1e-10)
|
430 | 449 |
|
| 450 | +g = function (p) |
| 451 | + probN = NonlinearProblem{false}(f, u0, p) |
| 452 | + sol = solve(probN, TrustRegion(radius_update_scheme = RadiusUpdateSchemes.Fan), abstol = 1e-10) |
| 453 | + return sol.u |
| 454 | +end |
| 455 | +p = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] |
| 456 | +u = g(p) |
| 457 | +f(u, p) |
| 458 | +@test all(abs.(f(u, p)) .< 1e-10) |
| 459 | + |
431 | 460 | # Test kwars in `TrustRegion`
|
432 | 461 | max_trust_radius = [10.0, 100.0, 1000.0]
|
433 | 462 | initial_trust_radius = [10.0, 1.0, 0.1]
|
|
0 commit comments