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
fn solve_recursive_inplace<'a>(
&self,
lu: &LUFactorized<OwnedRepr<f64>>,
b: &'a mut Array1<D>
) -> Result<&'a mut Array1<D>>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.
fn solve_into(&self, b: Array1<D>) -> Result<Array1<D>>
fn solve_into(&self, b: Array1<D>) -> Result<Array1<D>>Solves a system of linear equations A * x = b where A is self, b
is the argument, and x is the successful result.
fn solve_inplace<'a>(&self, b: &'a mut Array1<D>) -> Result<&'a mut Array1<D>>
fn solve_inplace<'a>(&self, b: &'a mut Array1<D>) -> Result<&'a mut Array1<D>>Solves a system of linear equations A * x = b where A is self, b
is the argument, and x is the successful result.
fn solve_recursive_into(
&self,
lu: &LUFactorized<OwnedRepr<f64>>,
b: Array1<D>
) -> Result<Array1<D>>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);
fn solve_recursive_inplace<'a>(
&self,
lu: &LUFactorized<OwnedRepr<f64>>,
b: &'a mut Array1<f64>
) -> Result<&'a mut Array1<f64>>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);