exponential fitting to limited data
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Here is my data :
y=[2.5648 1.2495 1.1663 1.0652 2.1537 1.3080 1.2624 1.2949]
I want to fit an exponential function to them. attached is the figure that I came up and doesn't make any sense to me.
f = @(b,x) b(1).*exp(b(2).*x)+b(3);
B = fminsearch(@(b) norm(y - f(b,x)), [-2; -1; 1]) ;
figure
plot(x, y, 'ro','MarkerFaceColor','r')
hold on
plot(x, f(B,x), '-b','linewidth', 3)
hold off
0 Kommentare
Antworten (2)
Star Strider
am 8 Okt. 2020
It needs to be changed slightly, adding an additional parameter:
x = 35:5:70;
y = [2.5648 1.2495 1.1663 1.0652 2.1537 1.3080 1.2624 1.2949];
f = @(b,x) b(1).*exp(b(2).*(x-b(4)))+b(3);
B = fminsearch(@(b) norm(y - f(b,x)), [1; -1; 1; 35]) ;
figure
plot(x, y, 'ro','MarkerFaceColor','r')
hold on
plot(x, f(B,x), '-b','linewidth', 3)
hold off
Then, it is a bit more understandable, althoug still not an excellent fit.
4 Kommentare
Walter Roberson
am 9 Okt. 2020
Your proposed function is a quite bad fit for your data.
With your function, the optimal fit drives b(2) to roughly -4 so you are dealing with an exp(-4*(35:5:70)) which gives you values that are non-zero for the first result and effectively zero by comparison for the others results. Then b(1) is driven to about 1e100 to balance out the exp(-4*35) to give a notable value for the first entry and effective zeros for the rest. Your fitting then becomes "non-trivial value for x = 35, zeros for the rest" plus b(3) -- so all of the fitting is going into matching the first datapoint, and the exp() makes the rest of them into noise.
I said above roughly -4 and about 1e100 but you can get slightly better fits by driving b(1) to 1e200 and b(2) about -6.4 which has the effect of lowering the contributions of the other entries even further towards 0.
So.. you get a pulse and a straight line.
Star Strider's idea of subtracting something from x is a decent one.
Siehe auch
Kategorien
Mehr zu Fit Postprocessing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!