Main Content

integral3

삼중 적분의 수치적 계산

설명

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax)는 영역 xminxxmax, ymin(x)yymax(x), zmin(x,y)zzmax(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)

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

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);

영역 -x0, -100y0, -100z0에 대해 삼중 적분을 계산합니다.

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

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

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

V4(r)=02π0π0π0rr3sin2(θ)sin(ϕ)drdθ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

입력 인수

모두 축소

피적분 함수로, 함수 핸들로 지정되며, 영역 xminxxmax, ymin(x) ≤ yymax(x), zmin(x,y) ≤ zzmax(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입니다.

참고

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

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

데이터형: double | single

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

참고

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

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

데이터형: double | single

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

적분 방법설명
'auto'대부분의 경우 integral3'tiled' 방법을 사용합니다. 적분 한계 중 하나가 무한한 경우에는 'iterated' 방법을 사용합니다. 이는 디폴트 방법입니다.
'tiled'integral3integral을 호출해 xminxxmax에 대한 적분을 계산합니다. 그리고 integral2를 호출해 'tiled' 방법으로 ymin(x)yymax(x)zmin(x,y)zzmax(x,y)에 대한 이중 적분을 계산합니다.
'iterated'integral3integral을 호출해 xminxxmax에 대한 적분을 계산합니다. 그리고 integral2를 호출해 'iterated' 방법으로 ymin(x)yymax(x)zmin(x,y)zzmax(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 + afun이 생성되었을 때의 a 값을 사용합니다. 후에 a의 값을 변경하기로 결정했다면, 익명 함수를 새 값으로 재정의해야 합니다.

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

  • 4차원 이상의 적분을 풀기 위해서는 integral, integral2integral3에 대한 호출을 중첩할 수 있습니다. 또 다른 방법은 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에 개발됨