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를 반환합니다. 함수 fun은 x의 각 요소에서 실행됩니다. 제한 a와 b는 유한해야 합니다.
함수를 파라미터화하기에는 필요한 경우 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를 벡터화합니다.구간이 무한대 인 경우
fun(x)에 대한 적분이 성립하려면x가 무한대에 가까워질 때fun(x)가 감쇠해야 합니다.quadgk를 사용하려면 이 함수가 빠르게 감쇠해야 합니다. 무한대 구간에서는 진동 함수에 특수한 방법을 사용해야 하지만,fun(x)가 충분히 빠르게 감쇠하면quadgk를 사용할 수 있습니다.quadgk함수는 특이점이 너무 강력하지 않을 경우 유한 끝점에 특이점이 있는 함수를 적분합니다. 예를 들어, 끝점c에서log|x-c|또는|x-c|p(p >= -1/2)와 같이 동작하는 함수를 적분합니다. 함수가(a,b)내의 점에서 특이점을 가질 경우, 특이점을 끝점으로 갖는 여러 하위 구간에서의 적분의 합으로 적분을 작성한 후quadgk를 사용하여 적분을 계산하고 각 적분 결과를 더합니다.
예제
함수 핸들 @myfun을 quadl에 전달합니다.
Q = quadl(@myfun,0,2);
여기서 함수 myfun.m은 다음과 같습니다.
function y = myfun(x) y = 1./(x.^3-2*x-5);
익명 함수 핸들 F를 quadl에 전달합니다.
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 이전에 개발됨