Skip to main content

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}