Last active
April 22, 2016 02:33
-
-
Save jmg/9168c745d6350c75eccd8d878dec330a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#aca van los coeficientes de la cuadratica | |
a = 1 | |
b = 0 | |
c = -1 | |
#aca van las cotas del intervalo | |
ax = -3 | |
bx = 3 | |
#estes es el error de la raiz en el cual cortar | |
error = 0.0001 | |
def evaluar_resultado(valor, a, b, c): | |
return a * valor ** 2 + valor * b + c | |
def evaluar_signo(valor, a, b, c): | |
resultado = evaluar_resultado(valor, a, b, c) | |
if resultado > 0: | |
return "+" | |
else: | |
return "-" | |
#inicializo fp (valor de la raiz) en un numero mayor a 0 para que entre en el while la primera vez | |
fp = 9999999 | |
while abs(fp) > error: | |
p = (ax + bx) / 2.0 | |
#evaluo el signo de la funcion en ax (cota minima del intervalo) | |
signo_ax = evaluar_signo(ax, a, b, c) | |
#evaluo el signo de la funcion en bx (cota maxima del intervalo) | |
signo_bx = evaluar_signo(bx, a, b, c) | |
#evaluo el signo de la funcion en p (la mitad del intervalo) | |
signo_p = evaluar_signo(p, a, b, c) | |
#si el signo de ax (cota minima del intervalo) es distinto de p entonces la raiz esta en el semi-intervalo (ax-p) | |
if signo_ax != signo_p: | |
#asigno bx = p para la proxima iteracion (me quedo con el semi-intervalo donde esta la raiz) | |
bx = p | |
elif signo_bx != signo_p: | |
#asigno ax = p para la proxima iteracion (me quedo con el semi-intervalo donde esta la raiz) | |
ax = p | |
#evaluo la funcion en el punto donde creo que esta la raiz, si me da muy cerca de 0 (en module menor al error predefinido) corto el while | |
fp = evaluar_resultado(p, a, b, c) | |
print "Raiz aproximada = %s" % p | |
print "Valor en Raiz aproximada = %s" % fp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment