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