use crate::core::math::Scalar;
pub(crate) fn build_g<F: Scalar>(fval: &[F], simi: &[F], n: usize) -> Vec<F> {
let fn_pole = fval[n];
(0..n)
.map(|l| {
(0..n)
.map(|i| (fval[i] - fn_pole) * simi[i + l * n])
.sum::<F>()
})
.collect()
}
pub(crate) fn build_a<F: Scalar>(conmat: &[F], simi: &[F], n: usize, m: usize) -> Vec<F> {
let mut a = vec![F::zero(); n * m];
for i in 0..m {
let pole = conmat[i + n * m];
for l in 0..n {
let mut s = F::zero();
for j in 0..n {
s = s + (conmat[i + j * m] - pole) * simi[j + l * n];
}
a[l + i * n] = s;
}
}
a
}