Fitting data with custom equation

151 vues (au cours des 30 derniers jours)
Francesco Panico
Francesco Panico le 9 Déc 2018
Commenté : Zeyu Ma le 31 Août 2023
Hi,
I have some datas to fit with by the following equation : d*atan(b*(x+a))+c . I've done it by the " curve fitting tool" how I can incorporate this process in a matlab script ? I'd like to obtain the parameter a,b,c,d as an answer.
Thanks.
math.png

Réponse acceptée

Stephan
Stephan le 9 Déc 2018
Modifié(e) : Stephan le 9 Déc 2018
Hi,
you can use this code:
% Some data - replace it with yours (its from an earlier project)
x = [177600,961200, 2504000, 4997000, 8884000]';
y = [6.754, 24.416, 58.622, 107.980, 154.507]';
% Define Start points, fit-function and fit curve
x0 = [1 1 1 1];
fitfun = fittype( @(a,b,c,d,x) d*atan(b*(x+a))+c );
[fitted_curve,gof] = fit(x,y,fitfun,'StartPoint',x0)
% Save the coeffiecient values for a,b,c and d in a vector
coeffvals = coeffvalues(fitted_curve);
% Plot results
scatter(x, y, 'r+')
hold on
plot(x,fitted_curve(x))
hold off
Due to, that this code is taken from an older project and the values dont represent your function the result here is a very bad fit - but to show how it works with a custom function inside a script it should be good enough.
Best regards
Stephan
  5 commentaires
Torsten
Torsten le 19 Août 2023
Modifié(e) : Torsten le 19 Août 2023
You can insert the point in the custom equation thereby reducing the number of unknown parameters:
d*atan(b*(0+a)) + c = -0.18
-> d*atan(b*a) + c = -0.18
-> c = -0.18 - d*atan(b*a)
Thus the modified custom equation to be fitted reads:
d*(atan(b*(x+a)) - atan(b*a)) - 0.18
which now has only 3 instead of 4 unknown parameters.
Zeyu Ma
Zeyu Ma le 31 Août 2023
Hi there, I wonder how to restrict the values of the parameters.
For example, force parameter a to be 0<a<1.
Thank you!

Connectez-vous pour commenter.

Plus de réponses (1)

Valrhona
Valrhona le 28 Sep 2020
I have a question regarding the curve fitting tool itself.
How can I change the z=f(x,y) to f(x).
I cannot change the x, y, or z data in this curve fitting tool.
I would like to use a custom f(x) function (not f(x,y))
Many thanks!
  2 commentaires
Koral Villalobos
Koral Villalobos le 27 Avr 2021
I need help with this too
sandeep
sandeep le 3 Août 2022
is there a way to find the appropriate intial guess?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Get Started with Curve Fitting Toolbox dans Help Center et File Exchange

Produits


Version

R2015a

Community Treasure Hunt

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

Start Hunting!

Translated by