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);
xdata と ydata のモデル化された関係は以下になります。
このコードは、平均 2 の指数分布から 100 個の独立したサンプルによって xdata を生成します。コードは、a = [1;3;2] を使用して定義方程式から ydata を生成します。これには、標準偏差 [0.1;0.5;0.5] をもつ正規偏差を追加して摂動が与えられています。
この問題のゴールは、データに最も当てはまるモデルのパラメーター 、 = 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 を呼び出して、最適適合パラメーター を求めます。
[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
適合値 ahat は a = [1;3;2] の 8% 以内に収まります。
Statistics and Machine Learning Toolbox™ ソフトウェアがインストールされている場合、関数 nlparci を使用すると、ahat 推定の信頼区間が生成できます。
参考
lsqcurvefit | nlparci (Statistics and Machine Learning Toolbox)