Root-Finding & Nonlinear Equations

the contraction-mapping condition

Why does pressing cos repeatedly settle down, while some other rules fly apart? The deciding factor is whether each step PULLS points closer together or pushes them apart. A rule that always shrinks the gap between any two inputs is called a contraction, and a contraction is exactly what makes fixed-point iteration converge.

Make it precise. Near a fixed point x* of x = g(x), write the error e_n = x_n - x*. Because g(x*) = x*, a Taylor expansion gives e_{n+1} = g(x_n) - g(x*) is approximately g'(x*) * e_n. So each step multiplies the error by roughly g'(x*). If |g'(x*)| < 1 the error shrinks geometrically and the iteration converges (linearly, with rate |g'(x*)|); if |g'(x*)| > 1 it grows and the iteration diverges; if |g'(x*)| = 0 you get faster-than-linear convergence (this is the secret behind Newton's quadratic speed). The full theorem (Banach's fixed-point theorem) says: if |g'(x)| <= L < 1 on an interval that g maps into itself, then g has a UNIQUE fixed point there and iteration converges to it from any start in the interval.

Two practical lessons follow. First, the condition is LOCAL near the root for the simple |g'(x*)| test, so a good starting guess matters; the global Banach version additionally needs g to keep you inside the interval. Second, the size of |g'(x*)| sets the speed: a value near 0.99 converges agonizingly slowly (it takes about 2300 steps to gain ten digits), while a value near 0 races. This is why we work to rearrange f(x) = 0 into an x = g(x) whose g' is small at the root, and why Newton — which drives g'(x*) to zero — is so much faster than a generic fixed-point scheme.

For g(x) = cos(x), the fixed point is x* = 0.739, and g'(x*) = -sin(0.739) = -0.674, with |g'| = 0.674 < 1 — so iteration converges, but only linearly: each step keeps about 0.674 of the previous error, gaining roughly one decimal digit per six steps. For g(x) = x^2 - 1 at x* = 1.618, g'(x*) = 2 * 1.618 = 3.24 > 1, so iteration diverges.

|g'(x*)| < 1 means convergence; the closer to 0, the faster.

|g'(x*)| < 1 guarantees convergence only if you start close enough (and, for the global theorem, g maps the interval into itself). Exactly at |g'(x*)| = 1 the test is inconclusive — the iteration may creep, oscillate, or stall.

Also called
contraction condition|g'| < 1 condition壓縮映射收縮條件