FixedPoint.jl

afps(f, x; iters::Int = 5000, vel::Float64 = 0.9, ep::Float64 = 0.01, tol::Float64 = 1e-12, grad_norm=x->maximum(abs,x))

solve equation f(x) = x according to:

`f` : function to find fixed point for

`x` : initial condition, ideally it should be close to the final solution

`vel` : amount of Nesterov acceleration in [0,1]

`ep` : learning rate, typically in ]0,1[

`tol` : absolute tolerance on |f(x)-x|

`grad_norm` : function to evaluate the norm |f(x)-x|

returns a named tuple (x, error, iters) where:

`x` : is the solution found for f(x)=x

`error` : is the norm of f(x)-x at the solution point

`iters` : total number of iterations performed

Examples

Scalar function example

using FixedPoint
s = afps(x -> 2 - x^2 + x, 1.3)
@show s.x, 2

Vector function example

using FixedPoint, LinearAlgebra
Ts = LinRange(0.01, 2.0, 500)
βs = 1 ./ Ts
f(x) = tanh.(βs .* x)
s = afps(
    f,
    zero(βs) .+ 1,
    iters = 5000,
)
@show norm(f(s.x).-s.x)

Inplace version

for the inplace method use afps! as

Ts = LinRange(0.01, 2.0, 500)
βs = 1 ./ Ts
function f!(out,x)
    @. out = tanh(βs * x)
end
x  = zero(βs) .+ 1 
afps!(
    f!,
    x,
    grad_norm = x -> maximum(abs, x),
    iters = 5000,
)
@show maximum(abs, x .- tanh.(βs .* x))