#!/usr/bin/python3
import numpy as np
import math
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as Axes3D
import mysearch as mys

def f(x,y):
    return ((x-1)**2+y**2)


xn = np.array([-2,-1])
xnm=xn
pn = np.array([1,0])


def fline(t):
    x=xn+t*pn
    return f(x[0],x[1])
pset = np.array([[1,0],[0,1]])
deltaf=[0,0]
for j in range(0,10):
    fn=f(xn[0],xn[1])
    for i in range(0,2):
        pn = pset[i]
        blist = mys.minbracket(fline,0,4,25)
        if len(blist)>0:
            tmin = mys.golden(fline,blist[0][0],blist[0][1],1e-5)
            xn=xn+tmin*pn
        deltaf[i]=fn-fline(tmin)
    if np.sqrt((xnm[0]-xn[0])**2+(xnm[0]-xn[0])**2) < 1e-9:
        print("Minimum at "+str(xnm))
        break
    else:
        xnm=xn
        s=np.argmin(np.abs(deltaf))
        pset[s]=xn-xnm


