mdarray_linalg/qr.rs
1//! QR decomposition
2//!```rust, ignore
3//!use mdarray_linalg_backend::Backend; // Use the real backend here, Lapack, Faer, ...
4//!let bd = Backend::default();
5//!
6//!let a = darray![[2.0_f64, 1.0, 0.0], [1.0, 3.0, 1.0], [0.0, 1.0, 2.0]];
7//!
8//!let (q,r) = bd.qr(&mut a.clone()); // A = QR
9//!
10//!```
11use mdarray::{Array, Dim, Layout, Slice};
12
13/// QR decomposition for orthogonal-triangular factorization
14pub trait QR<T, D0: Dim, D1: Dim> {
15 /// Compute QR decomposition overwriting existing matrices
16 fn qr_write<D2: Dim, L: Layout, Lq: Layout, Lr: Layout>(
17 &self,
18 a: &mut Slice<T, (D0, D1), L>,
19 q: &mut Slice<T, (D0, D2), Lq>,
20 r: &mut Slice<T, (D2, D1), Lr>,
21 );
22
23 /// Compute QR decomposition with new allocated matrices
24 fn qr<L: Layout>(
25 &self,
26 a: &mut Slice<T, (D0, D1), L>,
27 ) -> (Array<T, (D0, usize)>, Array<T, (usize, D1)>);
28}