2015-05-27 19 views
6

SymPy'yi artıklarını almak için kullanmaya çalışıyorum, bu durumda kotanjant işlevi.Hata: function() en az n argümanı alır (n)

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)) 

Ben thusly sesleniyorum: Ben bir entegre() fonksiyonu var

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) 

Ve hatayı integrate() takes at least 6 arguments (6 given) almaya devam ve benim sorunun nerede olduğunu emin değilim. Çekirdeği yeniden başlatmayı denedim.

cevap

12

Python'un argümanları sayayamadığını belirten bir hata iletisi aldığınızda, bu genellikle geçirdiğiniz argümanların sayısı gerekli argümanların sayısına eşittir, ancak bazı gerekli argümanları kaçırıyorsunuzdur. isteğe bağlı argümanlar.

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

ve şu çağrıyı: Onları hizaya ise

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

, biz

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

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

birini kaçırdığını görüyoruz bu durumda, aşağıdakileri ifade edecektir lower, upper veya t, ancak exact sağladığınızdan, hata bildirimi karıştı.

>>> 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' 
:

Python 3 bu gibi şeyler için daha iyi bir hata mesajı var

İlgili konular