2010-12-01 10 views
9

Gibt es eine Bisektionsmethode, die ich online finden kann, speziell für Python?Lösen von Gleichung mit Bisektionsmethode

Zum Beispiel, wie kann ich diese Gleichungen mit der Halbierung Methode lösen?

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

ich meine numerischen Methoden natürlich wünschen hatte Python verwendet. :/Dies ist wirklich lehrreich, um sich selbst zu implementieren; Lies einfach die Wikipedia-Beschreibung für den Algorithmus. –

+0

Am besten ist es, etwas zu verwenden, das bereits von vielen Leuten benutzt wird, anstatt es selbst zu schreiben. [75% -90% der binären Suchimplementierungen sind falsch.] (Https://en.wikipedia.org/wiki/Binary_search_algorithm#Implementation_issues) – endolith

Antwort

12

Mit 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 Anrufe _zeros._bisect, die in C implementiert

+0

Wie erhält man den a- und b-Wert? und auch die Anzahl der Schleifen? – bbnn

+0

wie im Beispiel http://math.fullerton.edu/mathews/n2003/BisectionMod.html versucht es diese Gleichung zu lösen (x^3 + 4x^2-10 = 0) und es benutzt die Funktion Bisection [1, 2,30] Wie bekommt man die Nummer 1 2 und 30? ist es aus der Gleichung? – bbnn

+0

@bn: Um 'bisect' zu verwenden, müssen Sie' a' und 'b' angeben, so dass' func (a) 'und' func (b) 'entgegengesetzte Vorzeichen haben und somit eine Wurzel in' [a , b] 'da' func' erforderlich ist, um kontinuierlich zu sein. Sie könnten versuchen, die Werte für "a" und "b" zu erraten, ein bisschen Analyse zu verwenden, oder wenn Sie es programmatisch machen wollen, können Sie eine Methode zum Erzeugen von Kandidaten 'a' und' b' entwickeln, bis Sie zwei finden das haben entgegengesetzte Zeichen. Das geht jedoch über den Rahmen der einfachen Halbierungsmethode hinaus. – unutbu