summaryrefslogtreecommitdiff
path: root/src/maxmin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/maxmin.rs')
-rw-r--r--src/maxmin.rs58
1 files changed, 50 insertions, 8 deletions
diff --git a/src/maxmin.rs b/src/maxmin.rs
index 6bea2d7..df4a0f5 100644
--- a/src/maxmin.rs
+++ b/src/maxmin.rs
@@ -1,6 +1,16 @@
use std::cmp::Ordering;
-pub fn normalize(data: &mut Vec<f64>) {
+pub fn clamp(data: &mut [f64], lower: f64, upper: f64) {
+ if data.is_empty() {
+ return;
+ }
+
+ for x in data.iter_mut() {
+ *x = f64::min(upper, f64::max(lower, *x));
+ }
+}
+
+pub fn normalize(data: &mut [f64]) {
if data.is_empty() {
return;
}
@@ -18,8 +28,8 @@ pub fn normalize(data: &mut Vec<f64>) {
}
}
-pub fn smooth(data: &mut Vec<f64>, sigma: f64) {
- const WINDOW_SIZE: usize = 7;
+pub fn smooth(data: &mut [f64], sigma: f64) {
+ const WINDOW_SIZE: usize = 5;
if data.is_empty() {
return;
@@ -40,7 +50,7 @@ pub fn smooth(data: &mut Vec<f64>, sigma: f64) {
// Smooth data
let first = data.first().unwrap();
- let mut buffer = [*first; WINDOW_SIZE];
+ let mut buffer = [f64::NAN; WINDOW_SIZE];
let mut bi = 0;
for (_loc, x) in data.iter_mut().enumerate() {
buffer[bi] = *x;
@@ -52,8 +62,8 @@ pub fn smooth(data: &mut Vec<f64>, sigma: f64) {
}
}
-pub fn derive(data: &mut Vec<f64>) {
- const WINDOW_SIZE: usize = 3;
+pub fn derive(data: &mut [f64]) {
+ const WINDOW_SIZE: usize = 5;
if data.is_empty() {
return;
@@ -61,12 +71,12 @@ pub fn derive(data: &mut Vec<f64>) {
// Calculate the derivative.
let first = data.first().unwrap();
- let mut buffer = [*first; WINDOW_SIZE];
+ let mut buffer = [f64::NAN; WINDOW_SIZE];
let mut bi = 0;
for (_loc, x) in data.iter_mut().enumerate() {
buffer[bi] = *x;
*x = (buffer[bi] - buffer[(bi + WINDOW_SIZE - 1) % (WINDOW_SIZE)])
- / (WINDOW_SIZE as f64 - 1.0);
+ / (WINDOW_SIZE as f64);
bi = (bi + 1) % WINDOW_SIZE;
}
}
@@ -142,4 +152,36 @@ mod tests {
assert!((0.667 - x[2]).abs() < 0.001);
assert!((1.0 - x[3]).abs() < 0.001);
}
+
+
+ #[test]
+ fn first_run() {
+
+
+ // let mut values = [37200000.0, 13323636.0, 10937.16, 12403.11, 12771.62, 12771.62, 13511.11, 13140.96];
+ let mut values = [13323636.0, 10937.16, 12403.11, 12771.62, 12771.62, 13511.11, 13140.96];
+ for (i, x) in values.iter().enumerate() {
+ println!("original: {} => {:?}", i, x);
+ }
+ super::normalize(&mut values);
+ for (i, x) in values.iter().enumerate() {
+ println!("normalize: {} => {:?}", i, x);
+ }
+ // super::smooth(&mut values, 1.0);
+ // for (i, x) in values.iter().enumerate() {
+ // println!("smooth: {} => {:?}", i, x);
+ // }
+ super::derive(&mut values);
+ for (i, x) in values.iter().enumerate() {
+ println!("derive: {} => {:?}", i, x);
+ }
+ let extrema = super::find_extrema(&values);
+
+
+ for x in extrema {
+ println!("{:?}", x);
+ }
+
+ assert!(false);
+ }
}