2010-12-01 14 views
9

¿Hay algún método de bisección que pueda encontrar en línea, específicamente para python?Resolviendo la ecuación usando el método de bisección

Por ejemplo, dadas estas ecuaciones, ¿cómo puedo resolverlas usando el método de bisección?

x^3 = 9 
3 * x^3 + x^2 = x + 5 
cos^2x + 6 = x 
+0

Me gustaría que mi curso de métodos numéricos habían usado Python. :/Esto es realmente instructivo para implementarse; acaba de leer la descripción de Wikipedia para el algoritmo. –

+0

Es mejor utilizar algo que ya ha estado en uso por muchas personas que tratar de escribirlo usted mismo. [75% -90% de las implementaciones de búsqueda binaria son incorrectas.] (Https://en.wikipedia.org/wiki/Binary_search_algorithm#Implementation_issues) – endolith

Respuesta

12

Usando scipy.optimize.bisect:

import scipy.optimize as optimize 
import numpy as np 

def func(x): 
    return np.cos(x)**2 + 6 - x 

# 0<=cos(x)**2<=1, so the root has to be between x=6 and x=7 
print(optimize.bisect(func, 6, 7)) 
# 6.77609231632 

optimize.bisect llamadas _zeros._bisect, que se implementa en C

+0

cómo obtener el valor a y b? y también el número de bucle? – bbnn

+0

como en el ejemplo http://math.fullerton.edu/mathews/n2003/BisectionMod.html está tratando de resolver esta ecuación (x^3 + 4x^2-10 = 0) y usa la función Bisección [1, 2,30] ¿cómo obtener el número 1 2 y 30? es de la ecuación? – bbnn

+0

@bn: para usar 'bisect', debe suministrar' a' y 'b' de manera que' func (a) 'y' func (b) 'tengan signos opuestos, lo que garantiza que haya una raíz en' [a , b] 'ya que se requiere que' func' sea continuo. Podría intentar adivinar los valores para 'a' y' b', usar un poco de análisis, o si quiere hacerlo programáticamente, podría idear algún método para generar el candidato 'a' y' b' hasta que encuentre dos que tienen signos opuestos. Sin embargo, todo esto está más allá del simple método de 'bisección'. – unutbu