@@ -189,7 +189,8 @@ function sf(u, p=nothing)
189
189
end
190
190
191
191
u0 = [1.0 , 1.0 ]
192
- radius_update_schemes = [RadiusUpdateSchemes. Simple, RadiusUpdateSchemes. Hei, RadiusUpdateSchemes. Yuan]
192
+ radius_update_schemes = [RadiusUpdateSchemes. Simple, RadiusUpdateSchemes. Hei, RadiusUpdateSchemes. Yuan,
193
+ RadiusUpdateSchemes. Fan]
193
194
194
195
for radius_update_scheme in radius_update_schemes
195
196
sol = benchmark_immutable (ff, cu0, radius_update_scheme)
@@ -255,7 +256,6 @@ for p in 1.1:0.1:100.0
255
256
@test ForwardDiff. derivative (g, p) ≈ 1 / (2 * sqrt (p))
256
257
end
257
258
258
- # # FAIL BECAUSE JVP CANNOT ACCEPT PARAMETERS IN FUNCTIONS
259
259
g = function (p)
260
260
probN = NonlinearProblem {false} (f, csu0, p)
261
261
sol = solve (probN, TrustRegion (radius_update_scheme = RadiusUpdateSchemes. Yuan), abstol = 1e-9 )
@@ -267,6 +267,17 @@ for p in 1.1:0.1:100.0
267
267
@test ForwardDiff. derivative (g, p) ≈ 1 / (2 * sqrt (p))
268
268
end
269
269
270
+ g = function (p)
271
+ probN = NonlinearProblem {false} (f, csu0, p)
272
+ sol = solve (probN, TrustRegion (radius_update_scheme = RadiusUpdateSchemes. Fan), abstol = 1e-9 )
273
+ return sol. u[end ]
274
+ end
275
+
276
+ for p in 1.1 : 0.1 : 100.0
277
+ @test g (p) ≈ sqrt (p)
278
+ @test ForwardDiff. derivative (g, p) ≈ 1 / (2 * sqrt (p))
279
+ end
280
+
270
281
# Scalar
271
282
f, u0 = (u, p) -> u * u - p, 1.0
272
283
@@ -309,6 +320,19 @@ for p in 1.1:0.1:100.0
309
320
@test ForwardDiff. derivative (g, p) ≈ 1 / (2 * sqrt (p))
310
321
end
311
322
323
+ g = function (p)
324
+ probN = NonlinearProblem {false} (f, oftype (p, u0), p)
325
+ sol = solve (probN, TrustRegion (radius_update_scheme = RadiusUpdateSchemes. Fan), abstol = 1e-10 )
326
+ return sol. u
327
+ end
328
+
329
+ @test ForwardDiff. derivative (g, 3.0 ) ≈ 1 / (2 * sqrt (3.0 ))
330
+
331
+ for p in 1.1 : 0.1 : 100.0
332
+ @test g (p) ≈ sqrt (p)
333
+ @test ForwardDiff. derivative (g, p) ≈ 1 / (2 * sqrt (p))
334
+ end
335
+
312
336
f = (u, p) -> p[1 ] * u * u - p[2 ]
313
337
t = (p) -> [sqrt (p[2 ] / p[1 ])]
314
338
p = [0.9 , 50.0 ]
0 commit comments