最小2乗解の例

最小2乗解 によるカーブフィッティングとして, 関数(1)の2つの係数を求めます.

\(\large{y=ax^2e^{-bx}} \qquad (1)\)

データ系列の作成

\(\large{a=} \)
\(\large{b=} \)
\(\large{σ=} \)

データ範囲の設定

\(\large{y_i>} \)
\(\large{σ} \)

最小2乗解の実行

\(\large{a=} \)
\(\large{b=} \)

解説

本プログラムでは(1)の対数をとり, (2)とします.

\(\large{\log y = \log a + 2\log x - bx}\)
\(\large{c - xb= \log y - 2\log x} \qquad \left(c=\log a \right) \qquad (2)\)

最小2乗解とするには(3)とします. \(\left(c, b\right)\)の求解後, \(c \Rightarrow a\)とできます.

\(\large{ A^\mathsf{T}A \begin{bmatrix} c \\ b \end{bmatrix} = A^\mathsf{T}V } \qquad (3) \)
\(\large{ A= \begin{bmatrix} 1 & -x_1 \\ 1 & -x_2 \\ \vdots & \vdots \\ 1 & -x_n \end{bmatrix} }\) \(\large{ V= \begin{bmatrix} \log y_1 - 2\log x_1 \\ \log y_2 - 2\log x_2 \\ \vdots \\ \log y_n - 2\log x_n \\ \end{bmatrix} }\)

対数をとるため, 引数を0以下の負数とできません. (4)を満たすようデータ範囲\(x_1 \Leftrightarrow x_n\)を限定します.

\(\large{y_i > tσ \qquad \left(0<= t <= 3 \right) \qquad (4)}\)

ノイジーな信号では0(零)付近のデータを捨ててカーブフィッティングすることとなります. 実用上, これで
十分な場合もあります. なお, ここで得られた解を初期値として ニュートン法 を実施することで, 全データを
反映した高精度の解とできます.