exp(-b/x) fit, inf problem when fitting

조회 수: 4 (최근 30일)
Basil Eldeeb
Basil Eldeeb 2021년 2월 25일
댓글: Basil Eldeeb 2021년 3월 2일
I am trying to fit some data with the model: exp(-b/x); When x goes to zero, y should go to zero as well since anything power negative infinity is zero. However Matlab sees the infinity and terminates everything. Here is my code:
vv=data(:,1);
ii=data(:,2);
g = fittype('exp(-b/x)');
f0 = fit(vv,ii,g);
xx = linspace(-1,1);
plot(vv,ii,'o',xx,f0(xx),'r-');
grid('on')
  댓글 수: 5
Basil Eldeeb
Basil Eldeeb 2021년 2월 26일
supposedly when the exponent is quite small it will behave linearly to a first order. The model is more complex, actually, I am just facing a problem with the exp(-b/x) term. I want matlab to evaluate exp(-Inf) without giving error. The other answer shows promise. However it gave an error, you can see it in my response
Mathieu NOE
Mathieu NOE 2021년 2월 26일
not sure it's really a good model...
data = readmatrix('data.txt');
x = data(:,1);
y = data(:,2);
% exponential fit method
% model : y = exp(-b/x)
f = @(b,x) exp(b./x);
obj_fun = @(params) norm(f(params(1), x)-y);
sol = fminsearch(obj_fun, -0.1);
b_sol = sol(1)
y_fit = f(b_sol, x);
figure
plot(x,y,'r',x,y_fit,'-.k');
legend('data','exp fit');

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

채택된 답변

Matt J
Matt J 2021년 2월 25일
편집: Matt J 2021년 2월 25일
When x goes to zero, y should go to zero as well since anything power negative infinity is zero.
Only if b>=0.
g = fittype('exp(-b/x)', 'options', fitoptions('Lower',0) );
  댓글 수: 5
Matt J
Matt J 2021년 3월 1일
편집: Matt J 2021년 3월 1일
You should divide the data into two sets and fit each one separately, e.g.,
pos=vv>0; neg=~pos;
fpos = fit(vv(pos),ii(pos),gpos,options);
fneg = fit(vv(neg),ii(neg),gneg,options);
Basil Eldeeb
Basil Eldeeb 2021년 3월 2일
I appreciate it, thank you for the help!.

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Multivariate Models에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by