Fitting data with custom equation

157 Ansichten (letzte 30 Tage)
Francesco Panico
Francesco Panico am 9 Dez. 2018
Kommentiert: Zeyu Ma am 31 Aug. 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

Akzeptierte Antwort

Stephan
Stephan am 9 Dez. 2018
Bearbeitet: Stephan am 9 Dez. 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 Kommentare
Torsten
Torsten am 19 Aug. 2023
Bearbeitet: Torsten am 19 Aug. 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 am 31 Aug. 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!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Valrhona
Valrhona am 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 Kommentare
Koral Villalobos
Koral Villalobos am 27 Apr. 2021
I need help with this too
sandeep
sandeep am 3 Aug. 2022
is there a way to find the appropriate intial guess?

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Get Started with Curve Fitting Toolbox finden Sie in Help Center und File Exchange

Produkte


Version

R2015a

Community Treasure Hunt

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

Start Hunting!

Translated by