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 UnsafeUnpin 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