# -*- coding: utf-8 -*-
"""
Created on Tue May 14 20:48:59 2019

@author: tex
"""



import numpy as np
import matplotlib.pyplot as plt


import os
donnees=open('trajectoire1.txt',"r")
lignes=donnees.readlines()
donnees.close()
taille=len(lignes)

print(lignes)
temps=[]
x=[]
y=[]



for i in range(len(lignes)-1):
    l=lignes[i]
    l=l.strip()
    l=l.split('\t')
    for i in range(len(l)):
        l[i]=l[i].replace(',','.')
    temps.append(float(l[0]))
    x.append(abs(float(l[1])))
    y.append(float(l[2]))




def Traj_num(Uo,theta0,Ulim,yo):
    abscisses=Integration_num(Ulim)[0]
    ordonnees=Integration_num(Ulim)[1]
    plt.plot(abscisses,ordonnees,'g',lw=2)
    plt.title(str(Ulim))
    plt.grid()
    plt.axis("equal")
plt.figure(2)
plt.clf()    



def trace(x,y,X,Y,xlim):
    np=fonction(x,y,xlim)
    yp=y[0:np-1]
    xp=x[0:np-1]
    Yp=Y[0:np-1]
    Xp=X[0:np-1]
    plt.plot(xp,yp,'r')
    plt.plot(Xp,Yp,'g')

plt.figure(3)
plt.title('zoom sur abscisse entre 1 et ')
trace(x,y,X,Y,5.)  
plt.show()  

def bornes(f,xn,xm):
    if f(xn)<f(xm):
        return xn,xm
    else:
        return xm,xn


def iteration(f,xm,xn):
    xm,xn=bornes(f,xn,xm)
    xr=xm+(xm-xn)
    if f(xr)<f(xn):
        xe=xm+2*(xm-xn)
        if f(xr)<f(xe):
            xn=xr
        else:
            xn=xe
    else:
        xc1=xn+(1/2.0)*(xm-xn)
        if f(xc1)<f(xm):
            xn=xc1
        else:
            xn=xm+(1/2.0)*(xm-xn)
            
    return xm,xn





def minimum(f,a,b,tol,itmax):
    xm=float(a)
    xn=float(b)
    i=0
    while abs((xm-xn)/(xn*1.0))>tol and i<itmax:
        i=i+1
        xm,xn=iteration(f,xn,xm)
    return xm
    





def nelder(Ulim):
    Y=Integration_num(Ulim)[1]
    n=fonction(x,y,20)
    s=0
    for i in range(1,n):
       s=(y[i]-Y[i])**2+s
    return (s)**(1/2)
    

Ulim=minimum(nelder,20,30,10**(-2),100) 
print(Ulim)  

Traj_num(Uo,theta0,Ulim,yo)
plt.plot(x,y,lw=2)
plt.show()





















import numpy as np
import matplotlib.pyplot as plt


def fonction(x):
    return 4*np.sin(x)+2*np.cos(x)

x=np.linspace(0,6,1000)
plt.plot(x,x)
plt.plot(x,fonction(x))
plt.show()
    
def bornes(f,xm,xn):
    if f(xm)<f(xn):
        return xm,xn
    else:
        return xn,xm
        
print(bornes(fonction,5,2))

def Iteration(f,xm,xn):
    xm,xn=bornes(f,xm,xn)
    xr=xm-(xn-xm)
    if f(xr)<f(xn):
        xe=xr-(xm-xr)
        if f(xe)<f(xr):
            xn=xe
        else:
            xn=xr
    if f(xr)>f(xn):
        xc1=xm+(xn-xm)/2
        if f(xc1)<f(xm):
            xn=xc1
        if f(xc1)>f(xm):
            xn=xm+(xm-xn)/2
    return xm,xn

def Minimum(f,a,b,tol,itmax):
    xm=a
    xn=b
    i=0
    while abs((xn-xm)/xn)>tol and i<itmax:
        xm,xn=Iteration(f,xm,xn)
        i=i+1
    return xm



U=Minimum(fonction,3.5,2.2,0.01,4)        
print(U)