pub struct HigherOrderDerivatives;Expand description
Higher-order derivative operations
Implementations§
Source§impl HigherOrderDerivatives
impl HigherOrderDerivatives
Sourcepub fn compute(expr: &Expression, variable: Symbol, order: u32) -> Expression
pub fn compute(expr: &Expression, variable: Symbol, order: u32) -> Expression
Compute nth-order derivative
§Examples
use mathhook_core::simplify::Simplify;
use mathhook_core::calculus::derivatives::Derivative;
use mathhook_core::{Expression};
use mathhook_core::symbol;
use mathhook_core::calculus::derivatives::HigherOrderDerivatives;
let x = symbol!(x);
let expr = Expression::pow(Expression::symbol(x.clone()), Expression::integer(4));
let second_derivative = HigherOrderDerivatives::compute(&expr, x, 2);Sourcepub fn mixed_partial(
expr: &Expression,
derivatives: Vec<(Symbol, u32)>,
) -> Expression
pub fn mixed_partial( expr: &Expression, derivatives: Vec<(Symbol, u32)>, ) -> Expression
Compute mixed partial derivatives
§Examples
use mathhook_core::{Expression, symbol};
use mathhook_core::calculus::derivatives::HigherOrderDerivatives;
let x = symbol!(x);
let y = symbol!(y);
let expr = Expression::mul(vec![
Expression::pow(Expression::symbol(x.clone()), Expression::integer(2)),
Expression::symbol(y.clone())
]);
let mixed_partial = HigherOrderDerivatives::mixed_partial(&expr, vec![(x.clone(), 1), (y.clone(), 1)]);Sourcepub fn exists(expr: &Expression, variable: Symbol, order: u32) -> bool
pub fn exists(expr: &Expression, variable: Symbol, order: u32) -> bool
Check if higher-order derivative exists
§Examples
use mathhook_core::simplify::Simplify;
use mathhook_core::calculus::derivatives::Derivative;
use mathhook_core::{Expression, symbol};
use mathhook_core::calculus::derivatives::HigherOrderDerivatives;
let x = symbol!(x);
let expr = Expression::function("sin", vec![Expression::symbol(x.clone())]);
let exists = HigherOrderDerivatives::exists(&expr, x.clone(), 5);Sourcepub fn derivative_table(
expr: &Expression,
variable: &Symbol,
max_order: u32,
) -> Vec<Expression>
pub fn derivative_table( expr: &Expression, variable: &Symbol, max_order: u32, ) -> Vec<Expression>
Compute derivative table up to specified order
§Examples
use mathhook_core::{Expression, symbol};
use mathhook_core::calculus::derivatives::HigherOrderDerivatives;
let x = symbol!(x);
let expr = Expression::function("sin", vec![Expression::symbol(x.clone())]);
let table = HigherOrderDerivatives::derivative_table(&expr, &x, 4);Sourcepub fn find_pattern(
expr: &Expression,
variable: Symbol,
check_orders: u32,
) -> Option<u32>
pub fn find_pattern( expr: &Expression, variable: Symbol, check_orders: u32, ) -> Option<u32>
Find pattern in higher-order derivatives
§Examples
use mathhook_core::{Expression, symbol};
use mathhook_core::calculus::derivatives::HigherOrderDerivatives;
let x = symbol!(x);
let expr = Expression::function("sin", vec![Expression::symbol(x.clone())]);
let pattern = HigherOrderDerivatives::find_pattern(&expr, x.clone(), 8);Sourcepub fn leibniz_rule(
u: &Expression,
v: &Expression,
variable: &Symbol,
n: u32,
) -> Expression
pub fn leibniz_rule( u: &Expression, v: &Expression, variable: &Symbol, n: u32, ) -> Expression
Compute Leibniz rule for nth derivative of product
§Examples
use mathhook_core::simplify::Simplify;
use mathhook_core::{Expression, symbol};
use mathhook_core::calculus::derivatives::HigherOrderDerivatives;
let x = symbol!(x);
let u = Expression::symbol(x.clone());
let v = Expression::function("sin", vec![Expression::symbol(x.clone())]);
let nth_product = HigherOrderDerivatives::leibniz_rule(&u, &v, &x, 3);Sourcepub fn faa_di_bruno(
outer_function: &str,
inner_function: &Expression,
variable: Symbol,
n: u32,
) -> Expression
pub fn faa_di_bruno( outer_function: &str, inner_function: &Expression, variable: Symbol, n: u32, ) -> Expression
Compute Faà di Bruno’s formula for chain rule higher derivatives
§Examples
use mathhook_core::{Expression, symbol};
use mathhook_core::calculus::derivatives::HigherOrderDerivatives;
let x = symbol!(x);
let inner = Expression::pow(Expression::symbol(x.clone()), Expression::integer(2));
let outer_name = "sin";
let chain_derivative = HigherOrderDerivatives::faa_di_bruno(outer_name, &inner, x.clone(), 2);Auto Trait Implementations§
impl Freeze for HigherOrderDerivatives
impl RefUnwindSafe for HigherOrderDerivatives
impl Send for HigherOrderDerivatives
impl Sync for HigherOrderDerivatives
impl Unpin for HigherOrderDerivatives
impl UnwindSafe for HigherOrderDerivatives
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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