光学薄膜設計ソフトの設計 その11「gsl用の最適化関数」 [考え中 - 光学薄膜設計]
先日の続きだけど、今回はgsl用にメリット関数を構成してみる。
一番簡単なのはこんなの。メリット関数M(x0,x1,...xn)として
ここでfjは制御したい値、たとえばある入射角で、ある波長での反射率のこと。Gjはその目標値で、wjは重みづけ。x0,x1,...xnは最適化の変数で、たとえばある層の膜厚や屈折率などのこと。CはConstraintの項で、前回概要はメモした。さらにあとで詳細をまとめる。fj、Tj、wjはすべて実数でなければならない。 2次式にしておけばMは正の実数となって、すべての制御値が目標値に一致したとき0になる。また、目標値付近で傾きがなだらかになり素性がよい。もしfjがx0,x1,...xnに関して線形なら最小2乗法と同じになる。
たとえば45度入射で波長550nmでの透過率をできるだけ上げてさらにp-偏光とs-偏光の位相差をなるべく小さくしたい、なんて言う場合、
などとなる。反射率や透過率は0から1の間の値をとるのでそれ以外の値もメリット関数の中では合わせておいた方が重みのバランスも良くなる。たとえば
としておくと、どの項も最小値0で最大値wjとなる。他の制御値もこのように規格化できるものはした方がいいでしょ。
さてこのメリット関数だと、微分は
となって、前回の微分を使ってメリット関数の微係数が求まる。ということはgslのライブラリのうち「35 Multidimensional Minimization」だけでなく「37 Nonlinear Least-Squares Fitting」も使える。ここにはLevenberg-Marquardt法と言うニュートン法を改善した非線形最小2乗法では一般的なアルゴリズムがあって、Multidimensional Minimizationのアルゴリズムでやってる探索点近傍を2次で近似したりする手間が省けて効率がいい(はず、と思うけどアルゴリズムの詳細を把握していないので正確にはよくわからない)。
さて、こないだちょっとだけ実装を考えた方針が、このメリット関数をうまくgslのライブラリに組み込めるようになっているかどうかは次に考える。ひょっとして実装方針変更かなあ。
一番簡単なのはこんなの。メリット関数M(x0,x1,...xn)として
ここでfjは制御したい値、たとえばある入射角で、ある波長での反射率のこと。Gjはその目標値で、wjは重みづけ。x0,x1,...xnは最適化の変数で、たとえばある層の膜厚や屈折率などのこと。CはConstraintの項で、前回概要はメモした。さらにあとで詳細をまとめる。fj、Tj、wjはすべて実数でなければならない。 2次式にしておけばMは正の実数となって、すべての制御値が目標値に一致したとき0になる。また、目標値付近で傾きがなだらかになり素性がよい。もしfjがx0,x1,...xnに関して線形なら最小2乗法と同じになる。
たとえば45度入射で波長550nmでの透過率をできるだけ上げてさらにp-偏光とs-偏光の位相差をなるべく小さくしたい、なんて言う場合、
などとなる。反射率や透過率は0から1の間の値をとるのでそれ以外の値もメリット関数の中では合わせておいた方が重みのバランスも良くなる。たとえば
としておくと、どの項も最小値0で最大値wjとなる。他の制御値もこのように規格化できるものはした方がいいでしょ。
さてこのメリット関数だと、微分は
となって、前回の微分を使ってメリット関数の微係数が求まる。ということはgslのライブラリのうち「35 Multidimensional Minimization」だけでなく「37 Nonlinear Least-Squares Fitting」も使える。ここにはLevenberg-Marquardt法と言うニュートン法を改善した非線形最小2乗法では一般的なアルゴリズムがあって、Multidimensional Minimizationのアルゴリズムでやってる探索点近傍を2次で近似したりする手間が省けて効率がいい(はず、と思うけどアルゴリズムの詳細を把握していないので正確にはよくわからない)。
さて、こないだちょっとだけ実装を考えた方針が、このメリット関数をうまくgslのライブラリに組み込めるようになっているかどうかは次に考える。ひょっとして実装方針変更かなあ。
2008-04-20 23:40
nice!(0)
コメント(0)
トラックバック(0)
コメント 0