1

最小二乗法でデータを非線形関数に当てはめるのに助けが必要です。データが与えられた場合、次の方程式がある場合、どうすればよいですか?

f(x) = 20 + ax + b*e^(c*2x)

だから私はa、b、cを見つけたい。それが製品であれば、関数全体に自然対数を適用して関数を線形化しますが、この場合はそれができないようです。

ありがとう

4

2 に答える 2

2

nlinfitCurve Fitting Toolbox を必要としないツールを使用できます(私は思いません...)

何かのようなもの

f = @(b,x)(20 + b(1)*x + b(2)*exp(b(3)*2*x));
beta0 = [1, 1, 1];
beta = nlinfit(x, Y, f, beta0);

fMATLAB がこの最小二乗問題を解くとき、ベクトルの無名関数に係数を渡しbます。nlinfitこれらの係数の最終値をbetaベクトルで返します。、、およびbeta0の値の初期推定値です。およびは、近似するデータを含むベクトルです。b(1)b(2)b(3)xY

または、もう少し複雑な場合は、独自のファイルで関数を定義することもできます。この場合、次のようなものがあります(ファイル内my_function.m

function y = my_function(b,x)
y = 20 + b(1)*x + b(2)*exp(b(3)*2*x);
end

残りのコードは次のようになります

beta0 = [1, 1, 1];
beta = nlinfit(x, Y, @my_function, beta0);

参照: Matlab で nlinfit を使用しますか?

于 2014-03-30T14:17:30.277 に答える