Main Content

quadl

(권장되지 않음) 적분의 수치적 계산, 적응적 로바토 구적법(Adaptive Lobatto Quadrature)

quadl은 권장되지 않습니다. integral을 대신 사용하십시오.

구문

q = quadl(fun,a,b)
q = quadl(fun,a,b,tol)
quadl(fun,a,b,tol,trace)
[q,fcnt] = quadl(...)

설명

q = quadl(fun,a,b)는 적응적 재귀 로바토 구적법(Recursive Adaptive Lobatto Quadrature)을 사용하여 함수 fun에서 a부터 b까지의 적분 근삿값을 오차 범위 10-6 내에서 계산합니다. fun은 함수 핸들입니다. 벡터 x를 받고 벡터 y를 반환합니다. 함수 funx의 각 요소에서 실행됩니다. 제한 ab는 유한해야 합니다.

함수를 파라미터화하기에는 필요한 경우 fun 함수에 추가 파라미터를 제공하는 방법이 설명되어 있습니다.

q = quadl(fun,a,b,tol)은 디폴트 1.0e-6 대신 tol의 절대 허용오차를 사용합니다. tol의 값이 클수록 함수 실행 횟수가 적어지고 계산 속도가 빨라지지만 결과의 정확도는 떨어집니다.

quadl(fun,a,b,tol,trace)(여기서 trace는 0이 아님)는 재귀 중에 [fcnt a b-a q]의 값을 표시합니다.

[q,fcnt] = quadl(...)은 함수 실행 횟수를 반환합니다.

벡터 인수를 사용하여 계산할 수 있도록 fun의 정의에서 배열 연산자 .*./.^을 사용합니다.

미분 불가능한 피적분 함수(Nonsmooth Integrands)를 사용하는 낮은 정확도의 계산에는 함수 quad가 더 효율적일 수 있습니다.

아래 목록에는 MATLAB®에서 사용할 구적법 함수 결정에 도움이 되는 정보가 있습니다.

  • 미분 불가능한 피적분 함수를 사용하는 낮은 정확도의 계산에는 quad 함수가 가장 효율적일 수 있습니다.

  • 미분 가능한 피적분 함수(Smooth Integrands)를 사용하는 높은 정확도의 계산에는 quad보다 quadl 함수가 더 효율적일 수 있습니다.

  • 정확도가 높고 진동하는 피적분 함수를 사용하는 계산에는 quadgk 함수가 가장 효율적일 수 있습니다. 이 함수는 무한대 구간을 지원하며, 끝점에 있는 중간 정도의 특이점을 처리할 수 있습니다. 또한 조각별 선형 경로를 따른 경로 적분(Contour Integration)을 지원합니다.

  • quadv 함수는 배열 값을 갖는 fun에 대해 quad를 벡터화합니다.

  • 구간이 무한대 [a,)인 경우 fun(x)에 대한 적분이 성립하려면 x가 무한대에 가까워질 때 fun(x)가 감쇠해야 합니다. quadgk를 사용하려면 이 함수가 빠르게 감쇠해야 합니다. 무한대 구간에서는 진동 함수에 특수한 방법을 사용해야 하지만, fun(x)가 충분히 빠르게 감쇠하면 quadgk를 사용할 수 있습니다.

  • quadgk 함수는 특이점이 너무 강력하지 않을 경우 유한 끝점에 특이점이 있는 함수를 적분합니다. 예를 들어, 끝점 c에서 log|x-c| 또는 |x-c|p(p >= -1/2)와 같이 동작하는 함수를 적분합니다. 함수가 (a,b) 내의 점에서 특이점을 가질 경우, 특이점을 끝점으로 갖는 여러 하위 구간에서의 적분의 합으로 적분을 작성한 후 quadgk를 사용하여 적분을 계산하고 각 적분 결과를 더합니다.

예제

함수 핸들 @myfunquadl에 전달합니다.

Q = quadl(@myfun,0,2);

여기서 함수 myfun.m은 다음과 같습니다.

function y = myfun(x) 
y = 1./(x.^3-2*x-5);

익명 함수 핸들 Fquadl에 전달합니다.

F = @(x) 1./(x.^3-2*x-5);
Q = quadl(F,0,2); 

진단

quadl에서 다음 경고 중 하나가 발생할 수 있습니다.

'Minimum step size reached'는 재귀적 구간 세분을 통해 길이가 원래 구간 길이와 거의 비슷한(반올림 오차 내의 차) 하위 구간이 생성되었음을 나타냅니다. 적분할 수 없는 특이점이 있을 가능성이 있습니다.

'Maximum function count exceeded'는 피적분 함수가 10,000 번 이상 실행되었음을 나타냅니다. 적분할 수 없는 특이점이 있을 가능성이 꽤 있습니다.

'Infinite or Not-a-Number function value encountered'는 구간 내에서 피적분 함수를 실행하는 동안 부동소수점 오버플로 또는 0으로 나누기(Division By Zero) 오류가 발생했음을 나타냅니다.

알고리즘

quadl은 적응적 가우스/로바토 구적법(Adaptive Gauss/Lobatto Quadrature Rule)을 사용하여 고차수법(High Order Method)을 구현합니다.

참고 문헌

[1] Gander, W. and W. Gautschi, “Adaptive Quadrature – Revisited,” BIT, Vol. 40, 2000, pp. 84-101. This document is also available at https://people.inf.ethz.ch/gander/.

버전 내역

R2006a 이전에 개발됨