fit_overlap



機能:
重畳波形分離(初期係数自動決定)

書式:
fit_overlap([ix],[iy],e,[ox],[oy],x始,x終,x増,[oc],0:ガウス/1:ローレンツ)

解説:
高次微分による個数判別方法と当てはめ近似方法を使い、数値組[ix],[iy]によって与えたデータ点列を、次の式で表現されるn個のガウスまたはローレンツの孤立ピーク波形に分解します(h1、u1、w1、h2、u2、w2、.....hn、un、wn、Cは求めたい3n+1個の係数)。
n個のガウス(正規分布)波形の合成式:
  {Σhi * exp(-ln(2) * (x - ui)^2 / wi^2) } + C ( i = 1, 2,... n )
n個のローレンツ(コーシー分布)波形の合成式:
  {Σhi / (1 + (x - ui)^2 / wi^2) } + C ( i = 1, 2,... n )
hi ・・・・・・・・・・・・・ ピーク高さ
ui ・・・・・・・・・・・・・ ピーク横位置
wi ・・・・・・・・・・・・・ ピーク半値における横半幅
C ・・・・・・・・・・・・・ ベースライン成分(オフセットor 直流成分)
高さhi、位置ui、半値半幅wiの三つのパラメータでは、ガウス波形またはローレンツ波形を直感的に表現できる特徴があり、式表現を書き換えれば、標準の正規分布やコーシー分布の表現に変換可能です。
孤立ピーク波形個数n及び初期係数は、内部で関数fit_overlap_init()と全く同じ手法を使って求められます。
重畳波形分離では、孤立ピーク波形個数n(初期係数)が一番大切で、間違っていると、後の近似処理がどんなに努力しても無駄になります。明らかに孤立ピーク波形個数nが正しくない場合、本関数を使わずに、関数fit_overlap_init()で波形個数n(初期係数)を求めた後、手動で初期係数を調整した上関数fit_overlap1()で直接に当てはめ近似処理をすることをお勧めします。詳細は、関数fit_overlap_init()を参照して下さい。
孤立ピーク波形の形式は、引数でガウスとローレンツいずれかを指定します。
結果[oc]による分離波形の合成計算などは、関数val_overlap()を使うと便利です。
当てはめ近似は、誤差の二乗の和を最小にするシンプレックス法が採用されています。シンプレックス法は、式が連続で微分可能といった条件がないこと、めったに収束しないことなどから、どんな表現の式にも安心して使用できる特徴があります。その反面、計算能率があまり良くないため、いかに良い初期値を与えて速く収束させるかがより大切となります。
引数の収束判断基準eは、近似計算の精度を決めます。eがあまり小さいと、収束しないことがありますので、初回は収束判断基準eをゆるく設定してだんだん正確な答えに接近していくと良いでしょう。
本関数は、指定区間[x初,x終]と刻みx増での近似結果を求めて数値組[ox],[oy]に出力します。
また、戻り値として求めた孤立ピーク波形個数nを返します。

     [ix],[iy] ・・・・・・・・・・・・・・・ 近似点列のXY座標の入力数値組([ix]は@で代替可能)

     e ・・・・・・・・・・・・・・・ 近似計算の収束判断基準(1E-20〜10)

     [ox],[oy] ・・・・・・・・・・・・・・・ 近似結果のXY座標の出力数値組

     x始,x終 ・・・・・・・・・・・・・・・ 近似結果の出力区間

     x増 ・・・・・・・・・・・・・・・ 正:刻み値、負整数:均分点数

     [oc] ・・・・・・・・・・・・・・・ 求めた係数の出力数値組(h1、u1、w1、h2、u2、w2、.....hn、un、wn、Cの順で計3n+1個セル)

     0:ガウス/1:ローレンツ ・・・・・・・・・・・・・・・ 孤立ピーク波形の形式の指定(0:ガウス波、1:ローレンツ波)

例:次の例では、初回のfit_overlap()計算で求めた粗い結果を2回目fit_overlap1()計算の初期係数[ic]として使用することにより、効果的に重畳波形分離を行っています。
fit_overlap([11],[12],0.1,[23],[24],-5,65,0.5,[21],0); "粗い近似解を求める"
fit_overlap1([11],[12],[21],0.003,[23],[24],-5,65,0.5,[21],0); "比較的正確な近似解を求める"


return