derivative regenerative caching
This commit is contained in:
parent
fd72a1e351
commit
d21d752004
@ -132,7 +132,26 @@ impl Function {
|
|||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
);
|
);
|
||||||
self.derivative_cache = None; // TODO: setup this caching system for derivatives
|
|
||||||
|
if self.derivative_cache.is_some() {
|
||||||
|
let derivative_cache = self.derivative_cache.as_ref().unwrap();
|
||||||
|
|
||||||
|
self.derivative_cache = Some(
|
||||||
|
(0..=self.pixel_width)
|
||||||
|
.map(|x| (x as f64 / resolution as f64) + min_x)
|
||||||
|
.map(|x| {
|
||||||
|
if let Some(i) = x_data.get_index(x) {
|
||||||
|
derivative_cache[i]
|
||||||
|
} else {
|
||||||
|
let (x1, x2) = (x - EPSILON, x + EPSILON);
|
||||||
|
let (y1, y2) = (self.run_func(x1), self.run_func(x2));
|
||||||
|
let slope = (y2 - y1) / (EPSILON * 2.0);
|
||||||
|
Value::new(x, slope)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
self.back_cache = None;
|
self.back_cache = None;
|
||||||
self.derivative_cache = None;
|
self.derivative_cache = None;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user