Borrar filtros
Borrar filtros

Errors when changing bounds for custom function fit

4 visualizaciones (últimos 30 días)
Ryan Umminger
Ryan Umminger el 9 de Abr. de 2023
Respondida: Rasmita el 12 de Mayo de 2023
I am trying to fit some data to a custom function, but the fit doesn't seem as accurate as I would like. Additionally, when I change the bounds for the fit I receive an error "NaN/Inf computed by model function, fitting cannot continue. Try using or tightening upper and lower bounds on coefficients." This happens even if I tighten the bounds from ones that worked (for example, changing the upper bounds from inf to 100).
w1+w2=1
xdata = [0; 0.8; 1.05; 1.3; 1.5; 1.75; 2; 2.3; 2.7; 3.6; 4.75];
ydata = [0; 0.1; 0.2; 0.3; 0.4; 0.5; 0.6; 0.7; 0.8; 0.9; 1];
curvezero = fittype( @(wA,nA,nB,kA,kB,x) wA.*nA.*kA.*(exp(-(kA.*x).^nA)).*((kA.*x).^nA).^((nA-1)/nA) + (1-wA).*nB.*kB.*(exp(-(kB.*x).^nB)).*((kB.*x).^nB).^((nB-1)/nB) );
fzero = fit( xdata, ydata, curvezero, 'StartPoint', [0.5, 1, 1, 1, 1], 'Lower', [0.5, 0, 0, 0, 0], 'Upper', [1, inf, inf, inf, inf] );
plot( fzero, xdata, ydata )

Respuestas (1)

Rasmita
Rasmita el 12 de Mayo de 2023
Hi,
As per my understanding, you are trying to fit some data to a custom function. You are facing two issues, one is the fit is not accurate and second one; when you try to change the bounds for the fit, you are getting above error. You have tried tightening the bounds, but the issue persists.
One possible reason could be the parameters being fitted may be going beyond the bounds you have specified, which can cause the function to return NaN or Inf.
To avoid this error, you can try tightening the bounds on the parameters. You have already set the lower bounds to zero, which is a good start. Try to specify upper bounds that are reasonable for your problem, based on your knowledge of the domain. For example, if you know that a parameter should not be larger than a certain value, set that as the upper bound. In your case, it seems like the nA and nB parameters should be positive, so you can try upper bounds of something like 100 or 1000, which should be reasonable.
Further, a workaround you can try is to change your fitting function to make it more stable. Use a logarithmic transformation to rewrite your function so that it is better conditioned for numerical optimization. This could be carried out by taking the logarithm of both sides of your equation and then fitting the transformed data. This can often lead to a more accurate and robust fit.
Hope this helps!
Regards,
Rasmita

Categorías

Más información sobre Get Started with Curve Fitting Toolbox en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by