[완료] 자바에서 중적분 질문입니다. (apache common-math 라이브러리 사용)

allinux의 이미지

안녕하세요.

범위가 1개인 간단한 정적분은 쉽게 할 수 있겠는데 범위가 2개 이상이 되는 중적분은 어떻해 해야 할 지 모르겠습니다.

//간단한 정적분의 예
// 함수정의
import org.apache.commons.math.analysis.UnivariateRealFunction
 
class MyFunc implements UnivariateRealFunction{
    double value(double x){
        return 2*x
    }
}
=================================================================
// 실행예
import org.apache.commons.math.analysis.integration.RombergIntegrator
import org.apache.commons.math.analysis.UnivariateRealFunction
import org.apache.commons.math.analysis.integration.UnivariateRealIntegrator
 
......
UnivariateRealFunction f = new MyFunc()
UnivariateRealIntegrator integrator = new RombergIntegrator()
double result = integrator.integrate(f, 0.0, 5.0)
System.out.println(result)
.......

integrate의 메소드의 인수가 함수, 최소, 최대값 형태인데 2중적분에서는 최소 최대값의 범위가 2개인데 어떻해할지 모르겠습니다.
많은 도움 부탁드립니다.

allinux의 이미지

matlab 처럼 double quad 같은 함수가 있을줄 알았는데 없는 모양입니다.
귀찮아도 직접 구현하여 사용해야 되나 봅니다.

* Groovy

import org.apache.commons.math.analysis.integration.RombergIntegrator
import org.apache.commons.math.analysis.UnivariateRealFunction
 
integrate = new RombergIntegrator()
// xy^2 함수. 0~2, -1~1 까지 구간의 적분
innerF = [value:{y->return y*y}] as UnivariateRealFunction       // UnivariateRealFunction 인터페이스를 구현한 것 입니다. value가 메소드이고 y가 변수 입니다.
outerF = [value:{x->
    return x * integrate.integrate(innerF, -1.0, 1.0)
}] as UnivariateRealFunction
 
result = integrate.integrate(outerF, 0.0, 2.0)
 
println result