#!/usr/bin/python3
import numpy as np
import math
import matplotlib.pyplot as plt

def f(x):
    return (x*np.cos(x)+x*np.sin(x/2)).item()

a=-5
b=5
N=20

def minbracket(f,a,b,N):
    brackets=[]
    h=(b-a)/N
    for i in range(1,N-1):
        fx=f(a+(i-1)*h)
        fxi=f(a+i*h)
        fy=f(a+(i+1)*h)
        if fxi<fx and fxi<fy:
             brackets.append([a+(i-1)*h,a+(i+1)*h])
    return brackets


def goldensection(f,br,tol):
    ans=[]
    for inter in br:
        phi=(1+5**0.5)/2
        a=inter[0]
        b=inter[1]
        while np.abs(b-a) < tol:
            c=b-(b-a)/phi
            d=a+(b-a)/phi
            if f(d)<f(c):
                a=c
            else:
                b=d
        ans.append(a)
    return ans



print(goldensection(f,minbracket(f,-10,10,1000),1e-5))
