メインコンテンツ

lsqcurvefit を使用した非線形曲線近似

lsqcurvefit によってパラメーター化された非線形関数がデータに簡単に当てはめられます。lsqnonlin も使用できます。lsqcurvefit は曲線近似に lsqnonlin を呼び出す場合に簡単かつ便利な方法を提供します。

この例では、ベクトル xdata が 100 個のデータ点を示し、ベクトル ydata が対応する測定値を示します。問題のデータを生成します。

rng(5489,'twister') % reproducible
xdata = -2*log(rand(100,1));
ydata = (ones(100,1) + .1*randn(100,1)) + (3*ones(100,1)+...
    0.5*randn(100,1)).*exp((-(2*ones(100,1)+...
   .5*randn(100,1))).*xdata);

xdataydata のモデル化された関係は以下になります。

ydatai=a1+a2exp(-a3xdatai)+εi.

このコードは、平均 2 の指数分布から 100 個の独立したサンプルによって xdata を生成します。コードは、a = [1;3;2] を使用して定義方程式から ydata を生成します。これには、標準偏差 [0.1;0.5;0.5] をもつ正規偏差を追加して摂動が与えられています。

この問題のゴールは、データに最も当てはまるモデルのパラメーター aˆii = 1, 2, 3 を見つけることです。

lsqcurvefit を使用してパラメーターをデータに当てはめるには、近似関数を定義しなければなりません。無名関数として近似関数 predicted を定義します。

predicted = @(a,xdata) a(1)*ones(100,1)+a(2)*exp(-a(3)*xdata); 

モデルをデータに当てはめるためにlsqcurvefit はパラメーターの初期推定 a0 を必要とします。

a0 = [2;2;2];

lsqcurvefit を呼び出して、最適適合パラメーター aˆi を求めます。

[ahat,resnorm,residual,exitflag,output,lambda,jacobian] =...
   lsqcurvefit(predicted,a0,xdata,ydata);
Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to 
its initial value is less than the value of the function tolerance.

<stopping criteria details>

得られたパラメーターを検証します。

disp(ahat)
    1.0169
    3.1444
    2.1596

適合値 ahata = [1;3;2] の 8% 以内に収まります。

Statistics and Machine Learning Toolbox™ ソフトウェアがインストールされている場合、関数 nlparci を使用すると、ahat 推定の信頼区間が生成できます。

参考

| (Statistics and Machine Learning Toolbox)

トピック