각 레이어의 한계가 다음 레이어에 의존하는 파이썬에서 중첩 된 수치 적분으로 작업하고 있습니다. 내 코드의 전체 구조가 보이는 내 코드의 전체 버전에파이썬에서 중첩 된 수치 적분을
import numpy as np
import scipy.integrate as si
def func(x1, x2, x3, x4):
return x1**2 - x2**3+x3*x2 - x4*x3**3
def int1():
"""integrates `int2` over x1"""
a1, b1 = -1, 3
def int2(x1):
"""integrates `func` over x2 at given x1."""
#partial_func1 = lambda x2: func(x1, x2)
b2 = 1 - np.abs(x1)
a2 = -np.abs(x1**3)
def int3(x2):
a3 = x2
b3 = -a3
def int4(x3):
partial_func = lambda x4: func(x1, x2, x3, x4)
a4 = 1+np.abs(x3)
b4 = - a4
return si.quad(partial_func,a4,b4)[0]
return si.quad(int4, a3, b3)[0]
return si.quad(int3, a2, b2)[0]
return si.quad(int2, a1, b1)[0]
result = int1() # -22576720.048151683
처럼, 적분과 한계는 복잡하고 불편하다, 실행하는 데 몇 시간이 걸립니다. 각 통합은 쉽게 병렬화 될 수있는 것처럼 보입니다 : 다중 CPU를 사용하여 통합을 배포하고 런타임을 가속화 할 수 있어야합니다.
def testfunc(intfunc,fmin,fmax):
return scint.quad(intfun,fmin,fmax,epsabs=10**-40)[0]
result = pool.map(partial(partial(testfunc, intfunc = int4),fmin = a3),[b3])
하지만 로컬 개체가 절인 할 수 없다는 오류가 발생했습니다 : 스택 오버 플로우에 다른 게시물을 참조
, 나는 다음과 같은 시도했다.
내가 건너 온 또 다른 자원은 http://catherineh.github.io/programming/2016/10/04/parallel-integration-for-mere-mortals
에 있었다 그러나 나는뿐만 아니라 입력으로 (파셜의 그러므로 내 사용) 한계를 통과 할 수있는 전 기능이 필요합니다.
누구든지 이러한 문제를 해결하는 방법을 알고 있습니까? 솔루션은 여러 입력을 처리 할 수있는 pool.map의 일부 버전이 될 것이라고 생각합니다.하지만 partials를 사용하는 데 문제가있는 경우 알아두면 좋을 것입니다.
미리 감사 드리며 정리 해줄 수있는 것이 있다면 알려주세요!
예제 코드에서와 같이 각 내부 계층의 한계는 외부 계층의 결과에 따라 다릅니다. 전역 함수라면 한계는 부동 소수점으로 처리 될 수 없으며 정수는 수치로 계산할 수 없습니다 – PhysicistAbroad
한계로 언급 한 것을 어떻게 해결할 수 있습니까? 서면 중첩 된 integrals 에서처럼, 그들은 순차적으로 평가해야합니다. – PhysicistAbroad
나는 잘할 수 있고, 나는 한두 가지를 배울 수 있습니다 :) 최종 결과는'-22576720.048151683'이어야합니까? – roganjosh