Hola vermells, gracias por tu ayuda, ya lo he resuelto, era un problema de índices. Pongo aquí el Biseccion.py corregido
Código:
#!/usr/bin/python
import evaluar
from pylab import *
from Numeric import *
def biseccion(a, b, TOL, N):
evaluar.dicc_seguro['x']=a
fa = eval(evaluar.funcion, {"__builtins__":None}, evaluar.dicc_seguro)
vectorx = zeros(N, Float64)
vectory = vectorx
i = 1
while i<=N :
p = (a+b)/2
vectorx[i-1] = p
evaluar.dicc_seguro['x']=p
fp = eval(evaluar.funcion, {"__builtins__":None}, evaluar.dicc_seguro)
vectory[i-1] = fp
if (fp == 0.0) or ((b-a)/2.0)<TOL:
break
i = i+1
if (fa*fp)>0 :
a = p
else :
b = p
print "La raiz buscada es: ",p
print "Vector x = ", vectorx
print "Vector y = ", vectory
def dibujar(a,b):
t = arange(a,b,0.1)
evaluar.dicc_seguro['x']=t
plot(t, eval(evaluar.funcion, {"__builtins__":None}, evaluar.dicc_seguro), linewidth=1.0)
xlabel('Abcisa')
ylabel('Ordenada')
title('Metodo Biseccion con f(x)=' + evaluar.funcion)
grid(True)
axhline(linewidth=2, color='r')
axvline(linewidth=2, color='r')
show()
Sólo me falta una cosa y es poder utilizar vectorx y vectory dentro de la función dibujar de Biseccion.py, como vectorx y vectory sólo los puedo calcular en la función biseccion, no se cómo llamarlos desde dibujar. Lo he intentado con return multiply pero nada de nada. ¿Alguien sabe cómo hacerlo? Por si acaso os explico, quiero pillar vectorx, vectory en dibujar para ponerlos en la instrucción plot, y así conseguir que me dibuje mediante puntos las distintas aproximaciones que va calculando el método de la bisección, junto con el dibujo de la función; de esa forma conseguimos ver cómo funciona la bisección de una forma visual, pero ya digo, no sé cómo llamar a vectorx y vectory en dibujar
Muchas gracias