2014-10-11 7 views
0

내 코드에 대한 지침을 얻기 위해 Python을 처음 접했고 코드에서 수정 된 베셀 함수 k0에 어려움을 겪고 있습니다. 실제 코드는 두 부분으로 나뉘어집니다.Python TypeError : ufunc 'k0'Scipy.special.k0을 사용하여

1) 첫 번째 섹션에서는 sympy를 사용하여 t를 풀어 t = 0에서 x0 값을 반환합니다.

2) 두 번째 부분에서는이 값 x0을 사용하여 x의 다른 값에 대한 t를 계산합니다.

내가 명시된 해결 X0 값에 대해 작동하지 않는 것 difficulites에게 scipy.special.k0 기능을 가지고있어 두 번째 단계에서 내가 왜

from __future__ import division 
    import sympy as sy 
    from sympy import besselk, log, nsolve 
    import math 
    import numpy as np 
    import scipy.special as sp 
    Tc = 9.2 
    Tb = 5.2 
    tb = Tb/Tc 
    print 'Value of tb is:'+' '+ str(tb) 
    L = 100*10**-9 
    W = 100*10**-9 
    n = 3*10**-6 
    r1 = W/2 
    print 'value of r1 is:'+' '+ str(r1) 
    x1 = r1 /n 
    print 'value of x1 is'+ ' '+ str(x1) 
    S = math.sqrt(3/(1+ tb + tb**2)) 
    print 'value of S is:'+' ' + str(S) 
    B = (math.pi/2)*(1+(L/W)) 
    print 'value of B is:'+' ' + str(B) 
    E = [x /10 for x in range (1, 2, 1)] 
    x0 = sy.symbols('x0') 
    i = (S*x0)*(1-tb**3)*besselk(0, x0)/3*(log(x0/x1)+B) * besselk(0, S*x0) 
    t = - i*((log(x0/x1)*B)**2 - (log(x0/x1)+B)**2) 
    X0 = nsolve(t, E) 
    G = sp.k0(X0) 
    print 'value of x0 is:' +' '+ str(X0) 

때 지금까지 확실하지 않다 다음과 같은 오류가 발생하는 코드를 실행합니다.

TypeError: ufunc 'k0' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' 

어떤 도움을 주셔서 감사 드리며 미리 감사드립니다.

답변

2

X0은 일반적인 부동 소수점 값이 아닙니다. mpmath (sympy의 일부로 포함됨)에서 mpf 유형입니다. scipy.special.k0은 무엇인지 알지 못합니다. 이 변경 :

G = sp.k0(X0) 

을 여기에 :

G = sp.k0(float(X0))