Location : Home > Languages > Perl > Package
Title : Math::Approx
Toolbox Logo

名称

 Math::Approx - 与えられたデータに対して近似式を推計


メソッド

new (constructor)

Math::Approx->new(\&poly, $degree, %data);

 最初の引数はコード参照(CODE reference)であり、データごとに繰り返し使用される関数である。その関数は degree と x の2つの引数をとる。
 近似を行う関数 poly としては簡単な多項式を次のように定義できる。

sub poly {
	my($n,$x) = @_;
	return $x ** $n;
}

 もしコンストラクタにおける第1引数がコード参照ではなく FALSE であれば、上記の多項式 poly は数え上げ関数(iterator function)を用いる。
 第2引数は近似を行う最大次元数を与える。この値は 0 から始まる。
 最後の引数は記事すべきデータの組 x と y である。
 コンストラクタは Math::Approx への参照を返す。

approx

$approximation->approx(17);

 引数として与えられた x の値に対応する近似値 y の値を返す。

fit

$approximation->fit;

  データに対する平均2乗誤差を返す。

plot

$approximation->plot("tmp/app");

 引数として与えられた名称のファイルにデータと対応する近似値を出力する。出力はgnuplot(1)で表示できる。

print

$approximation->print;

 近似に関する情報を標準出力に出力する。


使用例

use Math::Approx;

sub poly {
	my($n,$x) = @_;
	return $x ** $n;
}

for (1..20) {
	$x{$_} = sin($_/10)*cos($_/30)+0.3*rand;
}

$a = new Math::Approx (\&poly, 5, %x);
$a->print;
$a->plot("math-approx-demo.out");
print "Fit: ", $a->fit, "\n";

参考資料

gnuplot(1).


著者

 Ulrich Pfeifer <pfeifer@wait.de>


【訳注と解説】

  1. 説明があまり親切でないので困ったが、サンプルコードを実行させてみて挙動をみると、x[] として発生させた数を、5次の多項式で近似した際の、各次の係数と誤差の2乗和を計算してくれるようだ。
  2. とはいうものの、サンプルコードを実行しても、X=1,2,…に対する値 Y が書き出されるので、任意の変数の組の列で近似式を求める方法が今ひとつわからない。説明文では変数の組を最終引数で指定するようだが、そのようにしても結果に変化がない。
Toolbox Logo
Updated : 2006/07/8