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

3 次查看(过去 30 天)
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