2016-11-04 1 views
0

가 I이 통합하려고하면tplquad를 사용하는 방법?

) 죄 (Z * (2 통합 (통합 (통합 * COS (ATAN ((2 * COS (Y) -0.5 + X)/(2 * 죄 (Y))), y, 0, pi/2), x, 0,1), z, 0, pi/2);

볼프람은 해결책을 찾지 만 정확성을 제어하고 싶습니다. 나는 tplquad로 시도하지만 약간의 오류가있다.

def f(x,y,z): 
return 2*sin(z)*cos(atan((2*cos(y)-0.5+x)/(2*sin(y)))) 

tplquad(f,0,1,0,pi/2,0,pi/2) 

오류는 다음과 같습니다

인용문 파일 "", 3 호선, 파일에서 "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py ", 526 행, tplquad return dblquad (_infunc2, a, b, gfun, hfun, (func, qfun, rfun, args), epsabs = epsabs, epsrel = epsrel) 파일"/usr/lib/python2.7 /dist-packages/scipy/integrate/quadpack.py ", 줄 461, 0 블럭으로 돌아 가기 return 쿼드 (_infunc, a, b, (func, gfun, hfun, args), epsabs = epsabs, epsrel = epsrel) 파일"/usr/lib/py (func, a, b, args, full_output, epsabs, epsrel, limit, points) ret35 = 파일명 :/usr/bin//lib/python2.7/dist-packages/scipy/integrate/quadpack.py ", 줄 345, _quad 반환 _quadpack._qagse (func, a, b, args, full_output, epsabs, epsrel, limit) 파일" _infunc A = gfun (x)의 라인 (406), "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py 오류가에서 올 수있는 곳

당신에게 아이디어가 ?

답변

1

tplquad의 설명서에는 내부 적분의 통합 한계가 외부 통합 변수의 기능으로 제공되어야한다고 나와 있습니다 (귀하의 경우처럼 상수 일 수도 있음).

귀하의 경우에는 tplquad의 올바른 사용법이 아래에 나와 있습니다. f의 정의에서 인수의 순서는 통합의 순서와 일치해야합니다. f의 첫 번째 (마지막) 인수는 통합 될 마지막 (첫 번째) 인수입니다. 이 경우 고정 된 통합 제한으로 인해 순서가 부적합합니다.

import numpy as np 
from scipy.integrate import tplquad 

def f(y,x,z): 
    return 2*np.sin(z)*np.cos(np.arctan((2*np.cos(y)-0.5+x)/(2*np.sin(y)))) 

tplquad(f,0,np.pi/2, lambda z: 0, lambda z:1, lambda z, x: 0, lambda z, x: np.pi/2) 

(1.9999999999999998, 2.492629060475153e-14)

+0

그것은 좋아요! 고마워요 –

+0

난 매개 변수에 관한 질문이 있는데, 나는 람다 z를 이해하지 못한다 : 그리고 람다 z, x 후에 너는 설명 할 수 있겠 니? –

+0

@mpdesousa'lambda '연산자는 단순한 익명 함수를 편리하게 정의 할 수있게합니다. Python 언어의 기본 기능입니다 (예 : [here] (http://stackoverflow.com/questions/890128/why-are-python-lambdas-useful) 참조). – Stelios

관련 문제