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 UnsafeUnpin for JacobianDeterminant
impl UnwindSafe for JacobianDeterminant
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