PDE Classification
Topic:
advanced.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:
The discriminant is:
Classification:
- → Elliptic (e.g., Laplace: )
- → Parabolic (e.g., Heat: )
- → Hyperbolic (e.g., Wave: )
PDE Classification
Why Classification Matters
Different PDE types require completely different solution methods:
- Elliptic: Boundary value problems, steady-state
- Parabolic: Initial value + boundary, diffusion
- Hyperbolic: Initial value + boundary, wave propagation
Using the wrong method WILL FAIL or produce nonsense results.
Mathematical Classification Theory
The Discriminant Formula
For a general second-order PDE:
The discriminant is:
Classification Categories
| Discriminant | Type | Canonical Form | Prototype |
|---|---|---|---|
| Elliptic | Laplace | ||
| Parabolic | Heat | ||
| Hyperbolic | Wave |
Physical Interpretation
Elliptic ()
Characteristics: No real characteristics (complex)
Physical Meaning: Equilibrium states, no time evolution
Properties:
- Smooth solutions (infinitely differentiable if coefficients are smooth)
- Maximum principle: solution maximum on boundary
- Propagation speed: infinite (disturbance felt everywhere instantly)
Examples:
- Laplace's equation: (electrostatics, steady heat)
- Poisson's equation: (gravity, charged regions)
- Minimal surface equation:
Parabolic ()
Characteristics: One family of real characteristics
Physical Meaning: Diffusion processes, irreversible evolution
Properties:
- Smoothing effect (rough initial data becomes smooth)
- Infinite propagation speed (finite but small amplitude)
- Irreversible in time (cannot reverse diffusion without external forcing)
Examples:
- Heat equation: (thermal diffusion)
- Black-Scholes equation: (option pricing)
- Fokker-Planck equation: (stochastic processes)
Hyperbolic ()
Characteristics: Two families of real characteristics
Physical Meaning: Wave propagation, reversible evolution
Properties:
- Finite propagation speed (disturbances travel along characteristics)
- Preservation of discontinuities (shocks can form)
- Reversible in time (wave equation is time-symmetric)
Examples:
- Wave equation: (vibrations, sound)
- Telegraph equation: (damped waves)
- Beam equation: (elastic beam vibrations)
Discriminant Computation in MathHook
Current Implementation Limitations
MathHook currently uses pattern matching instead of symbolic differentiation for coefficient extraction.
Why Pattern Matching?:
- Symbolic differentiation of coefficients requires extracting , , from PDE
- This requires: evaluated symbolically
- MathHook's differentiation module focuses on expressions, not PDE coefficient extraction
- Pattern matching works for standard equations (heat, wave, Laplace)
Future Enhancement: Phase 2 will implement full symbolic coefficient extraction.
Variable Naming Heuristics
MathHook infers PDE type from variable names:
Time-Space PDEs
Variables named 't' or 'time' → considered temporal Variables named 'x', 'y', 'z', or 'space' → considered spatial
Heat/Wave Equation Detection:
- Requires exactly 2 variables
- One temporal (
tortime) - One spatial (
xorspace) - Heat: Additive structure (first-order time derivative)
- Wave: Multiplicative structure (second-order time derivative)
Spatial-Only PDEs
Variables named 'x' and 'y' → spatial coordinates
Laplace Equation Detection:
- Requires 2+ spatial variables
- No temporal variable
- Additive structure
Custom Variable Names
⚠️ Warning: Non-standard variable names may not classify correctly.
Classification Edge Cases
Mixed-Type PDEs
Some PDEs change type based on region:
Tricomi Equation:
- : Elliptic ()
- : Parabolic ()
- : Hyperbolic ()
⚠️ MathHook does NOT handle mixed-type PDEs currently.
Degenerate Cases
Equation:
This is technically a degenerate elliptic PDE (only one second derivative):
- Discriminant: (parabolic by formula)
- But no time evolution (elliptic by behavior)
MathHook Classification: Depends on variable names. Use with caution.
Examples
Wave Equation Classification (Hyperbolic)
Wave equation has positive discriminant and is classified as hyperbolic
Rust
#![allow(unused)] fn main() { 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); }
Python
u = symbol('u')
x = symbol('x')
t = symbol('t')
# Wave equation structure
equation = expr(mul=[x, t])
pde = Pde.new(equation, u, [x, t])
# Automatic classification
pde_type = pde.pde_type()
assert pde_type == PdeType.Hyperbolic
# Discriminant computation
disc = pde.compute_discriminant()
assert disc > 0.0
assert disc == 4.0
JavaScript
const u = symbol('u');
const x = symbol('x');
const t = symbol('t');
// Wave equation structure
const equation = expr({ mul: [x, t] });
const pde = Pde.new(equation, u, [x, t]);
// Automatic classification
const pdeType = pde.pdeType();
assert(pdeType === PdeType.Hyperbolic);
// Discriminant computation
const disc = pde.computeDiscriminant();
assert(disc > 0.0);
assert(disc === 4.0);
Heat Equation Classification (Parabolic)
Heat equation has zero discriminant and is classified as parabolic
Rust
#![allow(unused)] fn main() { 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); }
Python
u = symbol('u')
x = symbol('x')
t = symbol('t')
# Heat equation structure
equation = expr(add=[x, t])
pde = Pde.new(equation, u, [x, t])
# Automatic classification
pde_type = pde.pde_type()
assert pde_type == PdeType.Parabolic
# Discriminant
disc = pde.compute_discriminant()
assert abs(disc) == 0.0
JavaScript
const u = symbol('u');
const x = symbol('x');
const t = symbol('t');
// Heat equation structure
const equation = expr({ add: [x, t] });
const pde = Pde.new(equation, u, [x, t]);
// Automatic classification
const pdeType = pde.pdeType();
assert(pdeType === PdeType.Parabolic);
// Discriminant
const disc = pde.computeDiscriminant();
assert(Math.abs(disc) === 0.0);
Laplace Equation Classification (Elliptic)
Laplace equation has negative discriminant and is classified as elliptic
Rust
#![allow(unused)] fn main() { 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); }
Python
u = symbol('u')
x = symbol('x')
y = symbol('y')
# Laplace equation structure
equation = expr(add=[x, y])
pde = Pde.new(equation, u, [x, y])
# Automatic classification
pde_type = pde.pde_type()
assert pde_type == PdeType.Elliptic
# Discriminant
disc = pde.compute_discriminant()
assert disc < 0.0
assert disc == -4.0
JavaScript
const u = symbol('u');
const x = symbol('x');
const y = symbol('y');
// Laplace equation structure
const equation = expr({ add: [x, y] });
const pde = Pde.new(equation, u, [x, y]);
// Automatic classification
const pdeType = pde.pdeType();
assert(pdeType === PdeType.Elliptic);
// Discriminant
const disc = pde.computeDiscriminant();
assert(disc < 0.0);
assert(disc === -4.0);
Performance
Time Complexity: O(1)
API Reference
- Rust:
mathhook_core::pde::classification - Python:
mathhook.pde.classification - JavaScript:
mathhook.pde.classification