使用SciPy集成一个本身涉及积分的函数

时间:2016-05-01 14:56:06

标签: python scipy integral

所以我试图做的是计算y上的积分,然后我想计算exp(-t *解决方案)并将其整合到x上。

它应该是这样的:

x(exp(-t * B))从0到Pi

的积分

B = y上的积分(3.0 *(sin(x)* sin(y)* sin(TM)+ cos(x)* cos(TM))** 2.0-1.0)** 2.0从0到2Pi

我尝试用scipy来做,但是在没有x的情况下它不会在y上进行整合。

到目前为止,这是我的代码:

from numpy import cos, sin, exp
import math
import scipy.integrate as integrate

t=0.0
TM=(54.74/180)*math.pi

def integrand(y,x):
    return (3.0*A(y,x)**2.0-1.0)**2.0

def A(y,x):
    return sin(x)*sin(y)*sin(TM)+cos(x)*cos(TM)

while t<10:
    t+=4
    resultbet, err=integrate.nquad(integrand, [(0.0, 2*math.pi)])
    result=exp(-t*resultbet)
    resultalph, err=integrate.nquad(result, [(0.0, math.pi)])

1 个答案:

答案 0 :(得分:1)

你想整合y,然后应用指数函数,然后整合 超过x。这不是双积分,这是根据积分定义的函数的积分。我相应地重写了代码,保留了A和被积函数的定义:

def B(x):
    return integrate.quad(lambda y: integrand(y,x), 0, 2*math.pi)[0]

while t<10:
    t += 4
    result = integrate.quad(lambda x: x*exp(-t*B(x)), 0, math.pi)
    print(result)

输出:

(0.28030701904213656, 1.0526577138223263e-08)
(0.1972630762340601, 1.3996736645569703e-12)
(0.16081518182419666, 9.188712047715815e-11)

这里,第一个数字是积分值,第二个是误差估计值;这就是integrate.quad返回的内容。 (这就是为什么在函数B的末尾有[0]。)

函数B将x作为参数,并将y上的一维积分结果从0返回到2 * pi。然后在循环中,函数x*exp(-t*B(x))被集成。