How do I fit an exponential equation to raw data

2 views (last 30 days)
I have been given raw data from a hurricane with the x component, radius, x=59:803 and Y component, pressure, data varying from around 990 to 1020. I have an equaiton y=exp(-A/(x^B)) and want to find coefficients A and B from the raw data. I did try applying fit and to no avail. I'm unfamiliar with these functions so perhaps I was using them incorrectly.
I hope you can help, Thanks.
PH

Accepted Answer

Jos (10584)
Jos (10584) on 18 Feb 2018
Edited: Jos (10584) on 19 Feb 2018
This should get you started:
% some data
x = 1:20 ;
y = exp(-10 ./ (x .^ 1.1)) ;
yr = y + randn(size(y))/10 ; % add noise
% fit procedure
g = fittype(@(A,B,x) exp(-A ./ (x.^B)))
f = fit(x(:),yr(:), g )
% result
yh = f(x) ;
plot(x,yr,'bo',x,y,'b:.',x,yh,'rs-')
For more information, read the documentation on fit.
  3 Comments
Pierce Hart
Pierce Hart on 18 Feb 2018
Hey Jos,
Thanks for your answer. If I simply use what you provide I have an erorr in my code.I follow the outline of what you're doing and sturggle to see where I'm going wrong. I've attached my data and script so you can see.
Jos (10584)
Jos (10584) on 19 Feb 2018
What is the exact error you get?
(btw I made a mistake in my function, which I fixed)

Sign in to comment.

More Answers (1)

Star Strider
Star Strider on 18 Feb 2018
You can use the fminsearch function to do the nonlinear regression.
The Code
P = load('pressure.mat.txt');
R = load('radius.mat.txt');
Pressmb = P.Pressmb;
Radkm = R.Radkm;
PresRad = @(b,r) exp(-b(1)./(r.^b(2))); % Objective Function
B = fminsearch(@(b) norm(Pressmb - PresRad(b,Radkm)), [1, 1]);
RadV = linspace(min(Radkm), max(Radkm));
figure
plot(Radkm, Pressmb, 'pg')
hold on
plot(RadV, PresRad(B, RadV), '-r')
hold off
xlabel('Radius (km)')
ylabel('Pressure (mb)')
legend('Data', 'Fitted Data', 'Location','NW')
text(440, 997, sprintf('P(R) = e^{%.2f/(%.5f\\cdotR)}',B))
grid
The Plot

Community Treasure Hunt

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

Start Hunting!