pub struct ODESolver { /* private fields */ }Expand description
Automatic ODE solver with intelligent routing
Implementations§
Source§impl ODESolver
impl ODESolver
Sourcepub fn with_config(config: SolverConfig) -> Self
pub fn with_config(config: SolverConfig) -> Self
Create an ODE solver with custom configuration
Sourcepub fn tolerance(self, tol: f64) -> Self
pub fn tolerance(self, tol: f64) -> Self
Set numerical tolerance (builder pattern)
§Examples
use mathhook_core::calculus::ode::solver::ODESolver;
let solver = ODESolver::new()
.tolerance(1e-12);Sourcepub fn max_iterations(self, max: usize) -> Self
pub fn max_iterations(self, max: usize) -> Self
Set maximum iterations for numerical methods (builder pattern)
§Examples
use mathhook_core::calculus::ode::solver::ODESolver;
let solver = ODESolver::new()
.max_iterations(5000);Sourcepub fn simplify(self, enable: bool) -> Self
pub fn simplify(self, enable: bool) -> Self
Enable or disable automatic simplification (builder pattern)
§Examples
use mathhook_core::calculus::ode::solver::ODESolver;
let solver = ODESolver::new()
.simplify(false); // Disable simplificationSourcepub fn educational(self, enable: bool) -> Self
pub fn educational(self, enable: bool) -> Self
Enable or disable educational mode (builder pattern)
Educational mode provides step-by-step explanations
§Examples
use mathhook_core::calculus::ode::solver::ODESolver;
let solver = ODESolver::new()
.educational(true);Sourcepub fn config(&self) -> &SolverConfig
pub fn config(&self) -> &SolverConfig
Get current solver configuration
Sourcepub fn solve_first_order(
&self,
rhs: &Expression,
dependent: &Symbol,
independent: &Symbol,
) -> ODEResult
pub fn solve_first_order( &self, rhs: &Expression, dependent: &Symbol, independent: &Symbol, ) -> ODEResult
Solve a first-order ODE automatically
Automatically classifies the ODE and routes to the appropriate solver via registry. Attempts multiple methods in priority order if the primary method fails.
§Arguments
rhs- Right-hand side of dy/dx = rhsdependent- Dependent variable (y)independent- Independent variable (x)
§Returns
Returns solution expression on success
§Examples
use mathhook_core::calculus::ode::solver::ODESolver;
use mathhook_core::{symbol, expr};
let x = symbol!(x);
let y = symbol!(y);
let rhs = expr!(x * y);
let solver = ODESolver::new();
let solution = solver.solve_first_order(&rhs, &y, &x).unwrap();
assert!(solution.to_string().contains("exp") || solution.to_string().contains("C"));Sourcepub fn solve_ivp(
&self,
rhs: &Expression,
dependent: &Symbol,
independent: &Symbol,
x0: Expression,
y0: Expression,
) -> ODEResult
pub fn solve_ivp( &self, rhs: &Expression, dependent: &Symbol, independent: &Symbol, x0: Expression, y0: Expression, ) -> ODEResult
Solve a first-order initial value problem
Convenience method for solving with initial condition
§Arguments
rhs- Right-hand side of dy/dx = rhsdependent- Dependent variable (y)independent- Independent variable (x)x0- Initial x valuey0- Initial y value
§Examples
use mathhook_core::calculus::ode::solver::ODESolver;
use mathhook_core::{symbol, expr};
let x = symbol!(x);
let y = symbol!(y);
let rhs = expr!(x);
let solver = ODESolver::new();
let solution = solver.solve_ivp(&rhs, &y, &x, expr!(0), expr!(1));
// Returns particular solution with y(0) = 1Sourcepub fn solve_second_order(
&self,
a: &Expression,
b: &Expression,
c: &Expression,
r: &Expression,
dependent: &Symbol,
independent: &Symbol,
) -> ODEResult
pub fn solve_second_order( &self, a: &Expression, b: &Expression, c: &Expression, r: &Expression, dependent: &Symbol, independent: &Symbol, ) -> ODEResult
Solve a second-order ODE automatically
Currently supports constant coefficient equations.
§Arguments
a- Coefficient of y’’b- Coefficient of y’c- Coefficient of yr- Right-hand side (forcing function)dependent- Dependent variable (y)independent- Independent variable (x)
§Examples
use mathhook_core::calculus::ode::solver::ODESolver;
use mathhook_core::{symbol, expr};
let x = symbol!(x);
let y = symbol!(y);
let solver = ODESolver::new();
let solution = solver.solve_second_order(
&expr!(1),
&expr!(0),
&expr!(-1),
&expr!(0),
&y,
&x
).unwrap();
assert!(solution.to_string().contains("exp") || solution.to_string().contains("sinh") || solution.to_string().contains("cosh"));Trait Implementations§
Auto Trait Implementations§
impl Freeze for ODESolver
impl !RefUnwindSafe for ODESolver
impl Send for ODESolver
impl Sync for ODESolver
impl Unpin for ODESolver
impl !UnwindSafe for ODESolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more