diff --git a/examples/solve.rs b/examples/solve.rs new file mode 100644 index 00000000..2bcba2d8 --- /dev/null +++ b/examples/solve.rs @@ -0,0 +1,21 @@ + +extern crate ndarray; +extern crate ndarray_linalg; + +use ndarray::*; +use ndarray_linalg::*; + +// Solve `Ax=b` for many b with fixed A +fn factorize() -> Result<(), error::LinalgError> { + let a: Array2 = random((3, 3)); + let f = a.factorize_into()?; // LU factorize A (A is consumed) + for _ in 0..10 { + let b: Array1 = random(3); + let x = f.solve(Transpose::No, b)?; // solve Ax=b using factorized L, U + } + Ok(()) +} + +fn main() { + factorize().unwrap(); +} diff --git a/src/solve.rs b/src/solve.rs index f6cd3ef5..52919b63 100644 --- a/src/solve.rs +++ b/src/solve.rs @@ -75,14 +75,13 @@ where } } -impl Factorize for ArrayBase +impl Factorize> for ArrayBase where A: Scalar, Si: Data, - So: DataOwned + DataMut, { - fn factorize(&self) -> Result> { - let mut a: ArrayBase = replicate(self); + fn factorize(&self) -> Result>> { + let mut a: Array2 = replicate(self); let ipiv = unsafe { A::lu(a.layout()?, a.as_allocated_mut()?)? }; Ok(Factorized { a: a, ipiv: ipiv }) }