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.
得られたパラメーターを検証します。
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)