<<目次へ


リファレンスの応用 〜複数のベクトルを受け取る〜


共分散を求める関数 ファイル名:new_cov.pl

package cov;

sub cov{
        require("C://Perl/function/mean.pl");
        my ($x,$y)=@_;
        my $n1=@$x;
        my $n2=@$y;
        if($n1!=$n2){
                print "エラー:2つのベクトルの長さが異なります\n";
        }else{
                my $x_bar=mean::mean(@$x);
                my $y_bar=mean::mean(@$y);
                my $sum=0;
                for($i=0;$i<$n1;$i++){
                        $sum+=($$x[$i]-$x_bar)*($$y[$i]-$y_bar);
                }
                $S_xy=$sum/($n1-1);
                return($S_xy);
        }
}
1;



相関係数を求める関数 ファイル名:new_cor.pl

package cor;

sub cor{
        my ($x,$y)=@_;
        my $n1=@$x;
        my $n2=@$y;
        if($n1!=$n2){
                print "エラー:2つのベクトルの長さが異なります\n";
        }else{
                require("C://Perl/function/sd.pl");
                require("C://Perl/function/new_cov.pl");
                my $x_sd=sd::sd(@$x);
                my $y_sd=sd::sd(@$y);
                my $xy_cov=cov::cov(\$x,\$y); #new_covの引数にはアドレスを指定することに注意
                my $cor=$xy_cov/($x_sd*$y_sd);
                return($cor);
        }
}
1;