주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

integral3

R2025b

삼중 적분의 수치적 계산

설명

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax)는 영역 xmin ≤ x ≤ xmax, ymin(x) ≤ y ≤ ymax(x), zmin(x,y) ≤ z ≤ zmax(x,y)에 대해 함수 z = fun(x,y,z)의 적분 근삿값을 계산합니다.

예제

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,Name,Value)는 하나 이상의 Name,Value 쌍의 인수로 추가 옵션을 지정합니다.

예제

예제

모두 축소

익명 함수 f(x,y,z)=ysinx+zcosx를 정의합니다.

fun = @(x,y,z) y.*sin(x)+z.*cos(x)
fun = function_handle with value:
    @(x,y,z)y.*sin(x)+z.*cos(x)

영역 0≤x≤π, 0≤y≤1, -1≤z≤1에 대해 적분을 계산합니다.

q = integral3(fun,0,pi,0,1,-1,1)
q = 
2.0000

익명 함수 f(x,y,z)=xcosy+x2cosz를 정의합니다.

fun = @(x,y,z) x.*cos(y) + x.^2.*cos(z)
fun = function_handle with value:
    @(x,y,z)x.*cos(y)+x.^2.*cos(z)

적분의 제한 영역을 정의합니다.

xmin = -1;
xmax = 1;
ymin = @(x)-sqrt(1 - x.^2);
ymax = @(x) sqrt(1 - x.^2);
zmin = @(x,y)-sqrt(1 - x.^2 - y.^2);
zmax = @(x,y) sqrt(1 - x.^2 - y.^2);

'tiled' 방법으로 정적분을 계산합니다.

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,'Method','tiled')
q = 
0.7796

파라미터화된 익명 함수 f(x,y,z)=10/(x2+y2+z2+a)을 정의합니다.

a = 2;
f = @(x,y,z) 10./(x.^2 + y.^2 + z.^2 + a);

영역 -∞≤x≤0, -100≤y≤0, -100≤z≤0에 대해 삼중 적분을 계산합니다.

format long
q1 = integral3(f,-Inf,0,-100,0,-100,0)
q1 = 
     2.734244598320929e+03

약 9개의 유효 자릿수 정밀도를 지정해 적분을 다시 계산합니다.

q2 = integral3(f,-Inf,0,-100,0,-100,0,'AbsTol', 0,'RelTol',1e-9)
q2 = 
     2.734244599944285e+03

integral3과 integral에 대한 중첩 호출을 사용하여 4차원 구의 부피를 계산합니다.

반지름이 r인 4차원 구의 부피는 다음과 같습니다.

V4(r)=∫02π∫0π∫0π∫0rr3 sin2(θ) sin(ϕ) dr dθ dϕ dξ.

MATLAB®의 integral 구적법 함수는 1차원, 2차원, 3차원 적분을 직접 지원합니다. 그러나 4차원 이상의 적분을 풀려면 솔버에 대한 호출을 중첩해야 합니다.

요소별 연산자(.^ 및 .*)를 사용하여 피적분 함수에 대한 함수 핸들 f(r,θ,ϕ,ξ)를 만듭니다.

f = @(r,theta,phi,xi) r.^3 .* sin(theta).^2 .* sin(phi);

다음으로, integral3을 사용하여, 3개의 적분을 계산하는 함수 핸들을 만듭니다.

Q = @(r) integral3(@(theta,phi,xi) f(r,theta,phi,xi),0,pi,0,pi,0,2*pi);

마지막으로, integral에 대한 호출에서 Q를 피적분 함수로 사용합니다. 이 적분을 풀려면 반지름 r의 값을 선택해야 합니다. r=2를 사용하십시오.

I = integral(Q,0,2,'ArrayValued',true)
I = 
78.9568

정확한 답은 π2r42 Γ(2)입니다.

I_exact = pi^2*2^4/(2*gamma(2))
I_exact = 
78.9568

입력 인수

모두 축소

피적분 함수로, 함수 핸들로 지정되며, 영역 xmin ≤ x ≤ xmax, ymin(x) ≤ y ≤ ymax(x), zmin(x,y) ≤ z ≤ zmax(x,y)에 대해 적분이 구해질 함수입니다. 함수 fun은 동일한 크기의 배열을 세 개 받아들이고 대응하는 값의 배열을 반환해야 합니다. 이 함수는 요소별 연산을 수행해야 합니다.

데이터형: function_handle

x의 하한으로, 유한 또는 무한인 실수형 스칼라 값으로 지정됩니다.

데이터형: double | single

x의 상한으로, 유한 또는 무한인 실수형 스칼라 값으로 지정됩니다.

데이터형: double | single

y의 하한으로, 유한 또는 무한인 실수형 스칼라 값으로 지정됩니다. 사각형이 아닌 영역에 대한 적분을 계산할 때에는 ymin 또한 함수 핸들(x의 함수)로 지정할 수 있습니다.

데이터형: double | function_handle | single

y의 상한으로, 유한 또는 무한인 실수형 스칼라 값으로 지정됩니다. 사각형이 아닌 영역에 대한 적분을 계산할 때에는 ymax 또한 함수 핸들(x의 함수)로 지정할 수 있습니다.

데이터형: double | function_handle | single

z의 하한으로, 유한 또는 무한인 실수형 스칼라 값으로 지정됩니다. 사각형이 아닌 영역에 대한 적분을 계산할 때에는 zmin 또한 함수 핸들(x,y의 함수)로 지정할 수 있습니다.

데이터형: double | function_handle | single

z의 상한으로, 유한 또는 무한인 실수형 스칼라 값으로 지정됩니다. 사각형이 아닌 영역에 대한 적분을 계산할 때에는 zmax 또한 함수 핸들(x,y의 함수)로 지정할 수 있습니다.

데이터형: double | function_handle | single

이름-값 인수

모두 축소

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'AbsTol',1e-12는 절대 허용오차의 근삿값을 소수점 이하 약 열두 자릿수까지의 정확도로 설정합니다.

절대 허용오차로, 'AbsTol'과 함께 음이 아닌 실수가 쉼표로 구분되어 지정됩니다. integral3은 절대 오차 |q - Q|의 추정값을 제한하기 위해 절대 허용오차를 사용합니다. 여기서 q는 계산된 적분의 값이고 Q는 (알려지지 않은) 정확한 값입니다. 절대 허용오차를 감소시키면 integral3이 더 큰 소수 정밀도를 제공할 수 있습니다. 디폴트 값은 1e-10입니다.

참고

AbsTol과 RelTol은 개별적으로 존재합니다. integral3은 절대 허용오차 또는 상대 허용오차 중 하나를 충족하더라도, 둘 다 충족하지는 않을 수 있습니다. 이러한 허용오차에 대한 자세한 내용은 팁 섹션을 참조하십시오.

예: 'AbsTol',1e-12는 절대 허용오차의 근삿값을 소수점 이하 약 열두 자릿수까지의 정확도로 설정합니다.

데이터형: double | single

상대 허용오차로, 'RelTol'과 함께 음이 아닌 실수가 쉼표로 구분되어 지정됩니다. integral3은 상대 오차 |q – Q|/|Q|의 추정값을 제한하기 위해 상대 허용오차를 사용합니다. 여기서 q는 계산된 적분의 값이고 Q는 (알려지지 않은) 정확한 값입니다. 상대 허용오차를 감소시키면 integral3이 더 큰 유효 자릿수 정밀도를 제공할 수 있습니다. 디폴트 값은 1e-6입니다.

참고

RelTol과 AbsTol은 개별적으로 존재합니다. integral3은 상대 허용오차 또는 절대 허용오차 중 하나를 충족하더라도, 둘 다 충족하지는 않을 수 있습니다. 이러한 허용오차에 대한 자세한 내용은 팁 섹션을 참조하십시오.

예: 'RelTol',1e-9는 상대 허용오차를 약 9개의 유효 자릿수까지 설정합니다.

데이터형: double | single

적분 방법으로, 'Method'와 함께 아래에서 설명하는 방법 중 하나가 쉼표로 구분되어 지정됩니다.

적분 방법설명
'auto'대부분의 경우 integral3는 'tiled' 방법을 사용합니다. 적분 한계 중 하나가 무한한 경우에는 'iterated' 방법을 사용합니다. 이는 디폴트 방법입니다.
'tiled'integral3은 integral을 호출해 xmin ≤ x ≤ xmax에 대한 적분을 계산합니다. 그리고 integral2를 호출해 'tiled' 방법으로 ymin(x) ≤ y ≤ ymax(x) 및 zmin(x,y) ≤ z ≤ zmax(x,y)에 대한 이중 적분을 계산합니다.
'iterated'integral3은 integral을 호출해 xmin ≤ x ≤ xmax에 대한 적분을 계산합니다. 그리고 integral2를 호출해 'iterated' 방법으로 ymin(x) ≤ y ≤ ymax(x) 및 zmin(x,y) ≤ z ≤ zmax(x,y)에 대한 이중 적분을 계산합니다. 적분 한계는 무한할 수 있습니다.

예: 'Method','tiled'는 타일 형식 적분 방법을 지정합니다.

데이터형: char | string

팁

  • integral3 함수는 다음을 충족하려고 시도합니다.

    abs(q - Q) <= max(AbsTol,RelTol*abs(q))
    여기서 q는 적분의 계산된 값이고 Q는 (알려지지 않은) 정확한 값입니다. 절대 및 상대 허용오차는 정확도와 계산 시간을 절충할 수 있도록 해줍니다. 일반적으로 상대 허용오차는 적분의 정확도를 결정합니다. 하지만 abs(q)가 충분히 작은 경우에는 절대 허용오차가 적분의 정확도를 결정합니다. 일반적으로 절대 및 상대 허용오차 둘 다 함께 지정해야 합니다.

  • 함수가 적분 영역 내에서 불연속을 가질 경우 'iterated' 방법이 더 효율적일 수 있습니다. 하지만 불연속 지점에서 적분을 분할하고 복수의 적분 결과를 합산하면 최상의 성능과 정밀도를 얻을 수 있습니다.

  • 사각형이 아닌 영역에 대해 적분을 구할 때에는 ymin, ymax, zmin, zmax가 함수 핸들이어야 최상의 성능과 정확도를 얻을 수 있습니다. 사각형이 아닌 영역에 대한 적분을 위해 피적분 함수 값을 0으로 설정하지 마십시오. 꼭 해야 할 경우에는 'iterated' 방법을 지정하십시오.

  • 'iterated' 방법은 제한 영역 ymin(x), ymax(x), zmin(x,y), zmax(x,y) 중 하나 또는 전부가 비유계(Unbounded) 함수인 경우에 사용합니다.

  • 익명 함수에 파라미터를 지정할 때는 파라미터 값이 함수 핸들의 수명 동안 지속된다는 것에 유의하십시오. 예를 들어, 함수 fun = @(x,y,z) x + y + z + a는 fun이 생성되었을 때의 a 값을 사용합니다. 후에 a의 값을 변경하기로 결정했다면, 익명 함수를 새 값으로 재정의해야 합니다.

  • 적분의 단정밀도 제한 영역을 지정하거나 fun이 단정밀도 결과를 반환하는 경우, 더 큰 절대 및 상대 허용오차를 지정해야 할 수도 있습니다.

  • 4차원 이상의 적분을 풀기 위해서는 integral, integral2 및 integral3에 대한 호출을 중첩할 수 있습니다. 또 다른 방법은 4~6차원의 적분을 푸는 integralN 함수를 사용하는 것이며, 이 함수는 MATLAB® File Exchange에 있습니다.

참고 문헌

[1] L.F. Shampine “Vectorized Adaptive Quadrature in MATLAB,” Journal of Computational and Applied Mathematics, 211, 2008, pp.131–140.

[2] L.F. Shampine, "MATLAB Program for Quadrature in 2D." Applied Mathematics and Computation. Vol. 202, Issue 1, 2008, pp. 266–274.

확장 기능

모두 확장

버전 내역

R2012a에 개발됨