rust_linear_algebra/vector/
linear_combinaison.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use crate::vector::Vector;
use std::ops::{Add, Mul};

pub fn linear_combination<K>(u: &[Vector<K>], coefs: &[K]) -> Vector<K>
where
    K: Copy + Default + Add<Output = K> + Mul<Output = K>,
{
    if u.len() != coefs.len() {
        panic!("Need the same size");
    }

    let mut result = Vector {
        elements: vec![K::default(); u[0].elements.len()],
    };

    for (vector, &coef) in u.iter().zip(coefs) {
        for (res_elem, &vec_elem) in result.iter_mut().zip(&vector.elements) {
            *res_elem = *res_elem + vec_elem * coef;
        }
    }

    result
}