|
Location : Home > Languages > Perl > Package Title : Algorithm::CurveFit |
![]() |
Algorithm::CurveFit - 曲線へのあてはめ
use Algorithm::CurveFit;
# 既知の公式の形状
my $formula = 'c + a * x^2';
my $variable = 'x';
my @xdata = read_file('xdata'); # $variable に対応するデータ
my @ydata = read_file('ydata'); # 他の軸に対応するデータ
my @parameters = (
# 名称 推計値 精度
['a', 0.9, 0.00001], # 繰り返し計算時に変化の大きさが精度以下なら
['c', 20, 0.00005], # 終了
);
my $max_iter = 100; # 最大繰り返し回数
my $square_residual = Algorithm::CurveFit->curve_fit(
formula => $formula, # Math::Symbolic ツリーでもよい。
params => \@parameters,
variable => $variable,
xdata => \@xdata,
ydata => \@ydata,
maximum_iterations => $max_iter,
);
use Data::Dumper;
print Dumper \@parameters;
# Prints
# $VAR1 = [
# [
# 'a',
# '0.201366784209602',
# '1e-05'
# ],
# [
# 'c',
# '1.94690440147554',
# '5e-05'
# ]
# ];
#
# パラメータの実際の値(非常に面倒な入力データにより示した)
# a = 0.2
# c = 2
Algorithm::CurveFit は非線形の最小二乗法による曲線への当てはめを実装している。すなわち所与のデータ点の集合に対し、既知の形式(サイン・指数・n次多項式など)への当てはめを行う。
アルゴリズムや能力、不具合の詳細についてはがんばって下記に示す MathWorld のページを参照して欲しい。ただし収束するまで繰り返しを行いフィットを改善していく方法であるので以下の点には注意が必要である。以下の規則はたいてい真である。
曲線当てはめアルゴリズムは 'curve_fit' サブルーチンを塔してアクセスされる。これには以下のような 'key => value' の対のパラメータを要求する。
formula
formula は Math::Symbolic でパース去れる文字列でなければならない。
代わりに既存の Math::Symbolic ツリーであってもよい。
文法についてはモジュールのドキュメントを参照して欲しい。
特定の変数(X-Data)の値及びパラメータ(以下を見よ)に対する式の評価は完全なフィッティングが行われた際の Y-Data の値に関連付けられること。
variable
variable は評価時に X-Data 点で置き換えられる式における変数である。curve_fit で呼び出された時に省略された場合はデフォルトは 'x' である。(そのために 'xdata' と呼んでいる。)
params
パラメータはアルゴリズムによってデータを曲線に最善のフィッティングを探索する際に変化させる値に対応する記号のことである。パラメータは1つでもいいし多数でもよいが、パラメータの数は処理時間を増大させるだけでなく、フィッティングの質も悪化させることに留意されたい。
このオプションの値は匿名配列でなければならない。各パラメータに対し1つの配列を保持する。パラメータの名称・初期値・(オプションで)精度の順に保持される。
例:
$params = [
['parameter1', 5, 0.00001],
['parameter2', 12, 0.0001 ],
...
];
Then later:
curve_fit(
...
params => $params,
...
);
精度は1つの繰り返しから次の繰り返しの間のパラメータの変化がこの精度以下であれば収束したと見なし繰り返しを終了させるためのものである。
無限ループに陥ることを防ぐために精度の利用は強く奨励される。(maximum_iterations も参照のこと)
パラメータの最終の組み合わせはサブルーチンから帰ってこないが、パラメータは置き換えられている。元のデータ構造はパラメータの最良推定値を保持していることを意味する。
xdata
これは関数の変数に対するデータを保持する配列への配列参照でなければならない。(デフォルトは 'x' である。)
ydata
これは 'xdata' における x の値に対応する関数の阿多尾を保持する配列への配列参照でなければならない。
maximum_iterations
所与の繰り返し回数終了後処理を終了させるオプションのパラメータである。
accuracy とこのオプションの利用はともにアルゴリズムが無限ループに陥ることを防ぐために強く要請される。
サブルーチンは当てはめの精度の指標として最終の繰り返し実行後残差平方和を返す。
デフォルトではエクスポートしないが、標準的な Exporter 文法を用いて curve_fit をエクスポートすることができる。
以下はパブリックなサブルーチンのリストである。
curve_fit
本サブルーチンは上記説明で説明した曲線へのあてはめ(the curve fitting)を実装している。
本モジュールにおいて実装されているアルゴリズムは以下から採用している。
本モジュールの最新バージョンは http://steffen-mueller.net または CPAN で入手可能である。
本モジュールは以下のモジュールを利用している。これらに習熟するのはよいアイデアかも知れない。Math::Symbolic, Math::MatrixReal, Test::More
Steffen Mueller, <curvefit-module at steffen-mueller dot net>
Copyright (C) 2005 by Steffen Mueller
本ライブラリはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。Perl 5.8.4 またはユーザの選択で Perl5 のこれ以降のバージョンでもよい。
![]() |
Updated : 2007/05/29 |