Trait num_dual::SolveDual[][src]

pub trait SolveDual<D: DualNum<f64>>: FactorizeIntoDual + Clone {
    fn solve_recursive_inplace<'a>(
        &self,
        lu: &LUFactorized<OwnedRepr<f64>>,
        b: &'a mut Array1<D>
    ) -> Result<&'a mut Array1<D>>; fn solve(&self, b: &Array1<D>) -> Result<Array1<D>> { ... }
fn solve_into(&self, b: Array1<D>) -> Result<Array1<D>> { ... }
fn solve_inplace<'a>(
        &self,
        b: &'a mut Array1<D>
    ) -> Result<&'a mut Array1<D>> { ... }
fn solve_recursive_into(
        &self,
        lu: &LUFactorized<OwnedRepr<f64>>,
        b: Array1<D>
    ) -> Result<Array1<D>> { ... } }

Required methods

Provided methods

Solves a system of linear equations A * x = b where A is self, b is the argument, and x is the successful result.

Solves a system of linear equations A * x = b where A is self, b is the argument, and x is the successful result.

Solves a system of linear equations A * x = b where A is self, b is the argument, and x is the successful result.

Implementations on Foreign Types

Solves a system of linear equations A * x = b where A is self, b is the argument, and x is the successful result.

let a = arr2(&[[1.0, 3.0],
               [5.0, 7.0]]);
let b = arr1(&[10.0, 26.0]);
let x = a.solve_into(b).unwrap();
assert_abs_diff_eq!(x[0], 1.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1], 3.0, epsilon = 1e-14);

Solves a system of linear equations A * x = b where A is self, b is the argument, and x is the successful result.

let a = arr2(&[[Dual64::new_scalar(1.0, 2.0), Dual64::new_scalar(3.0, 4.0)],
               [Dual64::new_scalar(5.0, 6.0), Dual64::new_scalar(7.0, 8.0)]]);
let b = arr1(&[Dual64::new_scalar(10.0, 28.0), Dual64::new_scalar(26.0, 68.0)]);
let x = a.solve_into(b).unwrap();
assert_abs_diff_eq!(x[0].re, 1.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].eps[0], 2.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].re, 3.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].eps[0], 4.0, epsilon = 1e-14);

Solves a system of linear equations A * x = b where A is self, b is the argument, and x is the successful result.

let a = arr2(&[[DualVec64::new(1.0, StaticVec::new_vec([2.0, 1.0])), DualVec64::new(3.0, StaticVec::new_vec([4.0, 1.0]))],
               [DualVec64::new(5.0, StaticVec::new_vec([6.0, 1.0])), DualVec64::new(7.0, StaticVec::new_vec([8.0, 1.0]))]]);
let b = arr1(&[DualVec64::new(10.0, StaticVec::new_vec([28.0, 18.0])), DualVec64::new(26.0, StaticVec::new_vec([68.0, 42.0]))]);
let x = a.solve_into(b).unwrap();
assert_abs_diff_eq!(x[0].re, 1.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].eps[0], 2.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].eps[1], 2.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].re, 3.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].eps[0], 4.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].eps[1], 4.0, epsilon = 1e-14);

Solves a system of linear equations A * x = b where A is self, b is the argument, and x is the successful result.

let a = arr2(&[[HyperDual64::new_scalar(1.0, 2.0, 3.0, 4.0), HyperDual64::new_scalar(2.0, 3.0, 4.0, 5.0)],
               [HyperDual64::new_scalar(3.0, 4.0, 5.0, 6.0), HyperDual64::new_scalar(4.0, 5.0, 6.0, 7.0)]]);
let b = arr1(&[HyperDual64::new_scalar(5.0, 16.0, 22.0, 64.0), HyperDual64::new_scalar(11.0, 32.0, 42.0, 112.0)]);
let x = a.solve_into(b).unwrap();
assert_abs_diff_eq!(x[0].re, 1.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].eps1[0], 2.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].eps2[0], 3.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].eps1eps2[(0,0)], 4.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].re, 2.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].eps1[0], 3.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].eps2[0], 4.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].eps1eps2[(0,0)], 5.0, epsilon = 1e-14);

Solves a system of linear equations A * x = b where A is self, b is the argument, and x is the successful result.

let a = arr2(&[[Dual3_64::new(1.0, 2.0, 3.0, 4.0), Dual3_64::new(2.0, 3.0, 4.0, 5.0)],
               [Dual3_64::new(3.0, 4.0, 5.0, 6.0), Dual3_64::new(4.0, 5.0, 6.0, 7.0)]]);
let b = arr1(&[Dual3_64::new(5.0, 16.0, 48.0, 136.0), Dual3_64::new(11.0, 32.0, 88.0, 232.0)]);
let x = a.solve_into(b).unwrap();
assert_abs_diff_eq!(x[0].re, 1.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].v1, 2.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].v2, 3.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[0].v3, 4.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].re, 2.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].v1, 3.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].v2, 4.0, epsilon = 1e-14);
assert_abs_diff_eq!(x[1].v3, 5.0, epsilon = 1e-14);

Implementors