pub struct DualNumber<T>where
T: Float,{
pub real: T,
pub dual: T,
}Expand description
A dual number: a + bε where ε² = 0
The real part stores the function value, the dual part stores the derivative.
Fields§
§real: TReal part (function value)
dual: TDual part (derivative with respect to input variable)
Implementations§
Source§impl<T> DualNumber<T>where
T: Float,
impl<T> DualNumber<T>where
T: Float,
Sourcepub fn new(real: T, dual: T) -> DualNumber<T>
pub fn new(real: T, dual: T) -> DualNumber<T>
Create a new dual number
Sourcepub fn variable(value: T) -> DualNumber<T>
pub fn variable(value: T) -> DualNumber<T>
Create a variable (derivative = 1)
Sourcepub fn new_variable(value: T) -> DualNumber<T>
pub fn new_variable(value: T) -> DualNumber<T>
Create a variable (derivative = 1) - alias for consistency
Sourcepub fn constant(value: T) -> DualNumber<T>
pub fn constant(value: T) -> DualNumber<T>
Create a constant (derivative = 0)
Sourcepub fn derivative(&self) -> T
pub fn derivative(&self) -> T
Get the derivative (dual part)
Sourcepub fn apply_with_derivative<F, G>(&self, f: F, df: G) -> DualNumber<T>
pub fn apply_with_derivative<F, G>(&self, f: F, df: G) -> DualNumber<T>
Apply a function with known derivative
Sourcepub fn sin(self) -> DualNumber<T>
pub fn sin(self) -> DualNumber<T>
Sine function
Sourcepub fn cos(self) -> DualNumber<T>
pub fn cos(self) -> DualNumber<T>
Cosine function
Sourcepub fn exp(self) -> DualNumber<T>
pub fn exp(self) -> DualNumber<T>
Exponential function
Sourcepub fn ln(self) -> DualNumber<T>
pub fn ln(self) -> DualNumber<T>
Natural logarithm
Sourcepub fn powf(self, n: T) -> DualNumber<T>
pub fn powf(self, n: T) -> DualNumber<T>
Power function
Sourcepub fn sqrt(self) -> DualNumber<T>
pub fn sqrt(self) -> DualNumber<T>
Square root
Sourcepub fn tanh(self) -> DualNumber<T>
pub fn tanh(self) -> DualNumber<T>
Hyperbolic tangent
Sourcepub fn relu(self) -> DualNumber<T>
pub fn relu(self) -> DualNumber<T>
ReLU activation function
Sourcepub fn sigmoid(self) -> DualNumber<T>
pub fn sigmoid(self) -> DualNumber<T>
Sigmoid activation function
Sourcepub fn softplus(self) -> DualNumber<T>
pub fn softplus(self) -> DualNumber<T>
Softplus activation function
Sourcepub fn max(self, other: DualNumber<T>) -> DualNumber<T>
pub fn max(self, other: DualNumber<T>) -> DualNumber<T>
Maximum of two dual numbers
Sourcepub fn min(self, other: DualNumber<T>) -> DualNumber<T>
pub fn min(self, other: DualNumber<T>) -> DualNumber<T>
Minimum of two dual numbers
Sourcepub fn tan(self) -> DualNumber<T>
pub fn tan(self) -> DualNumber<T>
Tangent function
Sourcepub fn sinh(self) -> DualNumber<T>
pub fn sinh(self) -> DualNumber<T>
Hyperbolic sine
Sourcepub fn cosh(self) -> DualNumber<T>
pub fn cosh(self) -> DualNumber<T>
Hyperbolic cosine
Sourcepub fn powi(self, n: i32) -> DualNumber<T>
pub fn powi(self, n: i32) -> DualNumber<T>
Integer power
Source§impl DualNumber<f32>
impl DualNumber<f32>
Sourcepub const ZERO: DualNumber<f32>
pub const ZERO: DualNumber<f32>
Zero dual number (0 + 0ε)
Sourcepub const ONE: DualNumber<f32>
pub const ONE: DualNumber<f32>
One dual number (1 + 0ε)
Sourcepub const fn new_variable_const(value: f32) -> DualNumber<f32>
pub const fn new_variable_const(value: f32) -> DualNumber<f32>
Variable dual number (value + 1ε) - useful for GPU operations
Sourcepub const fn new_constant_const(value: f32) -> DualNumber<f32>
pub const fn new_constant_const(value: f32) -> DualNumber<f32>
Constant dual number (value + 0ε) - useful for GPU operations
Trait Implementations§
Source§impl<T> Add<T> for DualNumber<T>where
T: Float,
impl<T> Add<T> for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
+ operator.Source§fn add(self, scalar: T) -> DualNumber<T>
fn add(self, scalar: T) -> DualNumber<T>
+ operation. Read moreSource§impl<T> Add for DualNumber<T>where
T: Float,
impl<T> Add for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
+ operator.Source§fn add(self, other: DualNumber<T>) -> DualNumber<T>
fn add(self, other: DualNumber<T>) -> DualNumber<T>
+ operation. Read moreSource§impl<T> Clone for DualNumber<T>
impl<T> Clone for DualNumber<T>
Source§fn clone(&self) -> DualNumber<T>
fn clone(&self) -> DualNumber<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T> Debug for DualNumber<T>
impl<T> Debug for DualNumber<T>
Source§impl<T> Div<T> for DualNumber<T>where
T: Float,
impl<T> Div<T> for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
/ operator.Source§fn div(self, scalar: T) -> DualNumber<T>
fn div(self, scalar: T) -> DualNumber<T>
/ operation. Read moreSource§impl<T> Div for DualNumber<T>where
T: Float,
impl<T> Div for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
/ operator.Source§fn div(self, other: DualNumber<T>) -> DualNumber<T>
fn div(self, other: DualNumber<T>) -> DualNumber<T>
/ operation. Read moreSource§impl<T, const P: usize, const Q: usize, const R: usize> Mul<DualNumber<T>> for DualMultivector<T, P, Q, R>where
T: Float,
impl<T, const P: usize, const Q: usize, const R: usize> Mul<DualNumber<T>> for DualMultivector<T, P, Q, R>where
T: Float,
Source§type Output = DualMultivector<T, P, Q, R>
type Output = DualMultivector<T, P, Q, R>
* operator.Source§fn mul(self, scalar: DualNumber<T>) -> DualMultivector<T, P, Q, R>
fn mul(self, scalar: DualNumber<T>) -> DualMultivector<T, P, Q, R>
* operation. Read moreSource§impl<T> Mul<T> for DualNumber<T>where
T: Float,
impl<T> Mul<T> for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
* operator.Source§fn mul(self, scalar: T) -> DualNumber<T>
fn mul(self, scalar: T) -> DualNumber<T>
* operation. Read moreSource§impl<T> Mul for DualNumber<T>where
T: Float,
impl<T> Mul for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
* operator.Source§fn mul(self, other: DualNumber<T>) -> DualNumber<T>
fn mul(self, other: DualNumber<T>) -> DualNumber<T>
* operation. Read moreSource§impl<T> Neg for DualNumber<T>where
T: Float,
impl<T> Neg for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
- operator.Source§fn neg(self) -> DualNumber<T>
fn neg(self) -> DualNumber<T>
- operation. Read moreSource§impl<T> One for DualNumber<T>where
T: Float,
impl<T> One for DualNumber<T>where
T: Float,
Source§fn one() -> DualNumber<T>
fn one() -> DualNumber<T>
Source§impl<T> PartialEq for DualNumber<T>
impl<T> PartialEq for DualNumber<T>
Source§impl<T> Sub<T> for DualNumber<T>where
T: Float,
impl<T> Sub<T> for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
- operator.Source§fn sub(self, scalar: T) -> DualNumber<T>
fn sub(self, scalar: T) -> DualNumber<T>
- operation. Read moreSource§impl<T> Sub for DualNumber<T>where
T: Float,
impl<T> Sub for DualNumber<T>where
T: Float,
Source§type Output = DualNumber<T>
type Output = DualNumber<T>
- operator.Source§fn sub(self, other: DualNumber<T>) -> DualNumber<T>
fn sub(self, other: DualNumber<T>) -> DualNumber<T>
- operation. Read moreSource§impl<T> Zero for DualNumber<T>where
T: Float,
impl<T> Zero for DualNumber<T>where
T: Float,
impl<T> Copy for DualNumber<T>
impl<T> StructuralPartialEq for DualNumber<T>where
T: Float,
Auto Trait Implementations§
impl<T> Freeze for DualNumber<T>where
T: Freeze,
impl<T> RefUnwindSafe for DualNumber<T>where
T: RefUnwindSafe,
impl<T> Send for DualNumber<T>where
T: Send,
impl<T> Sync for DualNumber<T>where
T: Sync,
impl<T> Unpin for DualNumber<T>where
T: Unpin,
impl<T> UnwindSafe for DualNumber<T>where
T: UnwindSafe,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.