필터 지우기
필터 지우기

I want to do exponential fitting for power decaying with time

조회 수: 8 (최근 30일)
Hozifa
Hozifa 2022년 9월 21일
답변: Image Analyst 2022년 9월 21일
Hi there,
I have this matrix (first cloumn is time while the second column is received power), I want to do exponentially fitting, how can I can do it and how can I find time-decaying constant of the exponential.
x=[
65.10 1.0000e+000
65.90 61.0843e-003
70.30 21.3693e-003
];

채택된 답변

Image Analyst
Image Analyst 2022년 9월 21일
If you have the Statistics and Machine Learning Toolbox you can use fitnlm. See attached full demo. Replace the demo data with your own. However I'll tell you that any fit with only 3 data points will probably be very inaccurate. You should definitely make more measurements.

추가 답변 (2개)

Torsten
Torsten 2022년 9월 21일
x=[
65.10 1.0000e+000
65.90 61.0843e-003
70.30 21.3693e-003
];
fun = @(p)exp(-p*(x(:,1)-65.1));
fun1 = @(p)fun(p)-x(:,2);
p = lsqnonlin(fun1,0.1)
Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
p = 3.4943
format long
fun1(p)
ans = 3×1
0 0.000002202330315 -0.021369287157659
hold on
plot(x(:,1),x(:,2))
plot(x(:,1),fun(p))
hold off

Cris LaPierre
Cris LaPierre 2022년 9월 21일
The easiest approach is to use the Curve Fitting app inside a live script. This does require having the Curve Fitting Toolbox installed. Once done, you can have the app generate the corresponding code. Here is what that code might look like.
x=[
65.10 1.0000e+000
65.90 61.0843e-003
70.30 21.3693e-003
];
X = x(:,1);
Y = x(:,2);
[xData, yData] = prepareCurveData( X, Y );
% Set up fittype and options.
ft = fittype( 'exp1' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';
opts.StartPoint = [1.19913731842403e+35 -1.24044938669103];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h = plot( fitresult, xData, yData );
legend( h, 'Y vs. X', 'untitled fit 1', 'Location', 'NorthEast', 'Interpreter', 'none' );
% Label axes
xlabel( 'X', 'Interpreter', 'none' );
ylabel( 'Y', 'Interpreter', 'none' );
grid on
I assume you are intersted in the coefficient b.
fitresult
fitresult =
General model Exp1: fitresult(x) = a*exp(b*x) Coefficients (with 95% confidence bounds): a = 6.236e+98 (-2.254e+101, 2.266e+101) b = -3.494 (-9.061, 2.072)

카테고리

Help CenterFile Exchange에서 Linear and Nonlinear Regression에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by