24 lines
709 B
Plaintext
24 lines
709 B
Plaintext
# good style
|
|
function fixedpointmap(f; iv, tolerance=1E-7, maxiter=1000)
|
|
# setup the algorithm
|
|
x_old = iv
|
|
normdiff = Inf
|
|
iter = 1
|
|
while normdiff > tolerance && iter <= maxiter
|
|
x_new = f(x_old) # use the passed in map
|
|
normdiff = norm(x_new - x_old)
|
|
x_old = x_new
|
|
iter = iter + 1
|
|
end
|
|
return (value = x_old, normdiff=normdiff, iter=iter) # A named tuple
|
|
end
|
|
|
|
# define a map and parameters
|
|
p = 1.0
|
|
β = 0.9
|
|
f(v) = p + β * v # note that p and β are used in the function!
|
|
|
|
sol = fixedpointmap(f, iv=0.8, tolerance=1.0E-8) # don't need to pass
|
|
println("Fixed point = $(sol.value), and |f(x) - x| = $(sol.normdiff) in $(sol.iter)"*
|
|
" iterations")
|