libdrugplotter 0.1.3

Easily compute drug concentration curves
Documentation
fn get_peak(ka: f64, ke: f64) -> f64 {
    (ka / ke).ln() / (ka - ke)
}
 
fn der_peak(ka: f64, ke: f64) -> f64 {
    ((ka * (ka / ke).ln()) + ke - ka) / (ka * (ka - ke) * (ka - ke))
} 

pub fn get_ka(ke: f64, dela: f64) -> f64 {
    let mut ka = 1f64;
    let mut loss = 1f64;

    while loss.abs() > 0.01 {
        loss = dela - get_peak(ka, ke);    
        ka -= loss / der_peak(ka, ke);
    }

    ka
}

pub fn get_sample(p: f64, ke: f64, ka: f64, t: f64) -> f64 {
    p * ((-1f64 * ke * t).exp() - (-1f64 * ka * t).exp())
}

pub fn linspace(stop: usize, count: usize) -> Vec<f64> {
    let dx = stop as f64 / (count - 1) as f64;
    (0..count).map(|i| (i as f64) * dx).collect()
}