pub struct JacobianDeterminant;Expand description
Jacobian determinant operations
Implementations§
Source§impl JacobianDeterminant
impl JacobianDeterminant
Sourcepub fn compute(functions: &[Expression], variables: &[Symbol]) -> Expression
pub fn compute(functions: &[Expression], variables: &[Symbol]) -> Expression
Compute Jacobian determinant
§Examples
use mathhook_core::{Expression};
use mathhook_core::symbol;
use mathhook_core::calculus::derivatives::JacobianDeterminant;
let x = symbol!(x);
let y = symbol!(y);
let functions = vec![
Expression::mul(vec![Expression::symbol(x.clone()), Expression::symbol(y.clone())]),
Expression::add(vec![Expression::symbol(x.clone()), Expression::symbol(y.clone())])
];
let variables = vec![x, y];
let jac_det = JacobianDeterminant::compute(&functions, &variables);Sourcepub fn absolute(functions: &[Expression], variables: &[Symbol]) -> Expression
pub fn absolute(functions: &[Expression], variables: &[Symbol]) -> Expression
Compute absolute value of Jacobian determinant (for coordinate transformations)
§Examples
use mathhook_core::{Expression, Symbol};
use mathhook_core::symbol;
use mathhook_core::calculus::derivatives::JacobianDeterminant;
let r = symbol!(r);
let theta = symbol!(theta);
let functions = vec![
Expression::mul(vec![
Expression::symbol(r.clone()),
Expression::function("cos", vec![Expression::symbol(theta.clone())])
]),
Expression::mul(vec![
Expression::symbol(r.clone()),
Expression::function("sin", vec![Expression::symbol(theta.clone())])
])
];
let variables = vec![r, theta];
let abs_jac_det = JacobianDeterminant::absolute(&functions, &variables);Sourcepub fn is_singular(functions: &[Expression], variables: &[Symbol]) -> bool
pub fn is_singular(functions: &[Expression], variables: &[Symbol]) -> bool
Check if Jacobian is singular (determinant = 0)
§Examples
use mathhook_core::{Expression};
use mathhook_core::symbol;
use mathhook_core::calculus::derivatives::JacobianDeterminant;
let x = symbol!(x);
let y = symbol!(y);
let functions = vec![
Expression::symbol(x.clone()),
Expression::symbol(x.clone()) // Linearly dependent
];
let variables = vec![x, y];
let is_singular = JacobianDeterminant::is_singular(&functions, &variables);Sourcepub fn condition_estimate(
functions: &[Expression],
variables: &[Symbol],
) -> Expression
pub fn condition_estimate( functions: &[Expression], variables: &[Symbol], ) -> Expression
Compute condition number estimate (for numerical stability analysis)
§Examples
use mathhook_core::{Expression};
use mathhook_core::symbol;
use mathhook_core::calculus::derivatives::JacobianDeterminant;
let x = symbol!(x);
let y = symbol!(y);
let functions = vec![
Expression::add(vec![Expression::symbol(x.clone()), Expression::symbol(y.clone())]),
Expression::add(vec![
Expression::symbol(x.clone()),
Expression::mul(vec![
Expression::mul(vec![
Expression::integer(1),
Expression::pow(Expression::integer(1000), Expression::integer(-1))
]),
Expression::symbol(y.clone())
])
])
];
let variables = vec![x, y];
let condition = JacobianDeterminant::condition_estimate(&functions, &variables);Auto Trait Implementations§
impl Freeze for JacobianDeterminant
impl RefUnwindSafe for JacobianDeterminant
impl Send for JacobianDeterminant
impl Sync for JacobianDeterminant
impl Unpin for JacobianDeterminant
impl UnwindSafe for JacobianDeterminant
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§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