exponential fitting to limited data
3 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
回答 (2 件)
Star Strider
2020 年 10 月 8 日
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 件のコメント
Walter Roberson
2020 年 10 月 9 日
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.
参考
カテゴリ
Help Center および File Exchange で Get Started with Curve Fitting Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!