2015-04-02 173 views
0

我检查了函数和参数,但找不到我的错误。如果你知道这里发生了什么,请发表评论。错误提供的函数不返回有效的浮点数

这里是我的代码:

from scipy.integrate import quad, dblquad 
from sympy.mpmath import sin, cos, sqrt, pi 


k0=0.1 

def f(y, k): 
    return k**2 + (1 - k**2)*y**2 

def p1(y,k): 
    return (1/f(y,k))*(f(y,k) - k**2 + (k**2)*sin(2*pi*sqrt(f(y,k)))/(2*pi*sqrt(f(y,k)))) 

def p2(y,k): 
    return (-1*k/(sqrt(1-y**2)*2*pi*f(y,k)))*(1 - cos(2*pi*sqrt(f(y,k)))) 

def p3(y,k): 
    return (k*y/(f(y,k)*sqrt(1-y**2)))*(f(y,k) - 1 + sin(2*pi*sqrt(f(y,k)))/(2*pi*sqrt(f(y,k)))) 

def q1(y,k): 
    return k*(1- y**2)*(1 - cos(2*pi*sqrt(f(y,k))))/f(y,k) 

def q2(y,k): 
    return sqrt(1- y**2)*sin(2*pi*sqrt(f(y,k)))/sqrt(f(y,k)) 

def q3(y,k): 
    return y*sqrt(1-y**2)*(1 - cos(2*pi*sqrt(f(y,k))))/f(y,k) 

r1 = lambda k: dblquad(lambda y,x: p2(x,k)*q3(y,k) - p3(x,k)*q2(y,k), -1, 1, lambda y: -1 , lambda y: y ) 

b = quad(r1, k0, 1) 

print (b) 
+0

什么行是错误的? – zeantsoi 2015-04-02 00:19:12

+0

这是Python 2还是Python 3?你能发布你得到的完整错误吗? – KSFT 2015-04-02 00:20:31

+0

python 3. retval = _quad(func,a,b,args,full_outputepsabs,epsrel,limit,points)line 281 return_quad_quadpack_qagse(func,a,b,args,full_output_epsabs,epsrel,limit)line 345 – 2015-04-02 00:46:52

回答

1

这可能是因为dblquad()返回一个元组(Y,误差),所以你需要索引的元组提取浮动:

r1 = lambda k: dblquad(lambda y, x: p2(x,k)*q3(y,k) - p3(x,k)*q2(y,k), 
         -1, 1, lambda y: -1, lambda y: y)[0] 
b = quad(r1, k0, 1) 
print(b) 
#Output: (0.2802359612009363, 4.646614072058449e-15) 
+0

您的代码需要长时间运行?它出现在这里一个味精:积分可能发散或单亲收敛。 – 2015-04-02 01:51:21

+0

是的,它需要一段时间才能运行。 – AChampion 2015-04-02 02:30:48

+0

已超过50分钟,它仍然运行 – 2015-04-02 02:37:00