Least squares Exponential fit using polyfit

228 ビュー (過去 30 日間)
Rachel Dawn
Rachel Dawn 2018 年 3 月 21 日
コメント済み: kainat rasheed 2022 年 5 月 18 日
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'?

採用された回答

Star Strider
Star Strider 2018 年 3 月 21 日
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 件のコメント
Tamir Suliman
Tamir Suliman 2021 年 10 月 11 日
編集済み: Tamir Suliman 2021 年 10 月 11 日
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)%
kainat rasheed
kainat rasheed 2022 年 5 月 18 日
can you write code for power function ? i am facing a problem

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOrdinary Differential Equations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by