A series converges if its sequence of partial sums converges. Absolute convergence implies convergence, but not vice versa. The comparison, ratio, and root tests give practical criteria. Power series converge inside a radius and diverge outside it.
Convergence of series
The series Σ a_n converges if the partial sums S_n = a_1 + a_2 + ... + a_n converge. The necessary condition: if Σ a_n converges, then a_n → 0. The converse is false: the harmonic series Σ 1/n diverges even though 1/n → 0.
Scheme
; Geometric series: sum of 1/2^k = 1
(define (geometric-partial n)
(let loop ((k 1) (s 0.0))
(if (> k n) s
(loop (+ k 1) (+ s (/ 1.0 (expt 2 k)))))))
(display "Geometric series sum 1/2^k:") (newline)
(for-each (lambda (n)
(display " S_") (display n) (display " = ")
(display (geometric-partial n)) (newline))
(list 15102030))
; Harmonic series diverges: sum 1/k -> infinity
(define (harmonic-partial n)
(let loop ((k 1) (s 0.0))
(if (> k n) s
(loop (+ k 1) (+ s (/ 1.0 k))))))
(display "Harmonic series (diverges):") (newline)
(for-each (lambda (n)
(display " S_") (display n) (display " = ")
(display (harmonic-partial n)) (newline))
(list 10100100010000))
Python
# Geometric vs harmonic series
geo = sum(1/2**k for k inrange(1, 31))
harm = sum(1/k for k inrange(1, 10001))
print(f"Geometric (30 terms): {geo:.10f} (converges to 1)")
print(f"Harmonic (10000 terms): {harm:.4f} (diverges)")
Comparison, ratio, and root tests
The comparison test: if 0 ≤ a_n ≤ b_n and Σ b_n converges, so does Σ a_n. The ratio test: if |a_(n+1)/a_n| → L, the series converges absolutely when L < 1 and diverges when L > 1. The root test: if |a_n|^(1/n) → L, same conclusion.
Scheme
; Ratio test: sum n!/n^n; a_{n+1}/a_n = (n/(n+1))^n -> 1/e < 1, so it converges
(define (factorial n)
(if (<= n 1) 1 (* n (factorial (- n 1)))))
(define (ratio n)
(/ (/ (factorial (+ n 1)) (expt (+ n 1) (+ n 1)))
(/ (factorial n) (expt n n))))
(display "Ratio test for n!/n^n:") (newline)
(for-each (lambda (n)
(display " a_(n+1)/a_n at n=")
(display n)
(display ": ")
(display (exact->inexact (ratio n)))
(newline))
(list 251020))
(display " Limit = 1/e = ")
(display (/ 1.0 (exp 1)))
(display " < 1: converges")
Python
# Python equivalentimportmathdef ratio(n):
return (math.factorial(n+1) / (n+1)**(n+1)) / (math.factorial(n) / n**n)
print("Ratio test for n!/n^n:")
for n in [2, 5, 10, 20]:
print(" a_(n+1)/a_n at n=" + str(n) + ":", ratio(n))
print(" Limit = 1/e =", 1/math.e, "< 1: converges")
Absolute vs conditional convergence
Absolute convergence (Σ |a_n| converges) implies convergence. Conditional convergence means Σ a_n converges but Σ |a_n| diverges. The alternating harmonic series Σ (-1)^(n+1)/n converges conditionally to ln(2). Riemann's rearrangement theorem: a conditionally convergent series can be rearranged to sum to any value.
Scheme
; Alternating harmonic series: conditionally convergent; sum (-1)^(n+1) / n = ln(2)
(define (alt-harmonic-partial n)
(let loop ((k 1) (s 0.0))
(if (> k n) s
(loop (+ k 1)
(+ s (/ (if (odd? k) 1.0-1.0) k))))))
(display "Alternating harmonic (converges to ln 2):") (newline)
(for-each (lambda (n)
(display " S_") (display n) (display " = ")
(display (alt-harmonic-partial n)) (newline))
(list 10100100010000))
(display " ln(2) = ")
(display (log 2))
Python
# Python equivalentimportmathdef alt_harmonic(n):
returnsum((1if k % 2 == 1else -1) / k for k inrange(1, n + 1))
print("Alternating harmonic (converges to ln 2):")
for n in [10, 100, 1000, 10000]:
print(" S_" + str(n) + " =", alt_harmonic(n))
print(" ln(2) =", math.log(2))
Power series
A power series Σ c_n x^n has a radius of convergence R: it converges absolutely for |x| < R and diverges for |x| > R. Inside the radius, power series can be differentiated and integrated term by term.
Scheme
; Power series for e^x = sum x^n/n!; Radius of convergence: R = infinity
(define (factorial n)
(if (<= n 1) 1 (* n (factorial (- n 1)))))
(define (exp-series x terms)
(let loop ((n 0) (s 0.0))
(if (> n terms) s
(loop (+ n 1) (+ s (/ (expt x n) (factorial n)))))))
(display "e^x via power series:") (newline)
(for-each (lambda (x)
(display " e^") (display x) (display " = ")
(display (exp-series x 20))
(display " (exact: ") (display (exp x)) (display ")")
(newline))
(list 12-10.5))
Python
# Python equivalentimportmathdef taylor_exp(x, n):
returnsum(x**k / math.factorial(k) for k inrange(n + 1))
print("e^x via power series:")
for x in [1, 2, -1, 0.5]:
approx = taylor_exp(x, 20)
exact = math.exp(x)
print(" e^" + str(x) + " = " + str(approx) + " (exact: " + str(exact) + ")")
Notation reference
Symbol
Scheme
Meaning
Σ a_n
(partial-sum n)
Series: limit of partial sums
|a_(n+1)/a_n| → L
(ratio n)
Ratio test
R (radius)
1/lim|c_n|^(1/n)
Radius of convergence
Σ |a_n|
absolute conv.
Absolute convergence
Neighbors
Ch. 2: Sequences — series convergence reduces to sequence convergence
📐 Calculus Ch.8 — integration techniques include series-based methods like Taylor expansion
📡 Information Theory Ch.2 — entropy as an infinite series: log sums that converge only under certain conditions
🎰 Probability Ch.10 — generating functions are formal power series encoding sequences
Translation notes
The harmonic series diverges slowly: 10,000 terms only reaches about 9.8. Our numerical partial sums illustrate convergence speed but cannot prove convergence or divergence. The comparison test is a proof technique, not a computation.