속도계만 보고, 얼마나 멀리 왔는지 알 수 있을까?
창밖이 보이지 않는다. 속도계와 스톱워치만 있다. 속도는 계속 변한다 — 어느 순간엔 30, 어느 순간엔 60, 또 어느 순간엔 0. 총 이동 거리는? 이렇게 풀어보자. 속도가 “거의 일정한” 짧은 구간들로 잘게 쪼개고, 각 구간의 속도에 시간을 곱해 모두 더한다. 그게 리만 합이고, 구간이 한없이 줄어들 때 그 합이 다가가는 극한이
아래 위젯에서 N (직사각형 개수) 을 끌어보면 주황 합이 초록 정확값으로 다가간다. 속도 함수를 고르면 포물선 운동의 이야기가 반대 방향에서 복원된다 — 시간에 대한 g·t의 적분이 떨어진 거리.
- 정의
: 에서 의 누적 총량. 리만 합의 극한 — . 기하적으로는 곡선과 x축 사이의 부호 있는 넓이. 미분의 짝 연산 — 미분이 되돌리는 대상.
- 적용
비율에서 총량을 얻고 싶을 때마다. 속도에서 거리, 힘에서 일, 전류에서 전하, 확률 밀도에서 기댓값, 높이 함수에서 넓이. 수치적으로는
scipy.integrate부터 PDE 코드까지 모든 솔버가 더 똑똑한 규칙을 가진 리만 합.- 한계
불연속 구간과 무한 구간은 이상적분이 필요하다. 닫힌 형식 원시함수가 없는 함수 (, ) 는 수치적으로 평가해야 한다. 고차원 확장 (선·면·부피 적분, 측도론) 도 같은 직관을 쓰지만 장부를 훨씬 꼼꼼히 맞춰야 한다. 그리고 FTC는 피적분 함수가 구간에서 연속이라야 성립한다. 더 정교한 버전이 이 조건을 누그러뜨리긴 하지만, 한 줄짜리 정리만으로 모든 함수를 덮을 수는 없다.
넓이부터 — 일정한 속도의 누적
가장 단순한 경우는 비율이 일정할 때다. 로 운전하면 . 속도-시간 그래프로 보면 폭 × 높이의 직사각형 넓이다. 곡선이 일정하지 않을 때도 총 거리는 여전히 속도 곡선 아래 넓이. 이 단순한 경우를 비일정한 비율로 다시 풀어쓰는 것이 모듈 전체의 일이다.
비율이 선형으로 변할 때 — 가만히 있다 떨어뜨린 물체에 중력이 만드는 가 그 예다 — 에서 직선 아래 넓이는 삼각형이고, 그 넓이가 . 그게 떨어진 거리. 새로운 물리학도, 새로운 미적분도 필요 없다 — 넓이만으로 풀린다.
리만 합 — 유한 장부질
삼각형이 아닌 곡선은 기하만으로는 넓이가 보이지 않는다. 그러니 근사하자. 구간 를 폭 의 개 띠로 자른다. 각 띠 안에서 표본점 하나 — 왼쪽 끝, 오른쪽 끝, 중점 중 골라 — 를 잡고 그 한 값을 띠의 “일정한” 높이로 쓴다. 띠의 넓이를 모두 더한다. 그 결과가
위 위젯이 이걸 직접 보여준다. 를 에서 골라 N을 올려보자. 에선 직사각형이 우스울 정도로 틀리고, 에선 알아볼 만해지고, 에선 정확값 과의 격차가 보이지 않는다. 규칙을 (왼쪽/오른쪽/중점) 어떻게 잡든 같은 극한에 다가가지만 다가가는 속도는 다르다 — 왼/오른은 , 중점은 . 그래서 수치 적분기는 모두 중점 이상을 고른다.
# Riemann sum — turn 'area under the curve' into a finite computation.
# Chop [a, b] into N strips, evaluate f once per strip, multiply by Δx,
# add. Three rule choices give different errors at the same N.
def riemann(f, a, b, n, rule="midpoint"):
dx = (b - a) / n
s = 0.0
for i in range(n):
if rule == "left": x = a + i * dx
elif rule == "right": x = a + (i + 1) * dx
else: x = a + (i + 0.5) * dx
s += f(x) * dx
return s
# ∫_0^1 x² dx — the exact answer is 1/3 ≈ 0.333.
[(rule, riemann(lambda x: x*x, 0, 1, n=20, rule=rule))
for rule in ("left", "right", "midpoint")]
# → [('left', 0.30875), a bit under 1/3
# ('right', 0.35875), a bit over 1/3
# ('midpoint', 0.333125)] essentially exact at N=20
# Midpoint converges as ~1/N², the others as ~1/N. That's why every
# practical numerical integrator picks midpoint or higher (Simpson, Gauss).정적분 — 리만 합의 극한
하나의 수 — 누적된 총량이다. 이 표기는 리만 이전부터 쓰였다. 기호는 “sum”의 S를 길게 늘인 모양이고, 는 극한이 줄여낸 의 후손이다. ""를 “에서 까지 곱하기 아주 작은 들의 합”으로 읽는 건 정확한 직관이다 — 리만 이전 뉴턴과 라이프니츠가 쓰던 직관이기도 하다.
위젯의 “정확한 적분” 칸이 바로 이 값이다 — 닫힌 형식으로 계산했다 (쉬운 함수를 골랐기 때문에). 현실의 대부분의 함수에서는 극한을 수치적으로 잡을 수밖에 없고, 컴퓨터가 적분을 실제로 계산하는 방식이 어떤 형태로든 결국 리만 합이다.
원시함수 — 미분의 역연산
적분이 미분과 만난다. 미분 모듈에서 를 미분하면 . 거꾸로 읽으면 — 는 원시함수를 갖는다 — 그것이 . 의
원시함수는 유일하지 않다 — 도 도 둘 다 미분하면 가 된다. 어떤 상수 를 더해도 미분값이 변하지 않기 때문이다. 그래서 교과서가 라고 적는 것이다. 한 의 원시함수 전체는 한 매개변수 가족 — 서로 평행 이동된 함수들의 모임이다.
다항식이라면 규칙이 기계적이다. 의 미분이 이니, 의 원시함수는 . 공식의 장부를 거꾸로 뒤집은 것이다. 의 원시함수는 , 의 원시함수는 (출발한 자리 그대로). 이 짧은 목록과 연쇄법칙만으로 실무에서 만나는 적분의 대부분이 처리된다.
# Antiderivative — the function whose derivative is f.
# For polynomials, the rule is mechanical: x^n → x^(n+1)/(n+1).
# But the antiderivative isn't unique — F(x) and F(x) + 5 both differentiate
# to the same f. The +C is a fixed point of the operation.
def antideriv_poly(coeffs):
"""Coefficients of polynomial Σ c_i x^i → coeffs of antiderivative
Σ c_i x^(i+1)/(i+1). The constant C is dropped (you supply it)."""
return [0.0] + [c / (i + 1) for i, c in enumerate(coeffs)]
# f(x) = 3x² + 2x + 1 → F(x) = x³ + x² + x (+ C)
antideriv_poly([1, 2, 3])
# → [0.0, 1.0, 1.0, 1.0] coefficients of x⁰, x¹, x², x³기본정리 — 넓이 = 미분의 역
두 이야기 — 곡선 아래 넓이와 미분의 역연산 — 가 알고 보면 같은 이야기다.
— 어떤 원시함수 를 잡아도 성립한다. 리만 합의 무한 극한이 함수 평가 두 번과 뺄셈 한 번으로 줄어든다. 손으로 풀든 계산기로 풀든, 대부분의 정적분은 이렇게 계산한다. 리만 극한이 적분의 정체라면, FTC는 적분의 계산법이다.
포물선 운동을 보자. 속도가 면 원시함수는 . FTC에 따라 에서 까지 떨어진 거리는 — § 1에서 기하로 읽어냈던 그 삼각형 넓이가, 이번에는 원시함수에서 유도된다. 두 길, 한 수.
기본정리의 나머지 반쪽 — — 이 양방향의 연결을 단단히 죈다. 미분이 적분을 되돌리고, 적분이 미분을 누적한다. 둘은 우연히 같은 장(章)에 묶인 별개의 연산이 아니라, 덧셈과 뺄셈이 서로의 역인 것과 똑같은 의미에서 역이다.
# Fundamental Theorem of Calculus, Part 2:
# ∫_a^b f(x) dx = F(b) − F(a)
# for any antiderivative F of f. The infinite limit of Riemann sums
# becomes two function evaluations and a subtraction.
def evaluate_poly(coeffs, x):
return sum(c * x**i for i, c in enumerate(coeffs))
def integral_via_ftc(coeffs, a, b):
F = antideriv_poly(coeffs)
return evaluate_poly(F, b) - evaluate_poly(F, a)
# ∫_0^2 (3t² + 2t + 1) dt — by FTC.
integral_via_ftc([1, 2, 3], 0, 2)
# → 14.0 F(2) − F(0) = (8 + 4 + 2) − 0 = 14
#
# Sanity check via Riemann at N=10000 with the lambda form:
def f(t): return 3*t*t + 2*t + 1
riemann(f, 0, 2, n=10000, rule="midpoint")
# → 13.99999... matches FTC to four decimals
#
# The Riemann sum 'is what the integral is.' FTC says you almost never
# have to take the limit — pick an antiderivative and subtract.이게 어디에 나타나나 — 같은 누적, 두 필러
적분은 시간에 걸친 변화를 더한다. 물리에서는 그 변화가 거리가 되고, 금융에서는 현재가치가 된다. 리만 합 그림은 양쪽에서 똑같다 — 더해지는 변화율이 무엇이냐만 다를 뿐.
물리 : 속도가 거리로 쌓이고, 힘×속도가 에너지로 쌓인다. 금융 : 연속 지급 비율이 — 할인된 채 — 현재가치로 쌓인다.
포물선 운동 — 떨어진 거리는 . 속도 가 변화율이고, 그 아래 넓이가 거리다. 위치를 두 번 미분하면 가속도가 나오고, 가속도를 두 번 적분하면 같은 사다리를 거꾸로 올라 위치가 다시 나온다.
종단속도 — 속도가 더 이상 선형이 아니라 점근선으로 휜다. 그래도 떨어진 거리는 여전히 — 곡선 아래 넓이, 곡선 모양만 바뀐 것. 같은 누적, 더 어려운 모양.
감쇠 진동자 — 사인 구동에서 평균 일률은 , 한 주기에 걸친 적분이다. 피크 — 공명 — 은 정확히 이 적분이 가장 클 때다. 공명에서 벗어나면 더하는 기여와 빼는 기여가 적분 안에서 상쇄된다.
현재가치 — 연속 현금흐름 비율 의 현재가치는 . 할인계수 가 각 미래 시점을 줄인 다음에야 적분이 합산한다. 시간에 걸친 돈은 구조적으로 시간에 걸친 속도와 같다 — 변화율, 누적된 것.
이름은 달라도 같은 일이다 — 물리에서는 거리, 금융에서는 현재가치. 둘 다 변화율 곡선 아래 넓이이고, 어떤 변화율인지는 응용이 정한다.
미분은 양이 얼마나 빨리 변하는지 묻고, 적분은 그 변화가 얼마나 쌓였는지 묻는다. 리만 합이 적분의 정체이고, 원시함수가 그 계산법이다. 기본정리는 두 그림이 한 그림임을 — 적분이 곧 미분의 역임을 — 말한다.
차가 로 2시간 일정하게 운전. 총 거리를 두 길로 계산하라 — (a) 속도-시간 그래프의 직사각형 넓이로, (b) 일정 함수 의 원시함수를 구하고 FTC를 적용해.
를 에서 개 직사각형의 중점 리만 합으로 계산. (중점: ; .) 정확값 과 비교.
FTC로 를 계산. 위젯에서 중점으로도 시도해 결과가 일치하는지 확인.
공이 정지에서 떨어진다. 중력이 일정 가속도 를 주니, 시간 후 속도는 . 까지 얼마나 떨어졌나?