2016-05-01 9 views
2

私がやっていることは、y以上の積分を計算してから、exp(-t *解)を計算し、それをxに積分したいと思います。 0からPiのSciPyを使って積分を伴う関数を積分する

にX(EXP(-tの*のB))の積分

Yの積分B =(3.0 *(SIN(X)*罪:このようなことになって

** 2.0~1.0)** 2.0~0P2: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)]) 
+0

あなたがしようとしていることを理解できません。解決しようとしている方程式を書くことができますか? –

+0

いいえ私は試しています: 積分オーバーx(exp(-t * B))。B =整数y(3.0 *(sin(x)* sin(y)* sin(TM)+ cos(x)* cos(TM))** 2.0-1.0)** 2.0 良い方程式、私は知っている:D –

+0

これは、scipyのようには見えないが、私には対応できる。これを解決するために差分eqnを統合するようなアプローチが必要なように感じます。または、xを離散化して外側の積分を近似します。 –

答えて

1

あなたがX上 を統合し、その後、指数関数を適用し、その後、Yの上に統合したいです。これは二重積分ではなく、積分で定義された関数の積分である。

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) 

出力::私はAと積分のあなたの定義を維持、それに応じてコードを書き直しました。ここ

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

、最初の数が第2の誤差推定値である、整数の値です。これはintegrate.quadが返すものです。 (これが関数Bの最後に[0]がある理由です)。

関数Bは、xを引数とし、0から2 * piまでの1次元積分の結果を返します。次に、ループでは、関数x*exp(-t*B(x))が統合されています。