statistics/commit

ADDED: list_standard_deviation/2.

authorJan Wielemaker
Tue Mar 8 12:14:48 2011 +0100
committerJan Wielemaker
Tue Mar 8 12:14:48 2011 +0100
commit3088640762470174a135c0b2788e31482a9cc022
tree6dd096b8caa684e5decb95c123edfa424620634b
parentcd6b8bea7989f3459d3d6f4998d038c2789405dd
Diff style: patch stat
diff --git a/lib/stat_lists.pl b/lib/stat_lists.pl
index 683a232..786e996 100644
--- a/lib/stat_lists.pl
+++ b/lib/stat_lists.pl
@@ -30,7 +30,8 @@
 
 :- module(stat_lists,
 	  [ list_mean/2,		% +List, -Mean
-	    list_variance/2		% +List, -Variance
+	    list_variance/2,		% +List, -Variance
+	    list_standard_deviation/2	% +List, -StDev
 	  ]).
 :- use_module(library(lists)).
 :- use_module(library(error)).
@@ -49,6 +50,9 @@ This library computes statistical properties of lists of numbers.
 %	@error domain_error(non_empty_list, List) if List is [].
 
 list_mean(List, Mean) :-
+	list_length_mean(List, _Len, Mean).
+
+list_length_mean(List, Len, Mean) :-
 	length(List, Len),
 	(   Len == 0
 	->  domain_error(non_empty_list, List)
@@ -70,3 +74,14 @@ variance([], _, V, V).
 variance([H|T], Mean, V0, V) :-
 	V1 is V0+(H-Mean)**2,
 	variance(T, Mean, V1, V).
+
+%%	list_standard_deviation(+List, -StDev:float) is det.
+%
+%	True if StDev is the standard deviation of List.
+%
+%	@error domain_error(non_empty_list, List) if List is [].
+
+list_standard_deviation(List, StDev) :-
+	list_length_mean(List, Len, Mean),
+	variance(List, Mean, 0, Variance),
+	StDev is sqrt(Variance/Len).