Trait num_dual::EighDual[][src]

pub trait EighDual<A> {
    fn eigh(&self, uplo: UPLO) -> Result<(Array1<A>, Array2<A>)>;
}

Required methods

Implementations on Foreign Types

Caculates the eigenvalues and eigenvectors of a symmetric matrix

let a = arr2(&[[Dual64::new_scalar(2.0, 1.0), Dual64::new_scalar(2.0, 2.0)],
               [Dual64::new_scalar(2.0, 2.0), Dual64::new_scalar(5.0, 3.0)]]);
let (l, v) = a.eigh(UPLO::Upper).unwrap();
let av = a.dot(&v);
assert_abs_diff_eq!(av[(0,0)].re, (l[0]*v[(0,0)]).re, epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,0)].re, (l[0]*v[(1,0)]).re, epsilon = 1e-14);
assert_abs_diff_eq!(av[(0,1)].re, (l[1]*v[(0,1)]).re, epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,1)].re, (l[1]*v[(1,1)]).re, epsilon = 1e-14);
assert_abs_diff_eq!(av[(0,0)].eps[0], (l[0]*v[(0,0)]).eps[0], epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,0)].eps[0], (l[0]*v[(1,0)]).eps[0], epsilon = 1e-14);
assert_abs_diff_eq!(av[(0,1)].eps[0], (l[1]*v[(0,1)]).eps[0], epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,1)].eps[0], (l[1]*v[(1,1)]).eps[0], epsilon = 1e-14);

Caculates the eigenvalues and eigenvectors of a symmetric matrix

let a = arr2(&[[DualVec64::new(2.0, StaticVec::new_vec([1.0, 1.0])), DualVec64::new(2.0, StaticVec::new_vec([2.0, 1.0]))],
               [DualVec64::new(2.0, StaticVec::new_vec([2.0, 1.0])), DualVec64::new(5.0, StaticVec::new_vec([3.0, 1.0]))]]);
let (l, v) = a.eigh(UPLO::Upper).unwrap();
let av = a.dot(&v);
assert_abs_diff_eq!(av[(0,0)].re, (l[0]*v[(0,0)]).re, epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,0)].re, (l[0]*v[(1,0)]).re, epsilon = 1e-14);
assert_abs_diff_eq!(av[(0,1)].re, (l[1]*v[(0,1)]).re, epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,1)].re, (l[1]*v[(1,1)]).re, epsilon = 1e-14);
assert_abs_diff_eq!(av[(0,0)].eps[0], (l[0]*v[(0,0)]).eps[0], epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,0)].eps[0], (l[0]*v[(1,0)]).eps[0], epsilon = 1e-14);
assert_abs_diff_eq!(av[(0,1)].eps[0], (l[1]*v[(0,1)]).eps[0], epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,1)].eps[0], (l[1]*v[(1,1)]).eps[0], epsilon = 1e-14);
assert_abs_diff_eq!(av[(0,0)].eps[1], (l[0]*v[(0,0)]).eps[1], epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,0)].eps[1], (l[0]*v[(1,0)]).eps[1], epsilon = 1e-14);
assert_abs_diff_eq!(av[(0,1)].eps[1], (l[1]*v[(0,1)]).eps[1], epsilon = 1e-14);
assert_abs_diff_eq!(av[(1,1)].eps[1], (l[1]*v[(1,1)]).eps[1], epsilon = 1e-14);

Implementors