Deming's funnel: Difference between revisions

Added XPL0 example.
(added Arturo)
(Added XPL0 example.)
Line 2,415:
Mean : 3.1341, 5.4210
Std Dev : 1.5874, 3.9304
</pre>
 
=={{header|XPL0}}==
Works on RPi. MAlloc works differently in DOS versions and in EXPL.
<syntaxhighlight lang "XPL0">include xpllib; \for Print
 
func real Mean(Array, Size);
real Array; int Size;
real Sum;
int I;
[Sum:= 0.0;
for I:= 0 to Size-1 do
Sum:= Sum + Array(I);
return Sum / float(Size);
];
 
func real StdDev(Array, Size);
real Array; int Size;
real M, Sum;
int I;
[M:= Mean(Array, Size);
Sum:= 0.0;
for I:= 0 to Size-1 do
Sum:= Sum + (Array(I)-M) * (Array(I)-M);
return sqrt(Sum / float(Size));
];
 
func real Funnel(Array, Size, Rule);
real Array; int Size, Rule;
real Posn, Result, Fall;
int AddrResult, I;
def SizeOfReal = 8; \bytes
[AddrResult:= addr Result;
AddrResult(0):= MAlloc(Size*SizeOfReal);
AddrResult(1):= 0; \for safety
Posn:= 0.0;
for I:= 0 to Size-1 do
[Fall:= Array(I);
Result(I):= Posn + Fall;
case Rule of
1: [];
2: Posn:= -Fall;
3: Posn:= -(Posn+Fall);
4: Posn:= Posn+Fall
other [];
];
return Result;
];
 
func Experiment(Rule);
int Rule;
real DXs, DYs, RXs, RYs;
def Size = 100;
[
DXs:= [ -0.533, 0.270, 0.859, -0.043, -0.205, -0.127, -0.071, 0.275,
1.251, -0.231, -0.401, 0.269, 0.491, 0.951, 1.150, 0.001,
-0.382, 0.161, 0.915, 2.080, -2.337, 0.034, -0.126, 0.014,
0.709, 0.129, -1.093, -0.483, -1.193, 0.020, -0.051, 0.047,
-0.095, 0.695, 0.340, -0.182, 0.287, 0.213, -0.423, -0.021,
-0.134, 1.798, 0.021, -1.099, -0.361, 1.636, -1.134, 1.315,
0.201, 0.034, 0.097, -0.170, 0.054, -0.553, -0.024, -0.181,
-0.700, -0.361, -0.789, 0.279, -0.174, -0.009, -0.323, -0.658,
0.348, -0.528, 0.881, 0.021, -0.853, 0.157, 0.648, 1.774,
-1.043, 0.051, 0.021, 0.247, -0.310, 0.171, 0.000, 0.106,
0.024, -0.386, 0.962, 0.765, -0.125, -0.289, 0.521, 0.017,
0.281, -0.749, -0.149, -2.436, -0.909, 0.394, -0.113, -0.598,
0.443, -0.521, -0.799, 0.087 ];
 
DYs:= [ 0.136, 0.717, 0.459, -0.225, 1.392, 0.385, 0.121, -0.395,
0.490, -0.682, -0.065, 0.242, -0.288, 0.658, 0.459, 0.000,
0.426, 0.205, -0.765, -2.188, -0.742, -0.010, 0.089, 0.208,
0.585, 0.633, -0.444, -0.351, -1.087, 0.199, 0.701, 0.096,
-0.025, -0.868, 1.051, 0.157, 0.216, 0.162, 0.249, -0.007,
0.009, 0.508, -0.790, 0.723, 0.881, -0.508, 0.393, -0.226,
0.710, 0.038, -0.217, 0.831, 0.480, 0.407, 0.447, -0.295,
1.126, 0.380, 0.549, -0.445, -0.046, 0.428, -0.074, 0.217,
-0.822, 0.491, 1.347, -0.141, 1.230, -0.044, 0.079, 0.219,
0.698, 0.275, 0.056, 0.031, 0.421, 0.064, 0.721, 0.104,
-0.729, 0.650, -1.103, 0.154, -1.720, 0.051, -0.385, 0.477,
1.537, -0.901, 0.939, -0.411, 0.341, -0.411, 0.106, 0.224,
-0.947, -1.424, -0.542, -1.032 ];
 
RXs:= Funnel(DXs, Size, Rule);
RYs:= Funnel(DYs, Size, Rule);
Print("Rule %d : X Y\n", Rule);
Print("Mean : %3.4f, %3.4f\n", Mean(RXs, Size), Mean(RYs, Size));
Print("Std Dev : %3.4f, %3.4f\n", StdDev(RXs, Size), StdDev(RYs, Size));
CrLf(0);
];
 
int R;
for R:= 1 to 4 do Experiment(R)</syntaxhighlight>
{{out}}
<pre>
Rule 1 : X Y
Mean : 0.0004, 0.0702
Std Dev : 0.7153, 0.6462
 
Rule 2 : X Y
Mean : 0.0009, -0.0103
Std Dev : 1.0371, 0.8999
 
Rule 3 : X Y
Mean : 0.0439, -0.0063
Std Dev : 7.9871, 4.7784
 
Rule 4 : X Y
Mean : 3.1341, 5.4210
Std Dev : 1.5874, 3.9304
 
</pre>
 
296

edits