Curve Fitting in MATLAB
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi guys!
I am trying to using HC model, recorgnized as non-linear curve fitting for 2D data sets. However, it always made error in there. I am wondering if you guys have any suggestions on the "complex function" can be used in curve fitting?
댓글 수: 1
채택된 답변
Bjorn Gustavsson
2022년 1월 21일
For this type of problems I learnt (before the arrival of the gui-curve-fitting tools) to use the standard function-minimization-functions (fminsearch, lsqnonlin etc) and once you know them this becomes reasonably straightforward:
1, write a function for your model-function:
function epsilon_f = epsilon_f_of_sigma(sigma, theta, pars)
b0 = pars(1);
gamma = pars(2);
c = pars(3);
theta_bar = pars(4);
epsilon_p = pars(5);
epsilon_0 = pars(6);
n = pars(7);
a = pars(8);
% Above you might simply replace the assignments of variable parameters to
% known values for any of these and reduce the size of the free parameter
% variable pars
if epsilon_p < epsilon_0
b = b0;
else
b = b0*(1 +gamma*log(epsilon_p/epsilon_0));
end
% and so on for f1, f2 and f3...
epsilon_f = b*(1+c).^(1./n).*((1/2^(1./a).*((f1-f2).^a + (f2-f3).^a + (f1-f3).^a).^(1./a)) + ...
c.*(2.*sigma+f1 + f3)).^(-1./n);
end
Then you write an error-function (for use with fminsearch) or a residual-function (for use with lsqnonlin). Here I've assumed that both sigma and theta are a pair of independent variables, the modification should be obvious.
function err = err_fcn(pars,data2fit2,weights4scaling,model_fcn,sigma_indep,theta_indep)
model_data = model_fcn(sigma_indep,theta_indep,pars);
err = sum((data2fit2(:) - model_data(:)).^2.*weights4scaling);
end
Then you fit your parameters to make the model fit your data:
par0 = [pi,sqrt(2),exp(1),pi/sqrt(2),3e8,139,2/(1+sqrt(5)),1.6e-19]; % you'll have to make some initial guess here
par = fminsearch(@(par) err_fcn(pars,...
data2fit2,...
ones(size(data2fit2)),...
@(s,t,p) epsilon_f_of_sigma(s,t,p),...
sig,...
theta),...
par0);
% Which should give you an estimate of the parameters giving the best fit.
% that you can then use to calculate the best fitting epsilon_f:
epsilon_f_modeled = epsilon_f_of_sigma(sig, theta, par);
HTH
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Get Started with Curve Fitting Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!