25 lines
598 B
Text
25 lines
598 B
Text
let sma (n, s, q) x =
|
|
let l = Queue.length q and s = s +. x in
|
|
Queue.push x q;
|
|
if l < n then
|
|
(n, s, q), s /. float (l + 1)
|
|
else (
|
|
let s = s -. Queue.pop q in
|
|
(n, s, q), s /. float l
|
|
)
|
|
|
|
let _ =
|
|
let periodLst = [ 3; 5 ] in
|
|
let series = [ 1.; 2.; 3.; 4.; 5.; 5.; 4.; 3.; 2.; 1. ] in
|
|
|
|
List.iter (fun d ->
|
|
Printf.printf "SIMPLE MOVING AVERAGE: PERIOD = %d\n" d;
|
|
ignore (
|
|
List.fold_left (fun o x ->
|
|
let o, m = sma o x in
|
|
Printf.printf "Next number = %-2g, SMA = %g\n" x m;
|
|
o
|
|
) (d, 0., Queue.create ()) series;
|
|
);
|
|
print_newline ();
|
|
) periodLst
|