错误提供的函数不返回有效的float

时间:2015-04-02 00:17:34

标签: python

我检查了功能和参数,但我找不到我的错误。如果您知道这里发生了什么,请发表评论。

这是我的代码:

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)  

1 个答案:

答案 0 :(得分:1)

可能是因为dblquad()返回一个元组(y,error),所以你需要索引到元组以提取浮点数:

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)