본문으로 바로가기

사분법 완전 정복: 정적분 근사를 위한 수치 기법

사분법이 무엇인지, 수치적분이 정적분을 어떻게 근사하는지, 그리고 사다리꼴법, 심프슨 법칙, 가우스 사분법이 어떻게 작동하는지 알아보세요.
업데이트됨 2026년 10월 16일  · 10분 읽기

AI와 탐험해 보세요

ChatGPTClaudePerplexity

연필과 종이로 하는 미적분이 좀처럼 통하지 않는 정적분 문제가 있습니다. 잘못하고 있어서가 아닙니다. e^(−x²)나 sin(x)/x 같은 함수는 애초에 닫힌형 원시함수가 존재하지 않습니다. 이런 경우엔 다른 접근이 필요합니다. 구간 내에서 신중히 고른 몇몇 점에서 함숫값을 평가하고, 그 값을 적절히 결합해 곡선 아래 면적을 추정하는 것이죠. 이것이 바로 사분법(quadrature)입니다.

이 글에서는 사분법이 무엇인지, 일반적인 틀은 어떻게 작동하는지, 그리고 직관적인 중점법부터 놀라울 만큼 정교한 가우스 접근까지 주요 방법들을 살펴봅니다. 또한 복합(composite) 기법, 오차의 원인, 적응형 전략, 그리고 눈앞의 문제에 맞는 기법을 고르는 방법도 함께 다룹니다.

사분법이란?

"Quadrature(사분법)"라는 단어는 오래되었습니다. 주어진 도형과 같은 넓이를 갖는 정사각형을 작도하는 고전 기하 문제에서 유래했는데, 이는 곧 "면적을 구하라"는 뜻입니다. 오늘날에는 정적분을 수치적으로 근사하는 것을 의미합니다.

핵심 아이디어는 치환입니다. 정확한 원시함수를 찾는 대신, 노드라 부르는 점 집합에서 함수 f(x)를 샘플링하고, 각 값에 대응하는 가중치를 곱해 합을 구합니다:

사분법 근사 공식

용어상 사분법과 수치적분은 사실상 같은 뜻입니다. 사분법은 보다 수학적인 맥락에서, 수치적분은 과학 계산의 일상 용어로 더 자주 쓰입니다.

수치 사분법은 어떻게 동작하나

모든 사분법 규칙은 구간 [a, b]에서 작동합니다. 이 구간 안에서 노드 xᵢ를 고르고, 각 노드에 가중치 wᵢ를 부여합니다. 근사는 위의 가중합입니다. 방법마다 다른 점은 노드의 위치와 가중치의 할당 방식뿐입니다. 그게 전부입니다. 사다리꼴법, 심프슨 법칙, 가우스 사분법은 모두 이 템플릿의 변형입니다.

근사 오차는 이 가중합과 실제 적분값의 차이입니다. 어떤 방법이든 오차는 생기며, 노드를 더 추가하거나(혹은 구간을 더 잘게 쪼개거나) 했을 때 오차가 얼마나 빨리 줄어드느냐가 좋은 방법과 탁월한 방법을 가릅니다. 이 관점을 기억하세요. 사분법을 고른다는 것은 곧 함수 평가 예산을 어디에 쓸지 정하는 일입니다.

주요 사분법 기법

아래 방법들은 직관적인 것부터 정교한 것 순서로 정리했습니다.

중점법, 사다리꼴법, 심프슨 법칙의 오차와 근사 영역 비교 다이어그램.중점법, 사다리꼴법, 심프슨 법칙의 시각적 비교. 이미지: 작성자.

중점법

[a, b]의 중점을 잡아 그 지점에서 f를 평가하고, 구간 폭 (b − a)을 곱합니다. 중심에서의 함수값이 전체 구간의 평균을 대표한다고 가정하는 셈입니다.

거의 너무 단순하게 들리는데, 단일 구간에서는 실제로 그렇습니다. 하지만 첫 번째 놀라움이 있습니다. 중점법은 상수함수와 일차함수에 대해 정확하며, 구간별 오차는 h = b − a일 때 O(h³)로 스케일합니다. 이는 매끈한 함수에서 흔히들 과소평가하는 사다리꼴법보다 실제로 더 낫습니다.

사다리꼴법

중심만 쓰지 말고 양 끝점을 모두 사용합니다. 두 점을 직선으로 이은 다음, 생기는 사다리꼴의 면적을 계산합니다: (b − a) · [f(a) + f(b)] / 2. 일차함수에 대해 정확하며, 구간별 오차는 중점법과 같은 차수인 O(h³)지만 상수항이 더 큽니다.

사다리꼴법은 아마 가장 널리 가르쳐지는 사분법이라 과도한 명성을 얻었습니다. 잘 거동하는 함수에 대해서는 무난합니다. 하지만 같은 평가 횟수로는 대체로 복합 심프슨 법칙이 더 좋은 결과를 냅니다.

심프슨 법칙

세 점(양 끝점과 중점)을 지나는 이차 다항식을 맞추고, 그 다항식을 정확히 적분합니다:

심프슨 법칙의 전체 공식.

중심에서 한 번 더 평가하는 대가는 함수 호출 1회지만, 보상은 큽니다. 심프슨 법칙은 삼차 다항식까지 정확하며, 구간별 오차는 O(h⁵)로 사다리꼴법보다 두 차수나 더 좋습니다. 매끈한 함수라면 가장 먼저 고려할 만한 방법입니다.

가우스 사분법

이제 진짜 흥미로운 지점입니다. 중점법, 사다리꼴법, 심프슨 법칙은 모두 등간격 노드를 사용합니다. 가우스 사분법은 다른 질문을 던집니다. 정확도를 극대화하도록 노드 위치와 가중치를 동시에 선택한다면 어떻게 될까?

노드가 n개라면, 가우스 사분법(특히 가우스-르장드르 변형)은 차수가 2n − 1 이하인 모든 다항식을 정확히 적분할 수 있습니다. 두 노드로 삼차식까지, 다섯 노드로 9차식까지 정확합니다. 노드는 르장드르 다항식의 근이며, 등간격이 아니라 구간의 끝점으로 갈수록 더 촘촘히 모입니다. 추가 정확도는 노드를 움직일 수 있게 한 데서 오며, 우연한 배치 때문이 아닙니다. 끝점 근처에서의 클러스터링은 수학적 결과의 부산물이며, 아래에서 그 이유를 보게 됩니다.

다음은 네 가지 방법의 비교입니다:

Method

Approach

Error per interval

Computational cost

Best for

Midpoint rule

Evaluate at center

O(h³)

1 eval/interval

Simple, smooth functions

Trapezoidal rule

Linear fit

O(h³)

2 evals/interval

Periodic functions

Simpson's rule

Quadratic fit

O(h⁵)

3 evals/interval

Smooth functions

Gaussian quadrature

Optimal nodes + weights

O(h^(2n+1))

n evals/interval

High accuracy, smooth functions

복합 사분법

기본 규칙을 전체 구간 [a, b]에 한 번만 적용하는 것으로는 대개 부족합니다. 표준 해법은 구간을 폭 h = (b − a)/n 인 n개의 동일한 부분구간으로 나누고, 각 부분구간에 기본 규칙을 적용하는 것입니다.

복합 중점법과 사다리꼴법

복합 사다리꼴법은 등간격의 n+1개 점에서 f를 평가해 n개의 사다리꼴을 합합니다. 전체 오차는 O(h²)로 떨어집니다. h를 절반으로 줄이면 오차는 네 배 감소합니다. 복합 중점법도 같은 논리로 작동하며 전역 오차 차수도 같습니다.

복합 심프슨 법칙

복합 버전은 부분구간의 개수가 짝수여야 합니다. n+1개 점에서 f를 평가하면 전역 오차는 O(h⁴)입니다. h를 절반으로 줄이면 오차는 열여섯 배 감소합니다. 그래서 매끈한 함수에서 중간 정도 정확도가 필요할 때 복합 심프슨 법칙이 자주 기본값으로 쓰입니다.

아래 파이썬 코드는 ∫[0 to π] sin(x) dx(정확값: 2.0)에 대해 부분구간을 늘릴수록 근사가 어떻게 개선되는지 보여줍니다:

import numpy as np

def composite_simpson(func, lower, upper, num_intervals):
    """Approximate integral using composite Simpson's rule."""
    if num_intervals % 2 != 0:
        raise ValueError("num_intervals must be even")
    nodes = np.linspace(lower, upper, num_intervals + 1)
    values = func(nodes)
    h = (upper - lower) / num_intervals
    weights = np.ones(num_intervals + 1)
    weights[1:-1:2] = 4   # odd-indexed interior points
    weights[2:-2:2] = 2   # even-indexed interior points
    return (h / 3) * np.dot(weights, values)

exact = 2.0
for n in [4, 8, 16, 32]:
    approx = composite_simpson(np.sin, 0, np.pi, n)
    print(f"n={n:3d}: approx={approx:.10f}, error={abs(approx - exact):.2e}")

불과 32개 구간으로도 오차가 10⁻⁶ 이하로 떨어집니다. 이것이 O(h⁴) 수렴입니다.

가우스 사분법

가우스 사분법 뒤에 있는 아이디어는 표 하나로 끝내기엔 아깝습니다.

등간격 노드가 항상 최적은 아닌 이유

노드가 등간격으로 놓이면, 적분 함수의 난이도 분포와 맞지 않는 방식으로 평가 예산을 쓰게 됩니다. 어떤 구간은 더 높은 해상도가 필요하지만, 어떤 구간은 평평해 평가를 낭비합니다. 가우스 사분법은 정확히 적분할 수 있는 다항식 차수에 대해 노드를 증명 가능한 최적 위치로 선택함으로써 이를 피해 갑니다.

노드가 n개일 때, 가우스-르장드르 규칙은 n차 르장드르 다항식 Pₙ(x)의 n개의 근을 노드로 선택하고, 차수가 2n − 1 이하인 모든 다항식을 오차 없이 적분하도록 가중치를 계산합니다. 실제로는 numpy.polynomial.legendre.leggauss(n)가 두 값을 모두 반환합니다. 노드는 표준 기준 구간인 [−1, 1]의 끝점 쪽으로 모이는데, 다항식 보간 오차가 가장 커지는 지점이며 추가 샘플링이 가장 이득을 주는 곳이기 때문입니다.

언제 사용할까

가우스 사분법은 매끈하고 해석적인 함수에서, 적은 평가 횟수로 높은 정확도가 필요할 때 빛을 발합니다. 잘 거동하는 적분 함수라면 다섯 개의 가우스-르장드르 점이 수십 개 구간을 쓰는 복합 심프슨 법칙을 능가할 수 있습니다. 반면, 꺾임이나 불연속이 있거나, 고정된 등간격 데이터만 있는 경우에는 적합하지 않습니다. 이때는 세심하게 고른 노드 배치가 오히려 발목을 잡습니다.

사분법의 오차와 정확도

어떤 수치 방법도 오차에서 자유로울 수 없습니다. 모든 사분법 결과에는 서로 다른 두 종류의 오차가 영향을 미치며, 이를 이해해야 답을 신뢰할 수 있습니다.

오차의 원인은 다음과 같습니다:

  • 이산화 오차(절단 오차라고도 함)는 완전한 산술에서의 정확한 적분값과 사분법 규칙이 반환하는 값 사이의 차이입니다. O(hᵏ) 공식이 포착하는 것이 바로 이것입니다. 점을 더 추가하거나 구간 폭을 줄이면 감소합니다.
  • 부동소수점 오차는 다른 문제입니다. 유한 정밀도 산술에서 많은 작은 값을 합하면 반올림이 발생하며, 이는 h와 함께 줄어들지 않고 오히려 커질 수 있습니다. 수천 개 부분구간을 쓰는 복합 규칙에서는 부동소수점 잡음이 지배해, 구간을 더 늘려도 개선이 멈추는 바닥에 도달할 수 있습니다. 대부분의 과학 계산 작업에서는 그 바닥에 닿기 전에 원하는 허용오차에 도달하지만, 그런 한계가 존재함은 기억해야 합니다.

함수의 매끄러움, 구간 폭, 방법 선택은 모두 이산화 오차에 영향을 줍니다. 날카로운 특징이 있는 거친 함수는 더 많은 구간이나 적응형 접근이 필요합니다.

적응형 사분법

적분 함수가 대부분의 구간에서는 매끈하지만 일부에서만 복잡하다면, 균일 격자는 평가를 낭비합니다.

작동 방식

한 구간에 사분법 규칙을 적용한 뒤, 더 높은 차수의 규칙(또는 같은 규칙을 두 반구간에 적용)을 적용해 비교합니다. 그 차이를 지역 오차의 추정치로 사용합니다. 허용오차보다 작으면 해당 구간을 수용합니다. 아니라면 구간을 둘로 나누고 각 절반에 재귀적으로 적용합니다. 모든 부분구간이 허용오차를 만족할 때까지 반복합니다.

적분 함수에 좁은 스파이크, 꺾임, 주변은 매끈하지만 국지적으로 빠른 진동 같은 고립된 특징이 있을 때, 균일 세분화에 비해 효율 이득이 큽니다. 적응형 방법은 함수가 실제로 요구하는 바로 그 위치에 평가를 집중합니다.

scipy.integrate.quad()

파이썬에서는 scipy.integrate.quad()가 적응형 가우스 사분법(정확히는 QUADPACK의 DQAGSE 알고리즘)을 구현합니다. 함수와 구간을 넘기면 추정값과 오차 한계를 돌려줍니다. 대부분의 1차원 적분에서는 별도 튜닝 없이 이 도구가 정답입니다.

from scipy import integrate
import numpy as np

# Integrate a function with a peak near x=0.5
def peaked_func(x):
    return np.exp(-100 * (x - 0.5)**2)

result, error_bound = integrate.quad(peaked_func, 0, 1)
print(f"Estimate: {result:.10f}")
print(f"Error bound: {error_bound:.2e}")

quad()는 이 좁은 피크를 깔끔하게 처리합니다. 균일한 심프슨 법칙으로는 이를 맞추려면 수백 개의 부분구간이 필요합니다.

사분법 선택 가이드

파이썬에서 1차원 적분을 할 때는 특별한 이유가 없다면 scipy.integrate.quad()부터 시작하세요. 적응형이며 정확하고 검증되어 있습니다. 아래 내용은 직접 구현해야 하거나, 적응형 라이브러리가 없는 언어를 쓰거나, 특정 사례에 최적화할 때 유용합니다.

  • 해석적 식을 가진 매끈한 함수: 가우스 사분법이 평가당 정확도가 가장 높습니다. 중간 정도 정확도와 단순함이 필요하면 복합 심프슨 법칙이 좋은 기본 선택입니다.
  • 꺾임이나 불연속이 있는 함수: 이 경우에는 등간격 방법(사다리꼴, 심프슨)이 가우스 사분법보다 대체로 유리합니다. 고정된 노드 배치가 불규칙성에 덜 흔들리기 때문입니다. 불연속이 알려진 지점에서 적분 구간을 나누고 각 조각을 따로 처리하세요.
  • 고정된 등간격 데이터만 있는 경우: 가우스 사분법은 선택지에서 제외됩니다. 임의의 노드에서 함수를 평가할 수 없으므로, 복합 사다리꼴법이나 복합 심프슨 법칙을 사용하세요.
  • 고차원 적분: 사분법은 차원의 저주에 빨리 부딪힙니다. 차원 d에 대해 차원당 n개의 점을 쓰면 총 평가 수는 nᵈ입니다. 10차원에 차원당 10개 점이면 10¹⁰번 평가가 필요해 현실적이지 않습니다. 대략 5차원을 넘기면 몬테카로가 훨씬 잘 확장되므로 전환 시점이 됩니다.

사분법과 관련 수치 기법 비교

사분법은 고립되어 존재하지 않습니다. 고려 대상인 다른 도구들과의 위치 관계를 이해하면 도움이 됩니다.

사분법 vs. 해석적 적분

해석적 적분은 정확한 원시함수를 찾고, 사분법은 수치를 근사합니다. 정확한 원시함수가 존재하고 찾을 수 있다면 그것을 사용하세요. 정확한 적분이 불가능하거나 비현실적일 때 사분법의 가치가 있습니다.

사분법 vs. 몬테카로 적분

둘 다 정적분을 근사하지만 방식이 다릅니다. 사분법은 결정론적입니다. 미리 정한 고정 노드에서 f를 평가하며, 수렴은 함수의 매끄러움과 노드 수에 좌우됩니다. 몬테카로는 무작위 표본을 추출해 평균을 내며, 오차는 차원과 무관하게 O(1/√N)으로 스케일합니다. 저차원에서는 수렴이 더 느리지만, 차원 독립적이어서 대략 5차원 이상에서는 실용적인 선택이 됩니다.

사분법 vs. 보간

일부 사분법 규칙(심프슨 법칙 포함)은 평가점을 지나는 다항식을 맞춘 뒤 그것을 정확히 적분하는 방식으로 작동합니다. 하지만 목표는 보간과 다릅니다. 보간은 함수를 재구성하려는 것이고, 사분법은 숫자 하나를 원합니다. 다항식은 도구일 뿐 결과물이 아닙니다.

결론

사분법의 만족스러운 점은 하나의 조직 원리로부터 놀라울 만큼 많은 성과를 얻을 수 있다는 것입니다. 여기 소개한 모든 방법, 중점법, 사다리꼴법, 심프슨, 가우스는 사실 같은 질문에 대한 다른 답입니다. 제한된 함수 평가 예산을 어디에 배치하고, 어떻게 가중할 것인가?

평가점을 지나는 더 나은 다항식을 맞추면 오차가 빠르게 줄어듭니다. 최적으로 선택한 노드로 전환하면 같은 예산에서 더 많은 정확도를 짜낼 수 있습니다. 여기에 적응형 방법을 결합하면, 함수가 실제로 필요로 하는 곳에 평가를 정확히 배분할 수 있습니다.

파이썬에서는 1차원 문제에 scipy.integrate.quad()가 올바른 기본값입니다. 이 글의 나머지는 내부 동작을 이해해야 하거나 직접 구현해야 할 때를 위한 것입니다. SciPy로 수치 역량을 더 쌓고 싶다면 Introduction to Optimization in Python 코스를 수강해 보세요.

FAQs

수학에서 사분법이란 무엇인가요?

사분법은 정적분을 수치적으로 근사하는 방법입니다. 해석적으로 원시함수를 찾는 대신, 선택된 점(노드)에서 함수를 평가하고 그 값들을 가중치와 함께 결합해 적분값을 추정합니다. 용어는 곡선 아래 면적을 구하는 고전 문제에서 유래했습니다.

사다리꼴법과 심프슨 법칙의 차이는 무엇인가요?

사다리꼴법은 양 끝점을 직선으로 근사하므로 일차함수에 대해 정확합니다. 반면 심프슨 법칙은 세 점(양 끝점과 중점)을 지나는 이차함수를 맞추어, 삼차 다항식까지 정확합니다. 매끈한 함수에서는 심프슨 법칙이 훨씬 빠르게 수렴하며, 구간별 오차가 O(h⁵)인 반면 사다리꼴법은 O(h³)입니다.

가우스 사분법은 복합 심프슨 법칙 대신 언제 사용하나요?

가우스 사분법은 임의의 점에서 f를 평가할 수 있고, 적은 함수 평가로 높은 정확도가 필요할 때(특히 매끈하고 해석적인 함수에 대해) 사용하세요. 데이터가 고정된 등간격 점에만 있거나, 함수에 꺾임/불연속이 있어 가우스 노드 배치를 흐트러뜨리는 경우에는 복합 심프슨 법칙이 대체로 더 좋습니다. 실무에서는 scipy.integrate.quad() 같은 적응형 방법이 이 선택을 대신해 줍니다.

“적응형 사분법”이란 무엇인가요?

적응형 사분법은 평가점을 균일하게 퍼뜨리는 대신, 근사 오차가 큰 곳에 집중합니다. 각 부분구간에서 지역 오차를 추정하고, 허용오차를 넘는 구간을 더 쪼개는 과정을 반복해 총오차가 허용 기준을 만족할 때까지 진행합니다. 거의 모든 구간은 매끈하지만 일부에만 까다로운 영역이 있는 적분 함수에서 특히 효율적입니다.

파이썬에서 수치적분은 어떻게 계산하나요?

표준 도구는 scipy.integrate.quad()입니다. 함수와 적분 구간을 넘기면 근사값과 오차 추정치를 반환합니다. 무한 구간은 np.inf 또는 -np.inf를 넘기면 됩니다. 다중 적분은 dblquad()나 tplquad()를 사용하세요.

고차원 적분에서 사분법이 실패하는 이유는 무엇인가요?

사분법 규칙은 격자 위에 노드를 배치하므로, 전체 함수 평가 횟수는 차원 d에 대해 nᵈ(차원당 점 수 n)로 스케일합니다. 10차원에 차원당 10개 점이면 10¹⁰번 평가입니다. 이런 지수적 폭증을 차원의 저주라고 부릅니다. 몬테카로 적분은 오차율이 차원과 무관하게 O(1/√N)이므로, 이 한계를 피해 갑니다(N은 표본 수).

사분법과 몬테카로 적분의 차이는 무엇인가요?

사분법은 결정론적입니다. 고정된 사전 노드에서 함수를 평가하며, 수렴률은 방법과 함수의 매끄러움에 따라 O(h²)에서 O(h⁵)까지입니다(복합 규칙 기준). 몬테카로는 무작위화되어 균일 표본을 뽑아 평균을 내며, 오차는 O(1/√N)입니다. 1~2차원에서는 사분법이 유리하고, 대략 5~10차원부터는 몬테카로가 실용적 선택이 됩니다.

가우스 노드와 가중치란 무엇인가요?

가우스 노드는 특정 직교 다항식의 영점입니다. 가우스-르장드르 사분법에서는 n차 르장드르 다항식의 근이 노드가 됩니다. 가중치는 차수가 2n − 1 이하인 다항식을 정확히 적분하도록 선택됩니다. 등간격 격자와 달리, 가우스 노드는 구간 중앙 쪽으로 모이고 끝점에서는 떨어져 있습니다. 직접 계산할 필요는 없고, numpy.polynomial.legendre.leggauss()로 바로 얻을 수 있습니다.

주제
데이터 사이언스

DataCamp와 함께 배우세요

강의

Python으로 배우는 선형 모델 입문

4시간
27K
Python으로 선형 모델의 개념과 활용을 배우고, 데이터 패턴을 설명·예측·통찰 도출을 위한 모델을 구축하세요.
자세히 보기Right Arrow
강의 시작
더 보기Right Arrow