ニュートン法の例

ニュートン法 によるカーブフィッティングとして, 関数(1)の2つの係数を求めます.

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

データ系列の作成

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

初期値(係数と数値微分の刻み幅)の設定

\(\large{a^\left(0\right)=} \)
\(\large{b^\left(0\right)=} \)
\(\large{\varDelta a=} \)
\(\large{\varDelta b=} \)

ニュートン法の実行

\(\large{a^\left(k\right)=} \)
\(\large{b^\left(k\right)=} \)
\(\large{(k=} \)
\(\large{)} \)


解説

本プログラムは残差の2乗和の最小化を行ないます. 残差の2乗和は(2)で定義されます.

\(\large{r\left(a,b \right)=\frac{1}{2}\displaystyle \sum_{i=1}^{n} \left(y_i - a^\left(k\right)x_i^2e^{-b^\left(k\right)x_i} \right)^2 } \qquad (2)\)
\(\small{y_i}\): データ系列 \(\small{\qquad n}\): データ系列の個数
\(\small{a^\left(k\right), b^\left(k\right)}\): \(\small{k}\)回目の反復での\(\small{a, b}\)

2変数のニュートン法の反復更新は(3)です. 反復毎に\(\varDelta X \)の求解を実施します. 詳細は当サイト
ニュートン法」をご覧ください.

\(\large{ \begin{bmatrix} \frac{\partial^2 r}{\partial a^2} & \frac{\partial^2 r}{\partial a \partial b} \\ \frac{\partial^2 r}{\partial b \partial a} & \frac{\partial^2 r}{\partial b^2} \end{bmatrix} \varDelta X= - \begin{bmatrix} \frac{\partial r}{\partial a} \\ \frac{\partial r}{\partial b} \end{bmatrix} \qquad (3) }\)
\(\large{ \varDelta X= \begin{bmatrix} a^\left(k+1\right)-a^\left(k\right) \\ b^\left(k+1\right)-b^\left(k\right) \end{bmatrix} }\)


数値微分は(2)から残差マップを作成します. 他方, 解析解は数値微分の刻み幅は利用せず,
直接, 偏微分(4)〜(9)を算出します.

\(\large{g\left(x\right)=x^2 e^{-bx} } \qquad \left(x=x_i\right) \qquad(4)\)
\(\large{\frac{\partial r}{\partial a}=\displaystyle \sum_{i=1}^{n} -g\left(y_i - ag \right) } \qquad (5)\)
\(\large{\frac{\partial r}{\partial b}=\displaystyle \sum_{i=1}^{n} axg\left(y_i - ag \right) } \qquad (6)\)
\(\large{\frac{\partial^2 r}{\partial a^2}=\displaystyle \sum_{i=1}^{n} g^2 } \qquad (7)\)
\(\large{\frac{\partial^2 r}{\partial a \partial b} = \frac{\partial^2 r}{\partial b \partial a}=\displaystyle \sum_{i=1}^{n} xg\left(y_i - 2ag \right) } \qquad (8)\)
\(\large{\frac{\partial^2 r}{\partial b^2}=\displaystyle \sum_{i=1}^{n} -ax^2g \left(y_i - 2ag \right) } \qquad (9)\)

初期値が解から遠い場合, 解に到達しないことがあります. 本件では 最小2乗解により初期値を与えることが
できます.