Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
|
|
@ -0,0 +1,37 @@
|
|||
100 REM Cumulative standard deviation
|
||||
110 DECLARE EXTERNAL SUB Init
|
||||
120 DECLARE EXTERNAL SUB Add
|
||||
130 DECLARE EXTERNAL FUNCTION Deviation
|
||||
140 DIM TestData(1 TO 8)
|
||||
150 FOR I = 1 TO 8
|
||||
160 READ TestData(I)
|
||||
170 NEXT I
|
||||
180 DATA 2, 4, 4, 4, 5, 5, 7, 9
|
||||
190 CALL Init(N, Sum, SumOfSquares)
|
||||
200 PRINT "N ITEM AVG STDDEV"
|
||||
210 FOR I = LBOUND(TestData) TO UBOUND(TestData)
|
||||
220 CALL Add(N, Sum, SumOfSquares, TestData(I))
|
||||
230 PRINT USING "# ": I;
|
||||
240 PRINT USING " # ": TestData(I);
|
||||
250 PRINT USING "#.### ": Sum / I;
|
||||
260 PRINT USING " #.###": Deviation(N, Sum, SumOfSquares)
|
||||
270 NEXT I
|
||||
280 END
|
||||
290 !
|
||||
300 EXTERNAL SUB Init(N, Sum, SumOfSquares)
|
||||
310 REM The parameters N, Sum, SumOfSquares are passed by reference. So, the arguments must be variables.
|
||||
320 LET N = 0
|
||||
330 LET Sum = 0.0
|
||||
340 LET SumOfSquares = 0.0
|
||||
350 END SUB
|
||||
360 !
|
||||
370 EXTERNAL SUB Add(N, Sum, SumOfSquares, P)
|
||||
380 REM The parameters N, Sum, SumOfSquares are passed by reference. So, the arguments must be variables.
|
||||
390 LET N = N + 1
|
||||
400 LET Sum = Sum + P
|
||||
410 LET SumOfSquares = SumOfSquares + P ^ 2
|
||||
420 END SUB
|
||||
430 !
|
||||
440 EXTERNAL FUNCTION Deviation (N, Sum, SumOfSquares)
|
||||
450 LET Deviation = SQR(SumOfSquares / N - (Sum / N) ^ 2)
|
||||
460 END FUNCTION
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions;
|
||||
with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions;
|
||||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
|
||||
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
|
||||
|
||||
procedure Test_Deviation is
|
||||
type Sample is record
|
||||
N : Natural := 0;
|
||||
Sum : Float := 0.0;
|
||||
SumOfSquares : Float := 0.0;
|
||||
end record;
|
||||
procedure Add (Data : in out Sample; Point : Float) is
|
||||
begin
|
||||
Data.N := Data.N + 1;
|
||||
Data.Sum := Data.Sum + Point;
|
||||
Data.SumOfSquares := Data.SumOfSquares + Point ** 2;
|
||||
end Add;
|
||||
function Deviation (Data : Sample) return Float is
|
||||
begin
|
||||
return Sqrt (Data.SumOfSquares / Float (Data.N) - (Data.Sum / Float (Data.N)) ** 2);
|
||||
end Deviation;
|
||||
|
||||
Data : Sample;
|
||||
Test : array (1..8) of Integer := (2, 4, 4, 4, 5, 5, 7, 9);
|
||||
begin
|
||||
for Index in Test'Range loop
|
||||
Add (Data, Float(Test(Index)));
|
||||
Put("N="); Put(Item => Index, Width => 1);
|
||||
Put(" ITEM="); Put(Item => Test(Index), Width => 1);
|
||||
Put(" AVG="); Put(Item => Float(Data.Sum)/Float(Index), Fore => 1, Aft => 3, Exp => 0);
|
||||
Put(" STDDEV="); Put(Item => Deviation (Data), Fore => 1, Aft => 3, Exp => 0);
|
||||
New_line;
|
||||
end loop;
|
||||
end Test_Deviation;
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. run-stddev.
|
||||
environment division.
|
||||
input-output section.
|
||||
file-control.
|
||||
select input-file assign to "input.txt"
|
||||
organization is line sequential.
|
||||
data division.
|
||||
file section.
|
||||
fd input-file.
|
||||
01 inp-record.
|
||||
03 inp-fld pic 9(03).
|
||||
working-storage section.
|
||||
01 filler pic 9(01) value 0.
|
||||
88 no-more-input value 1.
|
||||
01 ws-tb-data.
|
||||
03 ws-tb-size pic 9(03).
|
||||
03 ws-tb-table.
|
||||
05 ws-tb-fld pic s9(05)v9999 comp-3 occurs 0 to 100 times
|
||||
depending on ws-tb-size.
|
||||
01 ws-stddev pic s9(05)v9999 comp-3.
|
||||
PROCEDURE DIVISION.
|
||||
move 0 to ws-tb-size
|
||||
open input input-file
|
||||
read input-file
|
||||
at end
|
||||
set no-more-input to true
|
||||
end-read
|
||||
perform
|
||||
test after
|
||||
until no-more-input
|
||||
add 1 to ws-tb-size
|
||||
move inp-fld to ws-tb-fld (ws-tb-size)
|
||||
call 'stddev' using by reference ws-tb-data
|
||||
ws-stddev
|
||||
display 'inp=' inp-fld ' stddev=' ws-stddev
|
||||
read input-file at end set no-more-input to true end-read
|
||||
end-perform
|
||||
close input-file
|
||||
stop run.
|
||||
end program run-stddev.
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. stddev.
|
||||
data division.
|
||||
working-storage section.
|
||||
01 ws-tbx pic s9(03) comp.
|
||||
01 ws-tb-work.
|
||||
03 ws-sum pic s9(05)v9999 comp-3 value +0.
|
||||
03 ws-sumsq pic s9(05)v9999 comp-3 value +0.
|
||||
03 ws-avg pic s9(05)v9999 comp-3 value +0.
|
||||
linkage section.
|
||||
01 ws-tb-data.
|
||||
03 ws-tb-size pic 9(03).
|
||||
03 ws-tb-table.
|
||||
05 ws-tb-fld pic s9(05)v9999 comp-3 occurs 0 to 100 times
|
||||
depending on ws-tb-size.
|
||||
01 ws-stddev pic s9(05)v9999 comp-3.
|
||||
PROCEDURE DIVISION using ws-tb-data ws-stddev.
|
||||
compute ws-sum = 0
|
||||
perform test before varying ws-tbx from 1 by +1 until ws-tbx > ws-tb-size
|
||||
compute ws-sum = ws-sum + ws-tb-fld (ws-tbx)
|
||||
end-perform
|
||||
compute ws-avg rounded = ws-sum / ws-tb-size
|
||||
compute ws-sumsq = 0
|
||||
perform test before varying ws-tbx from 1 by +1 until ws-tbx > ws-tb-size
|
||||
compute ws-sumsq = ws-sumsq
|
||||
+ (ws-tb-fld (ws-tbx) - ws-avg) ** 2.0
|
||||
end-perform
|
||||
compute ws-stddev = ( ws-sumsq / ws-tb-size) ** 0.5
|
||||
goback.
|
||||
end program stddev.
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
sample output:
|
||||
inp=002 stddev=+00000.0000
|
||||
inp=004 stddev=+00001.0000
|
||||
inp=004 stddev=+00000.9427
|
||||
inp=004 stddev=+00000.8660
|
||||
inp=005 stddev=+00000.9797
|
||||
inp=005 stddev=+00001.0000
|
||||
inp=007 stddev=+00001.3996
|
||||
inp=009 stddev=+00002.0000
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
(defun running-std (items)
|
||||
(let ((running-sum 0)
|
||||
(running-len 0)
|
||||
(running-squared-sum 0)
|
||||
(result 0))
|
||||
(dolist (item items)
|
||||
(setq running-sum (+ running-sum item))
|
||||
(setq running-len (1+ running-len))
|
||||
(setq running-squared-sum (+ running-squared-sum (* item item)))
|
||||
(setq result (sqrt (- (/ running-squared-sum (float running-len))
|
||||
(/ (* running-sum running-sum)
|
||||
(float (* running-len running-len))))))
|
||||
(message "%f" result))
|
||||
result))
|
||||
|
||||
(running-std '(2 4 4 4 5 5 7 9))
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
(let ((x '(2 4 4 4 5 5 7 9)))
|
||||
(string-to-number (calc-eval "sqrt(vpvar($1))" nil (append '(vec) x))))
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
;; lexical-binding: t
|
||||
(require 'generator)
|
||||
|
||||
(iter-defun std-dev-gen (lst)
|
||||
(let ((sum 0)
|
||||
(avg 0)
|
||||
(tmp '())
|
||||
(std 0))
|
||||
(dolist (i lst)
|
||||
(setq i (float i))
|
||||
(push i tmp)
|
||||
(setq sum (+ sum i))
|
||||
(setq avg (/ sum (length tmp)))
|
||||
(setq std 0)
|
||||
(dolist (j tmp)
|
||||
(setq std (+ std (expt (- j avg) 2))))
|
||||
(setq std (/ std (length tmp)))
|
||||
(setq std (sqrt std))
|
||||
(iter-yield std))))
|
||||
|
||||
(let* ((test-data '(2 4 4 4 5 5 7 9))
|
||||
(generator (std-dev-gen test-data)))
|
||||
(dolist (i test-data)
|
||||
(message "with %d: %f" i (iter-next generator))))
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
using Lambda;
|
||||
|
||||
class Main {
|
||||
static function main():Void {
|
||||
var nums = [2, 4, 4, 4, 5, 5, 7, 9];
|
||||
for (i in 1...nums.length+1)
|
||||
Sys.println(sdev(nums.slice(0, i)));
|
||||
}
|
||||
|
||||
static function average<T:Float>(nums:Array<T>):Float {
|
||||
return nums.fold(function(n, t) return n + t, 0) / nums.length;
|
||||
}
|
||||
|
||||
static function sdev<T:Float>(nums:Array<T>):Float {
|
||||
var store = [];
|
||||
var avg = average(nums);
|
||||
for (n in nums) {
|
||||
store.push((n - avg) * (n - avg));
|
||||
}
|
||||
|
||||
return Math.sqrt(average(store));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
program CumulDev;
|
||||
(* Cumulative standard deviation *)
|
||||
|
||||
unit SAMPLE: class;
|
||||
var
|
||||
n: integer,
|
||||
sum: real,
|
||||
sum_of_squares: real;
|
||||
|
||||
unit add: procedure (p: real);
|
||||
begin
|
||||
n := n + 1;
|
||||
sum := sum + p;
|
||||
sum_of_squares := sum_of_squares + p * p
|
||||
end add;
|
||||
|
||||
begin (* constructor *)
|
||||
n := 0;
|
||||
sum := 0.0;
|
||||
sum_of_squares := 0.0
|
||||
end;
|
||||
|
||||
var
|
||||
test: arrayof real,
|
||||
s: SAMPLE,
|
||||
i: integer;
|
||||
|
||||
unit deviation: function (s: SAMPLE): real;
|
||||
var
|
||||
quot: real;
|
||||
begin
|
||||
quot := s.sum / s.n;
|
||||
result := sqrt(s.sum_of_squares / s.n - quot * quot)
|
||||
end deviation;
|
||||
|
||||
begin
|
||||
array test dim (1 : 8);
|
||||
test(1) := 2; test(2) := 4; test(3) := 4; test(4) := 4;
|
||||
test(5) := 5; test(6) := 5; test(7) := 7; test(8) := 9;
|
||||
s := new SAMPLE;
|
||||
writeln("N ITEM AVG STDDEV");
|
||||
for i := 1 to upper(test)
|
||||
do
|
||||
call s.add(test(i));
|
||||
write(i: 1, " ", test(i): 3: 1, " ");
|
||||
write(s.sum / i: 5: 3, " ");
|
||||
writeln(deviation(s): 5: 3);
|
||||
od;
|
||||
kill(s);
|
||||
end CumulDev.
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
MODULE CumulDev;
|
||||
(* Cumulative standard deviation *)
|
||||
FROM RealMath IMPORT
|
||||
sqrt;
|
||||
FROM SRealIO IMPORT
|
||||
WriteFixed;
|
||||
FROM STextIO IMPORT
|
||||
WriteLn, WriteString;
|
||||
FROM SWholeIO IMPORT
|
||||
WriteInt;
|
||||
|
||||
TYPE
|
||||
TSample = RECORD
|
||||
N: CARDINAL;
|
||||
Sum: REAL;
|
||||
SumOfSquares: REAL
|
||||
END;
|
||||
|
||||
TData = ARRAY [1 .. 8] OF REAL;
|
||||
|
||||
VAR
|
||||
Test: TData;
|
||||
S: TSample;
|
||||
I: CARDINAL;
|
||||
|
||||
PROCEDURE Init(VAR OUT S: TSample);
|
||||
BEGIN
|
||||
WITH S DO
|
||||
N := 0;
|
||||
Sum := 0.0;
|
||||
SumOfSquares := 0.0
|
||||
END;
|
||||
END Init;
|
||||
|
||||
PROCEDURE Add(VAR INOUT S: TSample; P: REAL);
|
||||
BEGIN
|
||||
WITH S DO
|
||||
N := N + 1;
|
||||
Sum := Sum + P;
|
||||
SumOfSquares := SumOfSquares + P * P
|
||||
END
|
||||
END Add;
|
||||
|
||||
PROCEDURE Deviation (S: TSample): REAL;
|
||||
VAR
|
||||
Quot: REAL;
|
||||
BEGIN
|
||||
WITH S DO
|
||||
Quot := Sum / FLOAT(N);
|
||||
RETURN sqrt(SumOfSquares / FLOAT(N) - Quot * Quot)
|
||||
END;
|
||||
END Deviation;
|
||||
|
||||
BEGIN
|
||||
Test := TData{2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0};
|
||||
Init(S);
|
||||
WriteString("N ITEM AVG STDDEV");
|
||||
WriteLn;
|
||||
FOR I := 1 TO HIGH(Test) DO
|
||||
Add(S, Test[I]);
|
||||
WriteInt(I, 1);
|
||||
WriteString(" ");
|
||||
WriteFixed(Test[I], 1, 3);
|
||||
WriteString(" ");
|
||||
WriteFixed(S.Sum / FLOAT(I), 3, 5);
|
||||
WriteString(" ");
|
||||
WriteFixed(Deviation(S), 3, 5);
|
||||
WriteLn
|
||||
END;
|
||||
END CumulDev.
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
MODULE CumulativeStandardDeviation;
|
||||
IMPORT Math, Out;
|
||||
|
||||
TYPE CSD* = POINTER TO CSDStruct;
|
||||
CSDStruct
|
||||
= RECORD
|
||||
sum, sum2, sd : REAL;
|
||||
n : INTEGER
|
||||
END;
|
||||
|
||||
PROCEDURE sample*( sd : CSD ; x : REAL ) : REAL;
|
||||
VAR r, sum, sum2 : REAL;
|
||||
BEGIN
|
||||
sum := sd.sum + x;
|
||||
sum2 := sd.sum2 + ( x * x );;
|
||||
INC( sd.n );
|
||||
r := FLT( sd.n );
|
||||
IF sd.n = 0 THEN
|
||||
sd.sd := 0.0
|
||||
ELSE
|
||||
sd.sd := Math.sqrt( sum2 / r - sum * sum / r / r )
|
||||
END;
|
||||
sd.sum := sum;
|
||||
sd.sum2 := sum2
|
||||
RETURN sd.sd
|
||||
END sample;
|
||||
|
||||
PROCEDURE NewCSD*() : CSD ;
|
||||
VAR sd : CSD;
|
||||
BEGIN
|
||||
NEW( sd );
|
||||
sd.n := 0;
|
||||
sd.sum := 0.0;
|
||||
sd.sum2 := 0.0;
|
||||
sd.sd := 0.0
|
||||
RETURN sd
|
||||
END NewCSD ;
|
||||
|
||||
PROCEDURE showSampleEffect( sd : CSD; x : REAL );
|
||||
VAR dev : REAL;
|
||||
BEGIN
|
||||
dev := sample( sd, x );
|
||||
Out.Int( sd.n, 6 );Out.String( ": " );Out.Real( x, 10 );
|
||||
Out.String( " -> " );Out.Real( dev, 10 );Out.Ln
|
||||
END showSampleEffect;
|
||||
|
||||
PROCEDURE test;
|
||||
VAR sd : CSD;
|
||||
BEGIN
|
||||
sd := NewCSD();
|
||||
showSampleEffect( sd, 2.0 );
|
||||
showSampleEffect( sd, 4.0 );showSampleEffect( sd, 4.0 );showSampleEffect( sd, 4.0 );
|
||||
showSampleEffect( sd, 5.0 );showSampleEffect( sd, 5.0 );
|
||||
showSampleEffect( sd, 7.0 );
|
||||
showSampleEffect( sd, 9.0 )
|
||||
END test;
|
||||
|
||||
BEGIN
|
||||
test;
|
||||
END CumulativeStandardDeviation.
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
MODULE CumulativeStandardDeviation;
|
||||
IMPORT Math, Out;
|
||||
|
||||
TYPE CSD* = POINTER TO CSDStruct;
|
||||
CSDStruct*
|
||||
= RECORD
|
||||
sum, sum2, sd : REAL;
|
||||
n : INTEGER;
|
||||
END;
|
||||
|
||||
PROCEDURE ( sd : CSD ) sample*( x : REAL ) : REAL;
|
||||
VAR r, sum, sum2 : REAL;
|
||||
BEGIN
|
||||
sum := sd.sum + x;
|
||||
sum2 := sd.sum2 + ( x * x );;
|
||||
INC( sd.n );
|
||||
r := sd.n;
|
||||
IF sd.n = 0 THEN
|
||||
sd.sd := 0.0
|
||||
ELSE
|
||||
sd.sd := Math.sqrt( sum2 / r - sum * sum / r / r )
|
||||
END;
|
||||
sd.sum := sum;
|
||||
sd.sum2 := sum2;
|
||||
RETURN sd.sd
|
||||
END sample;
|
||||
|
||||
PROCEDURE NewCSD*() : CSD ;
|
||||
VAR sd : CSD;
|
||||
BEGIN
|
||||
NEW( sd );
|
||||
sd.n := 0;
|
||||
sd.sum := 0.0;
|
||||
sd.sum2 := 0.0;
|
||||
sd.sd := 0.0;
|
||||
RETURN sd
|
||||
END NewCSD ;
|
||||
|
||||
PROCEDURE ( sd : CSD ) showSampleEffect( x : REAL );
|
||||
VAR dev : REAL;
|
||||
BEGIN
|
||||
dev := sd.sample( x );
|
||||
Out.Int( sd.n, 6 );Out.String( ": " );Out.Real( x, 15 );
|
||||
Out.String( " -> " );Out.Real( dev, 15 );Out.Ln
|
||||
END showSampleEffect;
|
||||
|
||||
PROCEDURE test;
|
||||
VAR sd : CSD;
|
||||
BEGIN
|
||||
sd := NewCSD();
|
||||
sd.showSampleEffect( 2.0 );
|
||||
sd.showSampleEffect( 4.0 ); sd.showSampleEffect( 4.0 ); sd.showSampleEffect( 4.0 );
|
||||
sd.showSampleEffect( 5.0 ); sd.showSampleEffect( 5.0 );
|
||||
sd.showSampleEffect( 7.0 );
|
||||
sd.showSampleEffect( 9.0 )
|
||||
END test;
|
||||
|
||||
BEGIN
|
||||
test;
|
||||
END CumulativeStandardDeviation.
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
with javascript_semantics
|
||||
|
||||
atom sdn = 0, sdsum = 0, sdsumsq = 0
|
||||
|
||||
procedure sdadd(atom n)
|
||||
sdn += 1
|
||||
sdsum += n
|
||||
sdsumsq += n*n
|
||||
end procedure
|
||||
|
||||
function sdavg()
|
||||
return sdsum/sdn
|
||||
end function
|
||||
|
||||
function sddev()
|
||||
return sqrt(sdsumsq/sdn - power(sdsum/sdn,2))
|
||||
end function
|
||||
|
||||
--test code:
|
||||
constant testset = {2, 4, 4, 4, 5, 5, 7, 9}
|
||||
integer ti
|
||||
for i=1 to length(testset) do
|
||||
ti = testset[i]
|
||||
sdadd(ti)
|
||||
printf(1,"N=%d Item=%d Avg=%5.3f StdDev=%5.3f\n",{i,ti,sdavg(),sddev()})
|
||||
end for
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
with javascript_semantics
|
||||
constant testset = {2, 4, 4, 4, 5, 5, 7, 9}
|
||||
for i,t in testset do
|
||||
sequence test = testset[1..i]
|
||||
printf(1,"N=%d Item=%d Avg=%5.3f StdDev=%5.3f\n",{i,t,average(test),std_dev(test)})
|
||||
end for
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
require "table2"
|
||||
local fmt = require "fmt"
|
||||
|
||||
local function cum_std_dev(a)
|
||||
for i = 1, #a do
|
||||
local b = a:slice(1, i)
|
||||
fmt.print("Values : %,s", b)
|
||||
coroutine.yield(b:stddev())
|
||||
end
|
||||
end
|
||||
|
||||
local a = {2, 4, 4, 4, 5, 5, 7, 9}
|
||||
local co = coroutine.create(cum_std_dev)
|
||||
while true do
|
||||
local _, sd = coroutine.resume(co, a)
|
||||
if !sd then break end
|
||||
fmt.print("Std Dev : %10.8f\n", sd)
|
||||
end
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
function Get-StandardDeviation {
|
||||
begin {
|
||||
$avg = 0
|
||||
$nums = @()
|
||||
}
|
||||
process {
|
||||
$nums += $_
|
||||
$avg = ($nums | Measure-Object -Average).Average
|
||||
$sum = 0;
|
||||
$nums | ForEach-Object { $sum += ($avg - $_) * ($avg - $_) }
|
||||
[Math]::Sqrt($sum / $nums.Length)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
' Cumulative standard deviation
|
||||
|
||||
TYPE Sample
|
||||
N AS INTEGER
|
||||
Sum AS SINGLE
|
||||
SumOfSquares AS SINGLE
|
||||
END TYPE
|
||||
|
||||
DECLARE SUB Init (S AS Sample)
|
||||
DECLARE SUB Add (S AS Sample, BYVAL P AS SINGLE)
|
||||
DECLARE FUNCTION Deviation! (S AS Sample)
|
||||
DIM Test(1 TO 8) AS SINGLE
|
||||
DIM S AS Sample
|
||||
FOR I = 1 TO 8
|
||||
READ Test(I)
|
||||
NEXT I
|
||||
DATA 2, 4, 4, 4, 5, 5, 7, 9
|
||||
CALL Init(S)
|
||||
PRINT "N ITEM AVG STDDEV"
|
||||
FOR I = LBOUND(Test) TO UBOUND(Test)
|
||||
CALL Add(S, Test(I))
|
||||
PRINT USING "# "; I;
|
||||
PRINT USING " # "; Test(I);
|
||||
PRINT USING "#.### "; S.Sum / I;
|
||||
PRINT USING " #.###"; Deviation!(S)
|
||||
NEXT I
|
||||
END
|
||||
|
||||
SUB Add (S AS Sample, BYVAL P AS SINGLE)
|
||||
S.N = S.N + 1
|
||||
S.Sum = S.Sum + P
|
||||
S.SumOfSquares = S.SumOfSquares + P ^ 2
|
||||
END SUB
|
||||
|
||||
FUNCTION Deviation! (S AS Sample)
|
||||
Deviation! = SQR(S.SumOfSquares / S.N - (S.Sum / S.N) ^ 2)
|
||||
END FUNCTION
|
||||
|
||||
SUB Init (S AS Sample)
|
||||
S.N = 0
|
||||
S.Sum = 0!
|
||||
S.SumOfSquares = 0!
|
||||
END SUB
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
data = Array(2,4,4,4,5,5,7,9)
|
||||
|
||||
For i = 0 To UBound(data)
|
||||
WScript.StdOut.Write "value = " & data(i) &_
|
||||
" running sd = " & sd(data,i)
|
||||
WScript.StdOut.WriteLine
|
||||
Next
|
||||
|
||||
Function sd(arr,n)
|
||||
mean = 0
|
||||
variance = 0
|
||||
For j = 0 To n
|
||||
mean = mean + arr(j)
|
||||
Next
|
||||
mean = mean/(n+1)
|
||||
For k = 0 To n
|
||||
variance = variance + ((arr(k)-mean)^2)
|
||||
Next
|
||||
variance = variance/(n+1)
|
||||
sd = FormatNumber(Sqr(variance),6)
|
||||
End Function
|
||||
Loading…
Add table
Add a link
Reference in a new issue