How do I fit an exponential curve fit function using fminsearch. Program runs, but result is incorrect.
5 ビュー (過去 30 日間)
古いコメントを表示
Attached is my code
yfirst=[.8967e07 1.6294e07 2.6587e07 3.2537e07 3.6136e07 3.8419e07 3.9706e07]';
xfirst=[1,2,4,6,8,10,15];
[estimates, model] = myfun(xfirst,yfirst);
[sse, FittedCurve] = model(estimates);
semilogx(xfirst,FittedCurve,'-g*'); hold on;
semilogx(xfirst,yfirst,'-rd');hold off;
xlim([ 0 50 ]);
%%%%FUNCTION FILE
function [estimates, model] = myfun(xdata, ydata)
% Call fminsearch with guessed starting point.
% start_point =[2.23e7;.005];
model = @expfun;
estimates = fminsearch(model,start_point);
function [sse, FittedCurve] = expfun(params)
A=params(1)
lambda=params(2)
FittedCurve =(A .* exp(lambda * xdata));
ErrorVector = FittedCurve - ydata;
sse = sum(ErrorVector .^ 2);
end
end
I get a large error and the curve does not match when plotted together. Thanks
0 件のコメント
採用された回答
Star Strider
2015 年 6 月 19 日
There are several problems with your code.
This works:
yfirst=[.8967e07 1.6294e07 2.6587e07 3.2537e07 3.6136e07 3.8419e07 3.9706e07]';
xfirst=[1,2,4,6,8,10,15]';
expfun = @(b,xdata) b(1) -b(2) .* exp(b(3) .* xdata); % Objective Funciton
SSECF = @(b) sum((yfirst - expfun(b,xfirst)).^2); % Sum-Squared-Error Cost Function
start_point =[4E+7; 2.23e7; -.005];
[B, SSE] = fminsearch(SSECF, start_point);
figure(1)
plot(xfirst, yfirst, 'bp')
hold on
plot(xfirst, expfun(B,xfirst), '-r')
hold off
grid
text(5.2, 1.75E+7, sprintf('f(x) = %9.2E - %9.2E\\cdote^{%9.2E\\cdotx}', B))
2 件のコメント
Star Strider
2015 年 6 月 22 日
In this instance (that is with your data), you do. It is an asymptotically-increasing exponential, so you have to have parameters for the asymptote, amplitude, and exponential rate. The integrated differential equation for the process that created your data would require values for all three parameters. (With a simple decaying exponential, you would only need parameters for the initial value and exponential rate.)
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Least Squares についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!