2016-05-21 4 views
-1

Ich habe eine allgemeine Bisektionsmethode geschrieben, um Wurzeln der bereitgestellten Funktion zu finden, ich möchte sie aufrufen, um eine quadratische Funktion zu lösen. hier ist mein generalroot.pyAufrufen einer Bisektionsmethode Root Finiding-Funktion und Calingit, um jede Funktion in Python zu lösen

# generalroot.py 
# determines the root of any general function 

def root_bisection(f, a, b, tolerance=1.0e-6): 
    dx = abs(b-a) 
    while dx > tolerance: 
     x = (a+b)/2.0 

     if (f(a)*f(x)) < 0: 
      b = x 
     else: 
      a = x 
     dx = abs(b-a) 
    return 

Jetzt

from math import * 
from generalroot import * 

def function(y): 
    y = y**2 + 5*x - 9 
    return y 

func = root_bisection(y, 0, 1) 

print 'Found f(x) =0 at x = %0.8f +/- %0.8f' % (func , tolerance) 

und ich erhalte die folgenden Fehler eine quadratische Funktion zu lösen ich es nenne:

raceback (most recent call last): 
    File "quadfrombisectionroot.py", line 8, in <module> 
    func = root_bisection (y , 0, 1) 
NameError: name 'y' is not defined 

Bitte helfen Sie mir beheben die Fehler, Danke

+0

Sie rufen 'root_bisection' mit Argument' y' auf, obwohl 'y' nicht definiert ist. Genau was die Fehlermeldung Ihnen sagt ... –

Antwort

1

root_bisection erwartet eine Funktion als erstes Argument. Sie sollten es wohl so nennen:

func = root_bisection(function, 0, 1) 

auch Sie bei der Definition von function einen Tippfehler haben. Ersetzen Sie x durch y.

Als allgemeinen Ratschlag: Tun Sie nie from libraryXYZ import *, aber importieren Sie nur die Funktionen, die Sie wirklich brauchen. Dies macht den Code viel lesbarer.

Verwandte Themen