2015-05-27 8 views
6

Ich versuche, SymPy zu verwenden, um Reste, in diesem Fall die Kotangens-Funktion zu nehmen. Ich habe eine Integration() Funktion bekam:Fehler: Funktion() dauert mindestens n Argumente (n gegeben)

import sympy as sy 
import numpy as np 

def integrate(f, z, gamma, t, lower, upper, exact=True): 
    ''' 
    Integrate f(z) along the contour gamma(t): [lower, upper] --> C 

    INPUTS: 
    f - A SymPy expression. Should represent a function from C to C. 
    z - A SymPy symbol. Should be the variable of f. 
    gamma - A SymPy expression. Should represent a function from [lower, upper] to C. 
    t - A SymPy symbol. Should be the variable of gamma. 
    lower - The lower bound for the domain of gamma. 
    upper - The upper bound for the domain of gamma. 

    RETURN: 
    A complex number. 
    ''' 
    integrand = f.subs(z, gamma)*sy.diff(gamma, t) 
    ans = sy.integrate(integrand, (t, lower, upper)) 
    if exact: 
     return sy.simplify(ans) 
    if ~exact: 
     return sy.N(sy.simplify(ans)) 

die ich thusly nenne:

def cot_res(n): 
    """Return the residue of the cotangent function at n*pi/2.""" 
    z, t = sy.symbols('z t') 
    f = sy.cot(z) 
    gamma = n*np.pi/2 + sy.exp(1j*t) 
    return 1/(2*np.pi*1j)*integrate(f, z, gamma, 0, 2*sy.pi, exact=True) 

for i in xrange(10): 
    print i/2., cot_res(i) 

Und ich erhalte den Fehler integrate() takes at least 6 arguments (6 given) und ich bin nicht sicher, wo mein Problem ist. Ich habe versucht, den Kernel neu zu starten.

Antwort

12

Wenn Sie eine Fehlermeldung erhalten, die darauf hinweist, dass Python keine Argumente zählen kann, liegt dies im Allgemeinen daran, dass die Anzahl der übergebenen Argumente der Anzahl der erforderlichen Argumente entspricht, aber einige erforderliche Argumente fehlen optionale Argumente. In diesem Fall müssen Sie die folgende Definition:

def integrate(f, z, gamma, t, lower, upper, exact=True): 

und den folgenden Aufruf:

integrate(f, z, gamma, 0, 2*sy.pi, exact=True) 

Wenn wir sie in einer Reihe aufstellen, sehen wir

def integrate(f, z, gamma, t, lower, upper, exact=True): 

    integrate(f, z, gamma, 0, 2*sy.pi,  exact=True) 

dass Sie fehlt ein von lower, upper oder t, aber weil Sie exact geliefert haben, wird die Fehlerberichterstattung verwirrt.

Python 3 hat eine bessere Fehlermeldung für Dinge wie diese:

>>> def f(a, b=0): pass 
... 
>>> f(b=1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: f() missing 1 required positional argument: 'a' 
Verwandte Themen