How to write a custom non linear function for data fitting?

I wrote this script to fit some data with a custom nonlinear function, but I'm getting an almost flat line instead than an exponential.
myfittype=fittype('(N/(1 + exp((-N)*(b)*(t - tf))))','dependent',{'n'},'independent',{'t'},'coefficients',{'N','b','tf'});
h=fit(t,n,myfittype)
plot(h,t,n)

답변 (1개)

the cyclist
the cyclist 2020년 3월 23일
편집: the cyclist 2020년 3월 23일
I don't have the Curve Fitting Toolbox, so I can't really comment on your current code. But, if you also have the Statistics and Machine Learning Toolbox, you could try the fitnlm function.
% Some pretend data
t_data = (-2 : 0.1 : 10)';
f_data = 8 ./ (1 + exp(-2*(t_data - 5))) + 0.2*randn(size(t_data));
% Fitting function
f = @(F,t) F(1)./(1 + exp(-F(2).*(t - F(3))));
% Initial guess at parameters
beta0 = [1 1 1];
% Fit the model
mdl = fitnlm(t_data,f_data,f,beta0);
% Plot the fit against the data
figure
hold on
plot(t_data,f_data,'.')
plot(t_data,predict(mdl,t_data))

댓글 수: 3

Answer by Jacopo moved to a comment:
"Thanks, it gives a decent graph only if I type in as initial guesses values extremely close to the solution, may be the nature of the problem. If you know a better way to do it let me know"
Note that nonlinear fits often require an intelligent choice of starting values. The curvefitting toolbox uses random choice of initial values for general models if you give it nothing.
Thanks, understood

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Get Started with Curve Fitting Toolbox에 대해 자세히 알아보기

질문:

2020년 3월 23일

댓글:

2020년 3월 23일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by