---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
#** solution(F,k, a,b) **finds x between a and b such that F(x)=k (if F varies continuously
# between A and B, and the sign of F(x)-k changes) automates a procedure similar to the
# following: we repeatedly **bisects** the interval defined and then selects the subinterval
# in which the function changes sign: (a,b) → (a',b') → (a",b") → …
# Similarly, with a **trisection**, the "minmax" command works.
#
# The graph of a function x -> f(x) and finding where it has a "bump"
f = function(x) x^3-x
graphF(f,-3,3, "blue")
# I want to look for x such that around it x^3 - x has a minimum value
graphF(f,-2,2, "blue")
# Between 0 and 1 the graph has a hump.
# I define a procedure that trisects the interval and selects the two subintervals
# in which the graph has a hump.
# In case (1) I take the two subintervals to the right, in case (2) those to the left
#
Min = function(f,a,b) {h=(b-a)/3;y1=f(a);y2=f(a+h);y3=f(a+2*h);if(y1>y2 & y2>y3) a<<-a+h else b<<- b-h}
#
a=0 ;b=1
Min(f,a,b); c(a,b)
# 0.3333333 1.0000000
Min(f,a,b); c(a,b)
# 0.3333333 0.7777778
Min(f,a,b); c(a,b)
# 0.4814815 0.7777778
Min(f,a,b); c(a,b)
# 0.4814815 0.6790123
#...
Min(f,a,b); c(a,b)
# 0.5773502 0.5773503
Min(f,a,b); c(a,b)
# 0.5773503 0.5773503
#
# The procedure "mimmax" automates this process.