PDE Classification

Mathematical classification of partial differential equations into elliptic, parabolic, and hyperbolic types using the discriminant formula. Different PDE types require completely different solution methods and have distinct physical interpretations.

πŸ“

Mathematical Definition

For a general second-order PDE:

Aβˆ‚2uβˆ‚x2+Bβˆ‚2uβˆ‚xβˆ‚y+Cβˆ‚2uβˆ‚y2+lowerΒ orderΒ terms=0A \frac{\partial^2 u}{\partial x^2} + B \frac{\partial^2 u}{\partial x \partial y} + C \frac{\partial^2 u}{\partial y^2} + \text{lower order terms} = 0

The discriminant is:

Ξ”=B2βˆ’4AC\Delta = B^2 - 4AC

Classification: - Ξ”<0\Delta < 0 β†’ Elliptic (e.g., Laplace: uxx+uyy=0u_{xx} + u_{yy} = 0) - Ξ”=0\Delta = 0 β†’ Parabolic (e.g., Heat: ut=uxxu_t = u_{xx}) - Ξ”>0\Delta > 0 β†’ Hyperbolic (e.g., Wave: utt=c2uxxu_{tt} = c^2 u_{xx})

Code Examples

Wave Equation Classification (Hyperbolic)

Wave equation has positive discriminant and is classified as hyperbolic

let u = symbol!(u);
let x = symbol!(x);
let t = symbol!(t);

// Wave equation structure
let equation = expr!(mul: x, t);
let pde = Pde::new(equation, u, vec![x, t]);

// Automatic classification
let pde_type = pde.pde_type();
assert_eq!(pde_type, Some(PdeType::Hyperbolic));

// Discriminant computation
let disc = pde.compute_discriminant();
assert!(disc > 0.0);
assert_eq!(disc, 4.0);

Heat Equation Classification (Parabolic)

Heat equation has zero discriminant and is classified as parabolic

let u = symbol!(u);
let x = symbol!(x);
let t = symbol!(t);

// Heat equation structure
let equation = expr!(add: x, t);
let pde = Pde::new(equation, u, vec![x, t]);

// Automatic classification
let pde_type = pde.pde_type();
assert_eq!(pde_type, Some(PdeType::Parabolic));

// Discriminant
let disc = pde.compute_discriminant();
assert_eq!(disc.abs(), 0.0);

Laplace Equation Classification (Elliptic)

Laplace equation has negative discriminant and is classified as elliptic

let u = symbol!(u);
let x = symbol!(x);
let y = symbol!(y);

// Laplace equation structure
let equation = expr!(add: x, y);
let pde = Pde::new(equation, u, vec![x, y]);

// Automatic classification
let pde_type = pde.pde_type();
assert_eq!(pde_type, Some(PdeType::Elliptic));

// Discriminant
let disc = pde.compute_discriminant();
assert!(disc < 0.0);
assert_eq!(disc, -4.0);

πŸ”— Related Topics