2003年12月23日(火)

最小二乗 by gsl

プログラムの中から最小二乗 fit のライブラリを使いたくてちょっと調べる。
モンテカルロ的に状況を変えながら最小二乗で得られた値を指標に使おうと思っているのでインタラクティブなの操作がいるものは没。 Mathematica は使ったことがないので没(笑)。

折角なので gsl でやろうかと思うと、これがあきれるほど面倒で参ってしまう。
汎用的なデザイン、というつもりなのかもしれないが、実質的に利用可能なアルゴリズム1種、導関数必須、データ構造決め打ち、最後に収束判定は自分で書けと来た。

萎えるな〜。 C++ でガワを作っとくかな。

用意するもの

  • fit しようするデータ列 y[]
  • fit する関数による残差列 f(x)-y[]を計算して書き込む関数
  • 同じく、各 fitting parameter で偏微分した jacobi 行列を作る関数
  • 上二つを実行する関数…
  • 上3つの関数、データ点数、パラメータ数、実データへのポインタを持つ構造体(上述の関数に引数で渡る)、へのポインタを持つ構造体
  • アルゴリズムを指す変数
  • malloc される solver へのポインタ

プログラムの流れ

  1. 上述構造体を埋める
  2. fitting parameter を gsl のベクトルに
  3. solver の初期化
  4. イテレートする
  5. テスト関数でテスト
  6. イテレーションを継続するか考える
  7. 共分散行列を計算
  8. そこから fit 結果を抽出

[referer: [an error occurred while processing this directive]]

あわせて読みたい