Skip to content

Instantly share code, notes, and snippets.

@jmg
Last active April 22, 2016 02:33
Show Gist options
  • Save jmg/9168c745d6350c75eccd8d878dec330a to your computer and use it in GitHub Desktop.
Save jmg/9168c745d6350c75eccd8d878dec330a to your computer and use it in GitHub Desktop.
#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