Location : Home > Languages > Perl > Package
Title : Algorithm::CurveFit
Toolbox Logo

名称

 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 のこれ以降のバージョンでもよい。

Toolbox Logo
Updated : 2007/05/29