How do I fit an exponential equation to raw data

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

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

Do not forget the ./ and .^ notation! :D
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.
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)

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

Categories

Asked:

on 18 Feb 2018

Edited:

on 19 Feb 2018

Community Treasure Hunt

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

Start Hunting!