# -*- coding: cp1252 -*-
from math import *

epsilon=0.0000000000001 #esto es una variable global

#f: double -> double
#entrega el resultado de evaluar el valor x en una expresion que representa a una funcion de variable real, en este caso lo voy a dejar en tan(x)-x pero ustedes pueden cambiarlo
#ej: tan(pi)-pi retorna -pi
def f(x):
    #la siguiente expresión puedes modificarla, por ejemplo si se pone x**(2)-1
    return tan(x)-x

def derivada_f(x):
    return tan(x)**2


def newton(x):
    numero_iteraciones=1
    print "iteracion 0, (X sub 0) vale "+str(x)+" y la evalución en f vale "+str(f(x))
    while 1:
        x1=x-(f(x)*1.0)/derivada_f(x)
        if(abs(x-x1)<epsilon):
            break
        x=x1
        print "iteracion "+str(numero_iteraciones)+", (X sub "+str(numero_iteraciones)+") vale "+str(x)+" y la evalución en f vale "+str(f(x))
        numero_iteraciones+=1
    return x


#ahora viene una especia de pseudo aplicacion

print "ahora se calculara para la función f(x)=tan(x)-x, su raiz en el intervalo [4.4 , 4.5], tomando como punto inicial x=4.45 con una tolerancia de 0.0000000000001"
print ""
resultado=newton(4.45)
