Main Content

integral2

이중 적분의 수치적 계산

설명

q = integral2(fun,xmin,xmax,ymin,ymax)는 평면 영역 xminxxmaxymin(x)yymax(x)에 대해 함수 z = fun(x,y)의 적분 근삿값을 구합니다.

예제

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

예제

예제

모두 축소

다음과 같은 함수가 있다고 가정해 보겠습니다.

f(x,y)=1(x+y)(1+x+y)2.

이 함수는 xy가 0인 경우 정의되지 않습니다. integral2는 특이점이 적분 경계에 있을 때 최상의 성능을 발휘합니다.

익명 함수를 생성합니다.

fun = @(x,y) 1./( sqrt(x + y) .* (1 + x + y).^2 )
fun = function_handle with value:
    @(x,y)1./(sqrt(x+y).*(1+x+y).^2)

0x10y1-x를 경계로 하는 삼각형 영역에 대해 적분을 계산합니다.

ymax = @(x) 1 - x;
q = integral2(fun,0,1,0,ymax)
q = 
0.2854

함수 정의

f(θ,r)=rrcosθ+rsinθ(1+rcosθ+rsinθ)2

fun = @(x,y) 1./( sqrt(x + y) .* (1 + x + y).^2 );
polarfun = @(theta,r) fun(r.*cos(theta),r.*sin(theta)).*r;

r의 상한에 대한 함수를 정의합니다.

rmax = @(theta) 1./(sin(theta) + cos(theta));

0θπ/20rrmax를 경계로 하는 영역에 대해 적분을 계산합니다.

q = integral2(polarfun,0,pi/2,0,rmax)
q = 
0.2854

파라미터 a=3, b=5를 사용하여 파라미터화된 익명 함수 f(x,y)=ax2+by2을 생성합니다.

a = 3; 
b = 5;
fun = @(x,y) a*x.^2 + b*y.^2;

영역 0x5-5y0에 대해 적분을 계산합니다. 'iterated' 방법과 약 10개의 유효 자릿수 정밀도를 지정합니다.

format long
q = integral2(fun,0,5,-5,0,'Method','iterated',...
'AbsTol',0,'RelTol',1e-10)
q = 
     1.666666666666667e+03

입력 인수

모두 축소

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

데이터형: function_handle

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

데이터형: double | single

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

데이터형: double | single

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

데이터형: double | function_handle | single

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

데이터형: double | function_handle | single

이름-값 인수

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

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

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

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

참고

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

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

데이터형: double | single

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

참고

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

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

데이터형: double | single

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

적분 방법설명
'auto'대부분의 경우 integral2'tiled' 방법을 사용합니다. 적분 한계 중 하나가 무한한 경우에는 'iterated' 방법을 사용합니다. 이는 디폴트 방법입니다.
'tiled'integral2는 적분 영역을 직사각형 형태로 변환하고 필요에 따라 더 작은 직사각형 영역으로 세분화합니다. 적분 한계는 유한해야 합니다.
'iterated'integral2integral을 호출해 반복적분(Iterated Integral)을 수행합니다. 외부 적분은 xminxxmax에 대해 계산됩니다. 내부 적분은 ymin(x)yymax(x)에 대해 계산됩니다. 적분 한계는 무한할 수 있습니다.

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

데이터형: char | string

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

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

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

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

  • ymin, ymax(또는 둘 다)가 비유계(Unbounded) 함수인 경우에는 'iterated' 방법을 사용합니다.

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

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

참고 문헌

[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에 개발됨