qrsol

Function qrsol 

Source
pub fn qrsol<T: Numeric<T>>(a: &Sprs<T>, b: &mut [T], order: i8)
Expand description

A\b solver using QR factorization.

x=A\b where A can be rectangular; b overwritten with solution

§Parameters:

Input, i8 ORDER:

  • -1:natural,
  • 0:Cholesky,
  • 1:LU,
  • 2:QR

§Example:

// Arbitrary A matrix (dense)
let a = [
    vec![8.2541e-01, 9.5622e-01, 4.6698e-01, 8.4410e-03, 6.3193e-01, 7.5741e-01, 5.3584e-01, 3.9448e-01],
    vec![7.4808e-01, 2.0403e-01, 9.4649e-01, 2.5086e-01, 2.6931e-01, 5.5866e-01, 3.1827e-01, 2.9819e-02],
    vec![6.3980e-01, 9.1615e-01, 8.5515e-01, 9.5323e-01, 7.8323e-01, 8.6003e-01, 7.5761e-01, 8.9255e-01],
    vec![1.8726e-01, 8.9339e-01, 9.9796e-01, 5.0506e-01, 6.1439e-01, 4.3617e-01, 7.3369e-01, 1.5565e-01],
    vec![2.8015e-02, 6.3404e-01, 8.4771e-01, 8.6419e-01, 2.7555e-01, 3.5909e-01, 7.6644e-01, 8.9905e-02],
    vec![9.1817e-01, 8.6629e-01, 5.9917e-01, 1.9346e-01, 2.1960e-01, 1.8676e-01, 8.7020e-01, 2.7891e-01],
    vec![3.1999e-01, 5.9988e-01, 8.7402e-01, 5.5710e-01, 2.4707e-01, 7.5652e-01, 8.3682e-01, 6.3145e-01],
    vec![9.3807e-01, 7.5985e-02, 7.8758e-01, 3.6881e-01, 4.4553e-01, 5.5005e-02, 3.3908e-01, 3.4573e-01],
];

// Convert A to sparse
let mut a_sparse = rsparse::data::Sprs::new();
a_sparse.from_vec(&a);

// Generate arbitrary b vector
let mut b = [
    0.4377,
    0.7328,
    0.1227,
    0.1817,
    0.2634,
    0.6876,
    0.8711,
    0.4201
];

// A*x=b -> solve for x -> place x in b
rsparse::qrsol(&a_sparse, &mut b, 2);
println!("\nX");
println!("{:?}", &b);