Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,33 @@
|
|||
oo::class create SDAccum {
|
||||
variable sum sum2 num
|
||||
constructor {} {
|
||||
set sum 0.0
|
||||
set sum2 0.0
|
||||
set num 0
|
||||
}
|
||||
method value {x} {
|
||||
set sum2 [expr {$sum2 + $x**2}]
|
||||
set sum [expr {$sum + $x}]
|
||||
incr num
|
||||
return [my stddev]
|
||||
}
|
||||
method count {} {
|
||||
return $num
|
||||
}
|
||||
method mean {} {
|
||||
expr {$sum / $num}
|
||||
}
|
||||
method variance {} {
|
||||
expr {$sum2/$num - [my mean]**2}
|
||||
}
|
||||
method stddev {} {
|
||||
expr {sqrt([my variance])}
|
||||
}
|
||||
}
|
||||
|
||||
# Demonstration
|
||||
set sdacc [SDAccum new]
|
||||
foreach val {2 4 4 4 5 5 7 9} {
|
||||
set sd [$sdacc value $val]
|
||||
}
|
||||
puts "the standard deviation is: $sd"
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Make a coroutine out of a lambda application
|
||||
coroutine sd apply {{} {
|
||||
set sum 0.0
|
||||
set sum2 0.0
|
||||
set sd {}
|
||||
# Keep processing argument values until told not to...
|
||||
while {[set val [yield $sd]] ne "stop"} {
|
||||
incr n
|
||||
set sum [expr {$sum + $val}]
|
||||
set sum2 [expr {$sum2 + $val**2}]
|
||||
set sd [expr {sqrt($sum2/$n - ($sum/$n)**2)}]
|
||||
}
|
||||
}}
|
||||
|
||||
# Demonstration
|
||||
foreach val {2 4 4 4 5 5 7 9} {
|
||||
set sd [sd $val]
|
||||
}
|
||||
sd stop
|
||||
puts "the standard deviation is: $sd"
|
||||
Loading…
Add table
Add a link
Reference in a new issue