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