1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12

use std::f64::NAN;

pub fn pli_eq(x0: f64, dx: f64, y: Box<[f64]>) -> Box<Fn(f64)->f64> {
    return Box::new(move |x: f64| -> f64 {
        let k = ((x-x0)/dx) as usize;
        let y1 = match y.get(k) {Some(value)=>*value, None=>return NAN};
        let y2 = match y.get(k+1) {Some(value)=>*value, None=>return NAN};
        let m = (y2-y1)/dx;
        return m*(x-x0-(k as f64)*dx)+y1;
    });
}