On the quadratic f(x) = x^2 the iteration has the exact closed form x_t = x_0 (1 - 2 lr)^t, so it converges for lr < 1, oscillates at lr = 1 and diverges beyond – the behaviour the tests pin down.
References
Cauchy (1847), Methode generale pour la resolution des systemes d'equations simultanees, C. R. Acad. Sci. Paris 25:536-538.
Examples
Gradds(function(x) sum(x^2), function(x) 2 * x, x0 = c(1, 1))
#> $estimate
#> [1] 8.299031e-20
#>
#> $x
#> [1] 2.037036e-10 2.037036e-10
#>
#> $f_path
#> [1] 2.000000e+00 1.280000e+00 8.192000e-01 5.242880e-01 3.355443e-01
#> [6] 2.147484e-01 1.374390e-01 8.796093e-02 5.629500e-02 3.602880e-02
#> [11] 2.305843e-02 1.475740e-02 9.444733e-03 6.044629e-03 3.868563e-03
#> [16] 2.475880e-03 1.584563e-03 1.014120e-03 6.490371e-04 4.153837e-04
#> [21] 2.658456e-04 1.701412e-04 1.088904e-04 6.968983e-05 4.460149e-05
#> [26] 2.854495e-05 1.826877e-05 1.169201e-05 7.482888e-06 4.789049e-06
#> [31] 3.064991e-06 1.961594e-06 1.255420e-06 8.034690e-07 5.142202e-07
#> [36] 3.291009e-07 2.106246e-07 1.347997e-07 8.627183e-08 5.521397e-08
#> [41] 3.533694e-08 2.261564e-08 1.447401e-08 9.263367e-09 5.928555e-09
#> [46] 3.794275e-09 2.428336e-09 1.554135e-09 9.946465e-10 6.365737e-10
#> [51] 4.074072e-10 2.607406e-10 1.668740e-10 1.067994e-10 6.835159e-11
#> [56] 4.374501e-11 2.799681e-11 1.791796e-11 1.146749e-11 7.339196e-12
#> [61] 4.697085e-12 3.006135e-12 1.923926e-12 1.231313e-12 7.880401e-13
#> [66] 5.043457e-13 3.227812e-13 2.065800e-13 1.322112e-13 8.461516e-14
#> [71] 5.415370e-14 3.465837e-14 2.218136e-14 1.419607e-14 9.085484e-15
#> [76] 5.814710e-15 3.721414e-15 2.381705e-15 1.524291e-15 9.755464e-16
#> [81] 6.243497e-16 3.995838e-16 2.557336e-16 1.636695e-16 1.047485e-16
#> [86] 6.703904e-17 4.290499e-17 2.745919e-17 1.757388e-17 1.124728e-17
#> [91] 7.198262e-18 4.606888e-18 2.948408e-18 1.886981e-18 1.207668e-18
#> [96] 7.729075e-19 4.946608e-19 3.165829e-19 2.026131e-19 1.296724e-19
#> [101] 8.299031e-20
#>
#> $grad_norm
#> [1] 7.20201e-10
#>
#> $steps_used
#> [1] 100
#>
#> $converged
#> [1] FALSE
#>
#> $n
#> [1] 2
#>
#> $method
#> [1] "x <- x - lr grad f(x), Cauchy (1847)"
#>
#> attr(,"class")
#> [1] "morie_rich_result" "list"
