最小二乗法でデータを非線形関数に当てはめるのに助けが必要です。データが与えられた場合、次の方程式がある場合、どうすればよいですか?
f(x) = 20 + ax + b*e^(c*2x)
だから私はa、b、cを見つけたい。それが製品であれば、関数全体に自然対数を適用して関数を線形化しますが、この場合はそれができないようです。
ありがとう
最小二乗法でデータを非線形関数に当てはめるのに助けが必要です。データが与えられた場合、次の方程式がある場合、どうすればよいですか?
f(x) = 20 + ax + b*e^(c*2x)
だから私はa、b、cを見つけたい。それが製品であれば、関数全体に自然対数を適用して関数を線形化しますが、この場合はそれができないようです。
ありがとう
nlinfit
Curve 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);
f
MATLAB がこの最小二乗問題を解くとき、ベクトルの無名関数に係数を渡しb
ます。nlinfit
これらの係数の最終値をbeta
ベクトルで返します。、、およびbeta0
の値の初期推定値です。およびは、近似するデータを含むベクトルです。b(1)
b(2)
b(3)
x
Y
または、もう少し複雑な場合は、独自のファイルで関数を定義することもできます。この場合、次のようなものがあります(ファイル内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);