Expand description
Consistent initialization for DAEs.
For differential-algebraic equations (DAEs), the initial conditions must satisfy the algebraic constraints. This module provides functions to compute consistent initial conditions for index-1 DAEs.
§Background
A DAE in semi-explicit form is:
y₁' = f₁(t, y₁, y₂) (differential equations)
0 = g(t, y₁, y₂) (algebraic constraints)Given initial values (y₁⁰, y₂⁰) where y₂⁰ may not satisfy the constraint g = 0, we solve for y₂ such that g(t₀, y₁⁰, y₂) = 0.
§Example
use numra_ode::{DaeProblem, compute_consistent_initial};
// Constraint: y₂ = y₁²
let dae = DaeProblem::new(
|_t, y: &[f64], dydt: &mut [f64]| {
dydt[0] = -y[0]; // y₁' = -y₁
dydt[1] = y[1] - y[0] * y[0]; // 0 = y₂ - y₁² (residual)
},
|mass: &mut [f64]| {
mass[0] = 1.0; mass[1] = 0.0;
mass[2] = 0.0; mass[3] = 0.0; // M[1,1] = 0 (algebraic)
},
0.0, 1.0,
vec![2.0, 0.0], // Inconsistent: y₂ should be 4
vec![1], // Index 1 is algebraic
);
let y0 = compute_consistent_initial(&dae, 0.0, &[2.0, 0.0]).unwrap();
assert!((y0[1] - 4.0).abs() < 1e-10); // Now consistentAuthor: Moussa Leblouba Date: 4 February 2026 Modified: 2 May 2026
Functions§
- compute_
consistent_ initial - Compute consistent initial conditions for an index-1 DAE.
- compute_
consistent_ initial_ tol - Compute consistent initial conditions with user-specified tolerance.