Annotation of embedaddon/ntp/scripts/monitoring/lr.pl, revision 1.1

1.1     ! misho       1: ;#
        !             2: ;# lr.pl,v 3.1 1993/07/06 01:09:08 jbj Exp
        !             3: ;#
        !             4: ;#
        !             5: ;# Linear Regression Package for perl
        !             6: ;# to be 'required' from perl
        !             7: ;#
        !             8: ;#  Copyright (c) 1992 
        !             9: ;#  Frank Kardel, Rainer Pruy
        !            10: ;#  Friedrich-Alexander Universitaet Erlangen-Nuernberg
        !            11: ;#
        !            12: ;#  Copyright (c) 1997 by
        !            13: ;#  Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>
        !            14: ;#  (Converted to a PERL 5.004 package)
        !            15: ;#
        !            16: ;#############################################################
        !            17: 
        !            18: package lr;
        !            19: 
        !            20: ##
        !            21: ## y = A + Bx
        !            22: ##
        !            23: ## B = (n * Sum(xy) - Sum(x) * Sum(y)) / (n * Sum(x^2) - Sum(x)^2)
        !            24: ##
        !            25: ## A = (Sum(y) - B * Sum(x)) / n
        !            26: ##
        !            27: 
        !            28: ##
        !            29: ## interface
        !            30: ##
        !            31: ;# init(tag);          initialize data set for tag
        !            32: ;# sample(x, y, tag);  enter sample
        !            33: ;# Y(x, tag);          compute y for given x 
        !            34: ;# X(y, tag);          compute x for given y
        !            35: ;# r(tag);             regression coefficient
        !            36: ;# cov(tag);           covariance
        !            37: ;# A(tag);   
        !            38: ;# B(tag);
        !            39: ;# sigma(tag);         standard deviation
        !            40: ;# mean(tag);
        !            41: #########################
        !            42: 
        !            43: sub init
        !            44: {
        !            45:     my $self = shift;
        !            46: 
        !            47:     $self->{n}   = 0;
        !            48:     $self->{sx}  = 0.0;
        !            49:     $self->{sx2} = 0.0;
        !            50:     $self->{sxy} = 0.0;
        !            51:     $self->{sy}  = 0.0;
        !            52:     $self->{sy2} = 0.0;
        !            53: }
        !            54: 
        !            55: sub sample($$)
        !            56: {
        !            57:     my $self = shift;
        !            58:     my($_x, $_y) = @_;
        !            59: 
        !            60:     ++($self->{n});
        !            61:     $self->{sx}  += $_x;
        !            62:     $self->{sy}  += $_y;
        !            63:     $self->{sxy} += $_x * $_y;
        !            64:     $self->{sx2} += $_x**2;
        !            65:     $self->{sy2} += $_y**2;
        !            66: }
        !            67: 
        !            68: sub B()
        !            69: {
        !            70:     my $self = shift;
        !            71: 
        !            72:     return 1 unless ($self->{n} * $self->{sx2} - $self->{sx}**2);
        !            73:     return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy})
        !            74:        / ($self->{n} * $self->{sx2} - $self->{sx}**2);
        !            75: }
        !            76: 
        !            77: sub A()
        !            78: {
        !            79:     my $self = shift;
        !            80: 
        !            81:     return ($self->{sy} - B() * $self->{sx}) / $self->{n};
        !            82: }
        !            83: 
        !            84: sub Y()
        !            85: {
        !            86:     my $self = shift;
        !            87: 
        !            88:     return A() + B() * $_[$[];
        !            89: }
        !            90: 
        !            91: sub X()
        !            92: {
        !            93:     my $self = shift;
        !            94: 
        !            95:     return ($_[$[] - A()) / B();
        !            96: }
        !            97: 
        !            98: sub r()
        !            99: {
        !           100:     my $self = shift;
        !           101: 
        !           102:     my $s = ($self->{n} * $self->{sx2} - $self->{sx}**2)
        !           103:          * ($self->{n} * $self->{sy2} - $self->{sy}**2);
        !           104: 
        !           105:     return 1 unless $s;
        !           106:     
        !           107:     return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy}) / sqrt($s);
        !           108: }
        !           109: 
        !           110: sub cov()
        !           111: {
        !           112:     my $self = shift;
        !           113: 
        !           114:     return ($self->{sxy} - $self->{sx} * $self->{sy} / $self->{n})
        !           115:        / ($self->{n} - 1);
        !           116: }
        !           117: 
        !           118: sub sigma()
        !           119: {
        !           120:     my $self = shift;
        !           121: 
        !           122:     return 0 if $self->{n} <= 1;
        !           123:     return sqrt(($self->{sy2} - ($self->{sy} * $self->{sy}) / $self->{n})
        !           124:                / ($self->{n}));
        !           125: }
        !           126: 
        !           127: sub mean()
        !           128: {
        !           129:     my $self = shift;
        !           130: 
        !           131:     return 0 if $self->{n} <= 0;
        !           132:     return $self->{sy} / $self->{n};
        !           133: }
        !           134: 
        !           135: sub new
        !           136: {
        !           137:     my $class = shift;
        !           138:     my $self = {
        !           139:        (n => undef,
        !           140:         sx => undef,
        !           141:         sx2 => undef,
        !           142:         sxy => undef,
        !           143:         sy => undef,
        !           144:         sy2 => undef)
        !           145:     };
        !           146:     bless $self, $class;
        !           147:     init($self);
        !           148:     return $self;
        !           149: }
        !           150: 
        !           151: 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>