#!/usr/bin/perl use Math::RandomOrg qw(randnum randbyte); # my $number = randnum(0, 100); my $get_rand = 1000; my $octet = randbyte($get_rand); my @p; my $max = 0; my $min = 255; for my $offset (1 .. $get_rand) { my $char = substr $octet,$offset,1; my $int = 2*ord($char) - 254; $p[$offset] = $int; } my $num = $get_rand; #for my $t ( 1 .. $num) { # $p[$t] = rand(1) - 0.5; #} for my $m ( 7 .. 7 ) { my @vil; for my $i ( 1 .. $num - $m ) { my @x; for my $mi ( 1 .. $m) { push @x, $p[$i+$mi-1]; } $vil[$i]=vilkoks($m,@x); } my $ssum = 0; for my $i ( 1 .. $num - $m ) { $ssum+=$vil[$i]; } my $sa = $ssum/($num-$m); my $dsum = 0; for my $i ( 1 .. $num - $m ) { $dsum+=($vil[$i]-$sa)*($vil[$i]-$sa); } my $disp = $dsum/($num-$m); my $so = sqrt($disp); my $so_avr = sqrt($dsum)/($num-$m); my $sa_t = $m*($m+1)/4; my $disp_t = $m*($m+1)*(2*$m+1)/24; my $so_t = sqrt($disp_t); my $so_avr_t = $so_t/sqrt($num-$m); my $otkl = ($sa-$sa_t)/$so_avr_t; print "m $m s $sa sa_t $sa_t disp $disp disp_t $disp_t so $so so_avr $so_avr otkl $otkl\n"; } sub vilkoks { my $m = shift; my @x; for my $n ( 1 .. $m ) { $x[$n] = shift; } my $sum = 0; for my $i ( 1 .. $m ) { for my $j ( $i .. $m ) { $sum+=ufun($x[$i]+$x[$j]); } } return $sum; } sub ufun { my $x = shift; return 0 if ($x<0); return 0.5 if ($x eq 0); return 1 if ($x>0); }