1

たくさんのデータがあり、たとえば、必要な関数を使用したフィッティングが必要です1/(ax^2+bx+c)。私の目的は、a、b、cの値を取得することです。

これを支援するMATLABの関数はありますか?機能を確認してきましたfit()が、結論が出ませんでした。どちらが最善の方法ですか?

4

3 に答える 3

5

提供するモデルは、次の簡単な方法で解決できます。

% model function
f = @(a,b,c,x) 1./(a*x.^2+b*x+c);

% noise function 
noise = @(z) 0.005*randn(size(z));

% parameters to find
a = +3;
b = +4;
c = -8;

% exmample data
x = -2:0.01:2;    x = x + noise(x);
y = f(a,b,c, x);  y = y + noise(y);


% create linear system Ax = b, with 
% A = [x²  x  1]
% x = [a; b; c]
% b = 1/y;
A = bsxfun(@power, x.', 2:-1:0);

A\(1./y.')

結果:

ans = 
 3.035753123094593e+00  % (a)
 4.029749103502019e+00  % (b)
-8.038644874704120e+00  % (c)

これが可能なのは、指定するモデルが線形モデルであるためです。この場合、バックスラッシュ演算子が解を提供します(1./yただし、少し危険です...)

非線形モデルを近似する場合は、(最適化ツールボックス)を参照するか、(最適化ツールボックス) またはlsqcurvefitを使用して独自の実装を作成できます。fminconfminsearchfminunc

また、カーブフィッティングツールボックスがある場合は、help curvefitそこに入力して開始します。

于 2012-10-19T08:40:39.830 に答える
1

私には、これは最小二乗問題のように聞こえます。

私はlsqcurvefit始めるのに良い場所かもしれないと思います:

http://www.mathworks.co.uk/help/optim/ug/lsqcurvefit.html

于 2012-10-19T08:36:37.803 に答える
1

この投稿が3か月後に役立つかどうかはわかりません。私はcftoolあなたがそれをチェックするのを助けるかもしれないと思います

簡単にデータを追加し、フィッティング方法を選択できます...。

于 2014-01-21T19:59:07.377 に答える