2015-05-27 6 views
6

मैं इस मामले में कोटेजेंट फ़ंक्शन में अवशेष लेने के लिए SymPy का उपयोग करने का प्रयास कर रहा हूं।त्रुटि: फ़ंक्शन() कम से कम एन तर्क लेता है (एन दिया गया)

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

जो मैं thusly बोल रहा हूँ: मैं एक एकीकृत() फ़ंक्शन मिल गया है

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) 

और मैं त्रुटि integrate() takes at least 6 arguments (6 given) मिलती रहती है और मुझे यकीन है कि जहां मेरी समस्या है नहीं कर रहा हूँ। मैंने कर्नेल को पुनरारंभ करने का प्रयास किया है।

उत्तर

12

जब आपको कोई त्रुटि संदेश मिलता है जो इंगित करता है कि पाइथन तर्कों की गणना नहीं कर सकता है, तो आम तौर पर यह है कि आपके द्वारा पारित तर्कों की संख्या आवश्यक तर्कों की संख्या के बराबर होती है, लेकिन आप कुछ आवश्यक तर्क खो रहे हैं और कुछ वैकल्पिक तर्क

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

और निम्न कॉल:

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

तो हम उन्हें लाइन अप, हम देखते हैं

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

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

है कि आप एक भूल रहे हैं इस मामले में, आप निम्नलिखित परिभाषा है lower, upper, या t, लेकिन क्योंकि आपने exact की आपूर्ति की है, तो त्रुटि रिपोर्टिंग उलझन में आती है।

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

अजगर 3 इस जैसी चीजों के लिए एक बेहतर त्रुटि संदेश है

संबंधित मुद्दे