Least squares Exponential fit using polyfit
67 views (last 30 days)
Show older comments
Rachel Dawn
on 21 Mar 2018
Commented: kainat rasheed
on 18 May 2022
Let's say I'm given x=[11,60,150,200] and y=[800,500,400,90] These are just random numbers (but imagine the solution is in the form of y=a*exp(b*t)
Now, I want to find what 'a' and 'b' are. This is what I'm thinking to do, but I'm not sure if it's correct:
So, if I take ln of both sides of the above equation, I'll get ln(y)= ln(a) +bx. This is in the form of y=mx+b (linear equation).
x= [10, 55, 120, 180]
y= [750, 550, 300, 100]
yPrime= log(y)%take natural logarithm of y data values
pPrime=polyfit(t,yPrime,1)%
aPrime=pPrime(1)
bPrime=pPrime(2)
so now I found the constants for my above LINEAR equation. To find 'a' and 'b' from 'y=a*exp(b*t)', should I now raise the linear constants I found to e? (e^aPrime = a, e^bPrime= b) ?
Is this how I find 'a' and 'b'?
0 Comments
Accepted Answer
Star Strider
on 21 Mar 2018
Since you are starting with:
y = a * exp(b * t)
and linearising it yields:
log(y) = log(a) + b*t
however ‘aPrime’ and ‘bPrime’ are reversed with respect to the way polyfit works.
So polyfit returns:
bPrime = pPrime(1)
aPrime = pPrime(2)
you need to transform only ‘aPrime’. So:
a = exp(aPrime)
If you want to plot a line-of-fit, you could either use your originally log-transformed equation with log-transformed variables:
log(y) = aPrime + bPrime*t
or:
yfit = exp(log(aPrime)) * exp(b*t)
with your original data.
In code:
t = [11,60,150,200];
y = [800,500,400,90];
yPrime= log(y)%take natural logarithm of y data values
pPrime=polyfit(t,yPrime,1)%
aPrime=pPrime(2)
bPrime=pPrime(1)
figure(1)
plot(t, log(y), 'p', t, polyval(pPrime, t), '-r')
figure(2)
plot(t, y, 'p', t, exp(aPrime)*exp(t*bPrime), '-r')
figure(3)
semilogy(t, y, 'p', t, exp(aPrime)*exp(t*bPrime), '-r')
6 Comments
Tamir Suliman
on 11 Oct 2021
Edited: Tamir Suliman
on 11 Oct 2021
didnt you also have to ployfit for log(t) values ?
yPrime= log(y)%take natural logarithm of y data values
tPrime = log(t)
pPrime=polyfit(tPrime,yPrime,1)%
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!