極悪です。発言がないのでゴミ撒き。
nifty.fgalts.mes.06:4869 の続き。
x = { 1 2 3 4 5 6 7 8 }
y = {252 431 591 717 855 959 1070 1148}
というデータから、最小自乗法でべき乗回帰曲線を求めます。
Statistics::Descriptive を使うと回帰曲線のほかにも分散や
中央値が求められます。ただしデータを全てメモリ上に持つ
ようなので、データ数が多い場合はこのモジュールを使わずに
自分で計算したほうが良さそうです。
|#!/usr/local/bin/perl
|
|use strict;
|my @x = ( 1, 2, 3, 4, 5, 6, 7, 8);
|my @y = (252,431,591,717,855,959,1070,1148);
|
|use Statistics::Descriptive;
|
|my $stat = Statistics::Descriptive::Full->new();
|$stat->add_data(@y);
|my($a,$b,$r,$e) = $stat->least_squares_fit();
|printf("y = (%+6.2lf) + (%+6.2lf) * x\t(err = %6.2lf)\n",$a,$b,$e);
|
|my $stat = Statistics::Descriptive::Full->new();
|$stat->add_data(map(log,@y));
|my($loga,$b,$r,$e) = $stat->least_squares_fit(map(log,@x));
|my $a = exp($loga);
|printf("y = (%+6.2lf) * x ^ (%+6.2lf)\t(err = %6.2lf)\n",$a,$b,$e);
|
|__END__
実行すると
|%perl least_squares_fit.pl
|y = (+179.18) + (+127.49) * x (err = 11.82)
|y = (+257.61) * x ^ ( +0.73) (err = 0.01)
|
|%
という結果が出ます。
--
FZH01112@..., http://www1.u-netsurf.ne.jp/~dune/