リファレンスの応用 〜複数のベクトルを受け取る〜
◆共分散を求める関数 ファイル名: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;