Lecture 7 - Mathematical Preliminaries for Lyapunov Theory

Published

February 3, 2026

Based on notes created by Sam Coogan and Murat Arcak. Licensed under a “Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License”

Mathematical Background

Consider the general nonlinear system \dot{x} = f(x) \qquad x(0) = x_0

Do solutions exist? Are they unique?

  • If f(\cdot) is continuous (C^0), then a solution exists, but C^0 is not sufficient for uniqueness.

    Example: \dot{x} = x^{1/3} with x(0) = 0 has multiple solutions:

    x(t) \equiv 0 and x(t) = \left(\frac{2t}{3}\right)^{3/2}

Show code
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 200)
y = np.cbrt(x)  # x^(1/3)

plt.figure(figsize=(5, 4))
plt.plot(x, y, color='blue', linewidth=2)
plt.axhline(0, color='black', linewidth=0.8)
plt.axvline(0, color='black', linewidth=0.8)
plt.text(1.2, 0, '$x$', va='center', ha='left', fontsize=12)
plt.text(0, 1.1, '$\dot{x}$', va='bottom', ha='center', fontsize=12)
plt.annotate(
  "The slope of $x^{1/3}$ is infinite at $x=0$.",
  xy=(0, 0), xytext=(0.2, -0.7),
  arrowprops=dict(arrowstyle="->", color="orange"),
  color="orange", fontsize=11, ha="left"
)
plt.gca().set_axis_off()
plt.ylim([-1,1])
plt.tight_layout()
plt.show()

Plot of \dot{x} = x^{1/3}
  • Sufficient condition for uniqueness: f(\cdot) is Lipschitz continuous (more restrictive than C^0). | f(x) - f(y) | \leq L | x - y | \qquad \forall x, y \in D

    where L > 0 is the Lipschitz constant.

    Definition: f(\cdot) is locally Lipschitz if every point x_0 has a neighborhood D where | f(x) - f(y) | \leq L | x - y | holds for all x,y in D for some L.

    Example: f(x) = x^{1/3} is NOT locally Lipschitz due to the infinite slope at x=0. Instead consider \dot{x} = x^3. This is locally Lipschitz:

    x^3 - y^3 = (x^2 + xy + y^2)(x - y) \leq 3 r^2 | x - y | \\ \implies |x^3 - y^3| \leq L | x - y |

    Show code
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(-1, 1, 200)
    y = x**3  # x^(3)
    
    plt.figure(figsize=(5, 4))
    plt.plot(x, y, color='blue', linewidth=2)
    plt.axhline(0, color='black', linewidth=0.8)
    plt.axvline(0, color='black', linewidth=0.8)
    plt.text(1.2, 0, '$x$', va='center', ha='left', fontsize=12)
    plt.text(0, 1.1, '$\dot{x}$', va='bottom', ha='center', fontsize=12)
    plt.annotate(
      "The slope of $x^3$ goes to infinity as $x\\to \\infty$.",
      xy=(1, 1), xytext=(0.2, -0.7),
      arrowprops=dict(arrowstyle="->", color="orange"),
      color="orange", fontsize=11, ha="left"
    )
    plt.gca().set_axis_off()
    plt.ylim([-1,1])
    plt.show()

    Plot of \dot{x} = x^{3}
  • If f(\cdot) is continuously differentiable C^1, then it is locally Lipschitz.

  • The converse is not true: local Lipschitz does not imply C^1.

We can bound x^2 + xy + y^2 in any neighborhood of x_0 with radius L.

Example: saturation function is Lipschitz but not C^1 at the corners (i.e., it is not differentiable at x = \pm 1 but it is locally Lipschitz):

|sat(x) - sat(y)| \leq |x - y| \qquad \forall x, y \in \mathbb{R}

Show code
import numpy as np
import matplotlib.pyplot as plt
def sat(x):
    return np.clip(x, -1, 1) 
x = np.linspace(-2, 2, 200)
y = sat(x)  
plt.figure(figsize=(5, 4))
plt.plot(x, y, color='blue', linewidth=2)
plt.axhline(0, color='black', linewidth=0.8)
plt.axvline(0, color='black', linewidth=0.8)
plt.text(2.1, 0, '$x$', va='center', ha='left', fontsize=12)
plt.text(0, 1.6, '$\\text{sat}(x)$', va='bottom', ha='center', fontsize=12)
plt.gca().set_axis_off()
plt.ylim([-1.5,1.5])
# Manually add x-tick labels
plt.text(-1, -0.15, '-1', ha='center', va='top', fontsize=11)
plt.text(1, -0.15, '1', ha='center', va='top', fontsize=11)
# Manually add y-tick labels
plt.text(-0.12, -1, '-1', ha='right', va='center', fontsize=11)
plt.text(-0.12, 1, '1', ha='right', va='center', fontsize=11)
# Dotted lines from (0,0) to (1,1) and (0,0) to (-1,-1)
plt.plot([0, 1], [1, 1], color='gray', linestyle='dotted', linewidth=1)
plt.plot([1, 1], [0, 1], color='gray', linestyle='dotted', linewidth=1)
plt.plot([0, -1], [-1, -1], color='gray', linestyle='dotted', linewidth=1)
plt.plot([-1, -1], [0, -1], color='gray', linestyle='dotted', linewidth=1)
plt.show()

Plot of saturation function

Summary

A diagram of the function classes discussed so far is shown below:

Definition continued: f(\dot) is globally Lipschitz if the Lipschitz condition holds for all x,y \in \mathbb{R}^n.(i.e., the same L works everywhere).

Examples: sat(\cdot) is globally Lipschitz with L=1. x^3 is not globally Lipschitz.

  • Suppose f(\cdot) is C^1. Then it is globally Lipschitz iff \frac{\partial f}{\partial x} is bounded.

L = \sup_x | f'(x) |

Preview of existence theorems:

  1. If f(\cdot) is C^0 \implies existence of solution x(t) on finite interval [0, t_f).
  2. If f(\cdot) is locally Lipschitz \implies existence and uniqueness on [0, t_f).
  3. If f(\cdot) is globally Lipschitz \implies existence and uniqueness on [0, \infty).

Examples:

  • \dot{x} = x^2 (locally Lipschitz) admits unique solution on [0, t_f), but t_f < \infty from Lecture 1 (finite escape).
  • \dot{x} = Ax globally Lipschitz, therefore no finite escape | Ax - Ay | \leq ||A|| | x - y |

The following concepts are required to prove the theorems above.

Normed Linear Spaces

Definition: \mathbb{X} is a normed linear space if there exists a real-valued norm |\cdot| satisfying:

  1. |x| \geq 0 for all x \in \mathbb{X}, and |x| = 0 iff x = 0.
  2. |x + y| \leq |x| + |y| for all x,y \in \mathbb{X} (triangle inequality).
  3. | \alpha x | = |\alpha| |x| for all \alpha \in \mathbb{R} and x \in \mathbb{X}.

Definition: A sequence ${ x_k } in \mathbb{X} is said to be a Cauchy sequence if | x_k - x_m | \to 0 \quad \text{as} \quad k, m \to \infty

Every convergent sequence is Cauchy. The converse is not true.

Definition: \mathbb{X} is a Banach space if every Cauchy sequence converges to an element in \mathbb{X}.

All Euclidean spaces are Banach spaces.

Example:

C^n[a,b]: the set of all continuous functions [a,b] \to \mathbb{R}^n with norm | x |_\infty = \max_{t \in [a,b]} | x(t) |

  1. | x |_C \geq 0 and | x |_C = 0 iff x(t) \equiv 0.
  2. |x + y|_C = \max_{t \in [a,b]} | x(t) + y(t) | \leq \max_{t \in [a,b]} \{ | x(t) | + | y(t) | \} \leq = | x |_C + | y |_C.
  3. | \alpha x |_C = \max_{t \in [a,b]} | \alpha| |x(t)| = |\alpha| | x |_C.

It can be shown that C^n[a,b] is a Banach space.

Discrete-Time Models

Before proceeding to the fixed point theorems, we briefly discuss discrete-time models.

Continuous-Time System: \dot{x} = f(x(t)) \\ f(x^*) = 0

Asymptotic stability criterion:

R(\lambda_i) < 0 \quad \forall \lambda_i(A) with A = \frac{\partial f}{\partial x} \Big|_{x = x^*}

f'(x^*) < 0 for first order systems

Discrete-Time System:
x_{n+1} = f(x_n), \quad n = 0, 1, 2, \ldots \\ f(x^*) = x^* ~(\textrm{fixed point})

Asymptotic stability criterion:

|\lambda_i(A)<1| where A = \frac{\partial f}{\partial x} \Big|_{x = x^*}

f'(x^*) < 1 for first order systems

These criteria are inconclusive if the respective inequality is not strict, but for first order systems we can determine stability graphically (Cobweb diagram as presented in Lecture 6 PDF).

Fixed Point Theorems

T(x) = x

Brouwer’s Theorem (Euclidean Spaces): If U is a closed, bounded, convex subset of a Euclidean space \mathbb{R}^n and T: U \to U is continuous, then T has at least one fixed point in U.

Schauder’s Theorem (Brouwer’s Theorem for Banach Spaces): If U is a closed, bounded, convex subset of a Banach space \mathbb{X} and T: U \to U is completely continuous1, then T has a fixed point in U.

1 continuous and for any bounded set B \subseteq U the closure of T(B) is compact.

Contraction Mapping Theorem: If U is a closed subset of a Banach space and T: U \to U is such that

| T(x) - T(y) | \leq \rho | x - y | \quad \rho < 1, \forall x,y \in U

then T has a unique fixed point in U and the solutions of x_{n+1} = T(x_n) converge to the fixed point for any initial condition x_0 \in U.