Liouville’s theorem: a bounded entire function is constant#

Cauchy’s integral formula on the circle \(|z| = R\) gives the estimate \(|f'(0)| \le M(R)/R\), where \(M(R)\) is the maximum of \(|f|\) on the circle. If \(f\) is entire and bounded, letting \(R \to \infty\) forces \(f' \equiv 0\). So every nonconstant entire function, such as \(\sin z\), is unbounded. Applied to \(1/p(z)\), the theorem proves the fundamental theorem of algebra.

import matplotlib.pyplot as plt
import numpy as np

from mathematicskit.complex_analysis import cauchy_integral_formula, circle_contour

Cauchy’s estimate \(|f'(0)| \le M(R)/R\)#

radii = np.geomspace(0.5, 20, 12)
functions = {r"$\sin z$": np.sin, r"$z^3 - z$": lambda z: z**3 - z, r"$e^{-z^2}$": lambda z: np.exp(-(z**2))}
fig, ax = plt.subplots()
for name, f in functions.items():
    max_modulus = np.array([np.max(np.abs(f(circle_contour(0, R).points(2000)))) for R in radii])
    ax.loglog(radii, max_modulus, "o-", label=f"M(R) for {name}")
    derivative = abs(cauchy_integral_formula(f, circle_contour(0, 1.0), 0.0, n=1))
    print(f"{name:12s} |f'(0)| = {derivative:.4f},  min over R of M(R)/R = {np.min(max_modulus / radii):.4f}")
ax.set_xlabel("R")
ax.set_ylabel("max |f| on |z| = R")
ax.set_title("Nonconstant entire functions are unbounded")
ax.legend()
Nonconstant entire functions are unbounded
$\sin z$     |f'(0)| = 1.0000,  min over R of M(R)/R = 1.0422
$z^3 - z$    |f'(0)| = 1.0000,  min over R of M(R)/R = 1.2500
$e^{-z^2}$   |f'(0)| = 0.0000,  min over R of M(R)/R = 2.3319

<matplotlib.legend.Legend object at 0x7fd7c9244ef0>

The fundamental theorem of algebra#

If p had no roots, 1/p would be entire; it also tends to 0 as \(|z|\) grows, so it would be bounded, hence constant – impossible for a nonconstant p.

p = lambda z: z**4 + z + 1
for R in (1, 10, 100):
    print(f"R = {R:3d}: max |1/p| on |z| = R: {np.max(np.abs(1 / p(circle_contour(0, R).points(2000)))):.2e}")
print("roots of p (where 1/p fails to be entire):", np.round(np.roots([1, 0, 0, 1, 1]), 4))
R =   1: max |1/p| on |z| = R: 1.93e+00
R =  10: max |1/p| on |z| = R: 1.00e-04
R = 100: max |1/p| on |z| = R: 1.00e-08
roots of p (where 1/p fails to be entire): [ 0.7271+0.9341j  0.7271-0.9341j -0.7271+0.43j   -0.7271-0.43j  ]

Total running time of the script: (0 minutes 0.162 seconds)

Gallery generated by Sphinx-Gallery