pub struct Dual2<T: DualNum<F>, F> {
pub re: T,
pub v1: T,
pub v2: T,
/* private fields */
}
Expand description
A scalar second order dual number for the calculation of second derivatives.
Fields§
§re: T
Real part of the second order dual number
v1: T
First derivative part of the second order dual number
v2: T
Second derivative part of the second order dual number
Implementations§
source§impl<T: DualNum<F>, F> Dual2<T, F>
impl<T: DualNum<F>, F> Dual2<T, F>
sourcepub fn derivative(self) -> Self
pub fn derivative(self) -> Self
Set the derivative part to 1.
let x = Dual2::from_re(5.0).derivative().powi(2);
assert_eq!(x.re, 25.0); // x²
assert_eq!(x.v1, 10.0); // 2x
assert_eq!(x.v2, 2.0); // 2
Can also be used for higher order derivatives.
let x = Dual2::from_re(Dual64::from_re(5.0).derivative())
.derivative()
.powi(2);
assert_eq!(x.re.re, 25.0); // x²
assert_eq!(x.re.eps, 10.0); // 2x
assert_eq!(x.v1.re, 10.0); // 2x
assert_eq!(x.v1.eps, 2.0); // 2
assert_eq!(x.v2.re, 2.0); // 2
Trait Implementations§
source§impl<T: DualNum<F>, F> AddAssign<F> for Dual2<T, F>
impl<T: DualNum<F>, F> AddAssign<F> for Dual2<T, F>
source§fn add_assign(&mut self, other: F)
fn add_assign(&mut self, other: F)
Performs the
+=
operation. Read moresource§impl<T: DualNum<F>, F> AddAssign for Dual2<T, F>
impl<T: DualNum<F>, F> AddAssign for Dual2<T, F>
source§fn add_assign(&mut self, other: Self)
fn add_assign(&mut self, other: Self)
Performs the
+=
operation. Read moresource§impl<T: DualNum<F>, F: DualNumFloat> DivAssign<F> for Dual2<T, F>
impl<T: DualNum<F>, F: DualNumFloat> DivAssign<F> for Dual2<T, F>
source§fn div_assign(&mut self, other: F)
fn div_assign(&mut self, other: F)
Performs the
/=
operation. Read moresource§impl<T: DualNum<F>, F: Float> DivAssign for Dual2<T, F>
impl<T: DualNum<F>, F: Float> DivAssign for Dual2<T, F>
source§fn div_assign(&mut self, other: Self)
fn div_assign(&mut self, other: Self)
Performs the
/=
operation. Read moresource§impl<T: DualNum<F>, F: DualNumFloat> DualNum<F> for Dual2<T, F>
impl<T: DualNum<F>, F: DualNumFloat> DualNum<F> for Dual2<T, F>
source§fn sin_cos(&self) -> (Self, Self)
fn sin_cos(&self) -> (Self, Self)
Calculate sine and cosine simultaneously
source§impl<T: DualNum<F>, F: Float + FloatConst> FloatConst for Dual2<T, F>
impl<T: DualNum<F>, F: Float + FloatConst> FloatConst for Dual2<T, F>
source§fn FRAC_1_SQRT_2() -> Self
fn FRAC_1_SQRT_2() -> Self
Return
1.0 / sqrt(2.0)
.source§fn FRAC_2_SQRT_PI() -> Self
fn FRAC_2_SQRT_PI() -> Self
Return
2.0 / sqrt(π)
.source§impl<T: DualNum<F>, F: Float + FromPrimitive> FromPrimitive for Dual2<T, F>
impl<T: DualNum<F>, F: Float + FromPrimitive> FromPrimitive for Dual2<T, F>
source§fn from_isize(n: isize) -> Option<Self>
fn from_isize(n: isize) -> Option<Self>
Converts an
isize
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_i8(n: i8) -> Option<Self>
fn from_i8(n: i8) -> Option<Self>
Converts an
i8
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_i16(n: i16) -> Option<Self>
fn from_i16(n: i16) -> Option<Self>
Converts an
i16
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_i32(n: i32) -> Option<Self>
fn from_i32(n: i32) -> Option<Self>
Converts an
i32
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_i64(n: i64) -> Option<Self>
fn from_i64(n: i64) -> Option<Self>
Converts an
i64
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_i128(n: i128) -> Option<Self>
fn from_i128(n: i128) -> Option<Self>
Converts an
i128
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned. Read moresource§fn from_usize(n: usize) -> Option<Self>
fn from_usize(n: usize) -> Option<Self>
Converts a
usize
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_u8(n: u8) -> Option<Self>
fn from_u8(n: u8) -> Option<Self>
Converts an
u8
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_u16(n: u16) -> Option<Self>
fn from_u16(n: u16) -> Option<Self>
Converts an
u16
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_u32(n: u32) -> Option<Self>
fn from_u32(n: u32) -> Option<Self>
Converts an
u32
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_u64(n: u64) -> Option<Self>
fn from_u64(n: u64) -> Option<Self>
Converts an
u64
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.source§fn from_u128(n: u128) -> Option<Self>
fn from_u128(n: u128) -> Option<Self>
Converts an
u128
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned. Read moresource§impl<T: DualNum<F>, F: DualNumFloat> MulAssign<F> for Dual2<T, F>
impl<T: DualNum<F>, F: DualNumFloat> MulAssign<F> for Dual2<T, F>
source§fn mul_assign(&mut self, other: F)
fn mul_assign(&mut self, other: F)
Performs the
*=
operation. Read moresource§impl<T: DualNum<F>, F: Float> MulAssign for Dual2<T, F>
impl<T: DualNum<F>, F: Float> MulAssign for Dual2<T, F>
source§fn mul_assign(&mut self, other: Self)
fn mul_assign(&mut self, other: Self)
Performs the
*=
operation. Read moresource§impl<T: DualNum<F> + Signed, F: Float> Num for Dual2<T, F>
impl<T: DualNum<F> + Signed, F: Float> Num for Dual2<T, F>
type FromStrRadixErr = <F as Num>::FromStrRadixErr
source§fn from_str_radix(
_str: &str,
_radix: u32
) -> Result<Self, Self::FromStrRadixErr>
fn from_str_radix( _str: &str, _radix: u32 ) -> Result<Self, Self::FromStrRadixErr>
Convert from a string and radix (typically
2..=36
). Read moresource§impl<T: PartialEq + DualNum<F>, F: PartialEq> PartialEq for Dual2<T, F>
impl<T: PartialEq + DualNum<F>, F: PartialEq> PartialEq for Dual2<T, F>
source§impl<T: DualNum<F>, F> RemAssign<F> for Dual2<T, F>
impl<T: DualNum<F>, F> RemAssign<F> for Dual2<T, F>
source§fn rem_assign(&mut self, _other: F)
fn rem_assign(&mut self, _other: F)
Performs the
%=
operation. Read moresource§impl<T: DualNum<F>, F> RemAssign for Dual2<T, F>
impl<T: DualNum<F>, F> RemAssign for Dual2<T, F>
source§fn rem_assign(&mut self, _other: Self)
fn rem_assign(&mut self, _other: Self)
Performs the
%=
operation. Read moresource§impl<T: DualNum<F>, F: DualNumFloat> Signed for Dual2<T, F>
impl<T: DualNum<F>, F: DualNumFloat> Signed for Dual2<T, F>
source§fn is_positive(&self) -> bool
fn is_positive(&self) -> bool
Returns true if the number is positive and false if the number is zero or negative.
source§fn is_negative(&self) -> bool
fn is_negative(&self) -> bool
Returns true if the number is negative and false if the number is zero or positive.
source§impl<T: DualNum<F>, F> SubAssign<F> for Dual2<T, F>
impl<T: DualNum<F>, F> SubAssign<F> for Dual2<T, F>
source§fn sub_assign(&mut self, other: F)
fn sub_assign(&mut self, other: F)
Performs the
-=
operation. Read moresource§impl<T: DualNum<F>, F> SubAssign for Dual2<T, F>
impl<T: DualNum<F>, F> SubAssign for Dual2<T, F>
source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
Performs the
-=
operation. Read moreimpl<T: Copy + DualNum<F>, F: Copy> Copy for Dual2<T, F>
impl<T: Eq + DualNum<F>, F: Eq> Eq for Dual2<T, F>
impl<T: DualNum<F>, F> StructuralPartialEq for Dual2<T, F>
Auto Trait Implementations§
impl<T, F> Freeze for Dual2<T, F>where
T: Freeze,
impl<T, F> RefUnwindSafe for Dual2<T, F>where
T: RefUnwindSafe,
F: RefUnwindSafe,
impl<T, F> Send for Dual2<T, F>
impl<T, F> Sync for Dual2<T, F>
impl<T, F> Unpin for Dual2<T, F>
impl<T, F> UnwindSafe for Dual2<T, F>where
T: UnwindSafe,
F: UnwindSafe,
Blanket Implementations§
source§impl<T> BesselDual for T
impl<T> BesselDual for T
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<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>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read moresource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
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
Use with care! Same as
self.to_subset
but without any property checks. Always succeeds.source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.