Skip to content

Commit e785cdf

Browse files
committed
Add utility for solve: factorize and solve in one function
1 parent 50b796c commit e785cdf

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

examples/solve.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,26 @@ extern crate ndarray_linalg;
55
use ndarray::*;
66
use ndarray_linalg::*;
77

8+
// Solve `Ax=b`
9+
fn solve() -> Result<(), error::LinalgError> {
10+
let a: Array2<f64> = random((3, 3));
11+
let b: Array1<f64> = random(3);
12+
let _x = a.solve(&b)?;
13+
Ok(())
14+
}
15+
816
// Solve `Ax=b` for many b with fixed A
917
fn factorize() -> Result<(), error::LinalgError> {
1018
let a: Array2<f64> = random((3, 3));
1119
let f = a.factorize_into()?; // LU factorize A (A is consumed)
1220
for _ in 0..10 {
1321
let b: Array1<f64> = random(3);
14-
let _x = f.solve(&b)?; // solve Ax=b using factorized L, U
22+
let _x = f.solve_into(b)?; // solve Ax=b using factorized L, U
1523
}
1624
Ok(())
1725
}
1826

1927
fn main() {
28+
solve().unwrap();
2029
factorize().unwrap();
2130
}

src/solve.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,34 @@ where
101101
}
102102
}
103103

104+
impl<A, S> Solve<A> for ArrayBase<S, Ix2>
105+
where
106+
A: Scalar,
107+
S: Data<Elem = A>,
108+
{
109+
fn solve_mut<'a, Sb>(&self, mut rhs: &'a mut ArrayBase<Sb, Ix1>) -> Result<&'a mut ArrayBase<Sb, Ix1>>
110+
where
111+
Sb: DataMut<Elem = A>,
112+
{
113+
let f = self.factorize()?;
114+
f.solve_mut(rhs)
115+
}
116+
fn solve_t_mut<'a, Sb>(&self, mut rhs: &'a mut ArrayBase<Sb, Ix1>) -> Result<&'a mut ArrayBase<Sb, Ix1>>
117+
where
118+
Sb: DataMut<Elem = A>,
119+
{
120+
let f = self.factorize()?;
121+
f.solve_t_mut(rhs)
122+
}
123+
fn solve_h_mut<'a, Sb>(&self, mut rhs: &'a mut ArrayBase<Sb, Ix1>) -> Result<&'a mut ArrayBase<Sb, Ix1>>
124+
where
125+
Sb: DataMut<Elem = A>,
126+
{
127+
let f = self.factorize()?;
128+
f.solve_h_mut(rhs)
129+
}
130+
}
131+
104132
impl<A, S> Factorized<S>
105133
where
106134
A: Scalar,

0 commit comments

Comments
 (0)