curve fitting a custom equation
15 ビュー (過去 30 日間)
表示 古いコメント
a*exp(-x/T) +c*(T*(exp(-x/T)-1)+x)
This is the equation i'm trying to fit using the custom fit tool. Since the variable x is both in exponential and linear form, the data isn't really fitting, it's just a straight line. Is there way to fit the data to this equation? 

As a side note: how do I view the numerical values instead of scientific ones in curve fitting tool?
Thank you
1 件のコメント
Matt J
2021 年 7 月 16 日
編集済み: Matt J
2021 年 7 月 16 日
In the first line of your post, you show the model equation as,
a*exp(-x/T) +c*(T*(exp(-x/T)-1)+x)
However, in your screenshot of the cftool app, the model equation appears instead as,
a*exp(-x*T) +c*(T*(exp(-x/T)-1)+x)
You should edit your post so that we know which version of the equation is the intended one.
採用された回答
Alex Sha
2021 年 7 月 17 日
編集済み: Alex Sha
2021 年 7 月 18 日
Hi, all, as mentioned by Walter Roberson, the resule I provided above is obtained by using 1stOpt, the biggest advantage, for 1stOpt, is that the guessing of initial-start values are no longer needed for curve-fitting, equation-solving or any other optimization problem.
if the model function is: y=a*exp(-x*T) +c*(T*(exp(-x/T)-1)+x), the result is:
Root of Mean Square Error (RMSE): 15155741.0636478
Sum of Squared Residual: 4.59392974376683E15
Correlation Coef. (R): 0.996754359090101
R-Square: 0.993519252365118
Parameter Best Estimate
---------- -------------
a -33754000.9741343
t -1.00000000434611
c -33754006.8543357

Note the value of parameter t: t=-1.00000000434611, if taking t as -1.00, the chart will become:

The Sensitivity analysis of each parameter is as below:

while, if the model function is: y=a*exp(-x/T) +c*(T*(exp(-x/T)-1)+x), the result is:
Root of Mean Square Error (RMSE): 15137803.4043043
Sum of Squared Residual: 4.58306183814736E15
Correlation Coef. (R): 0.996383637725283
R-Square: 0.992780353526669
Parameter Best Estimate
---------- -------------
a -54592643.2783804
t -1.72718663083536
c -31608221.5261319

2 件のコメント
Matt J
2021 年 7 月 17 日
編集済み: Matt J
2021 年 7 月 17 日
The solution I presented below constrained the search to T>=0, so it might be global subject to that constraint.
It's important to notice as well that whether T=-1 or T=0 is taken as the solution, it results in a cancelation of the exponential terms, leaving an essentially linear solution. It makes it seem like either the model was over-parametrized to begin with, or there isn't enough (x,y) data to accurately estimate the exponential terms.
その他の回答 (1 件)
Matt J
2021 年 7 月 15 日
You don't need a custom type. Your model is just exp2 but with modified data (x,y-x)
11 件のコメント
Matt J
2021 年 7 月 16 日
編集済み: Matt J
2021 年 7 月 16 日
Thank you so much for your input. I have opted for this method.
@Ayushi Sharma You're welcome, but please Accept-click the answer if you consider the question addressed.
Alex uses a commercial program named 1stOpt from 7d-soft. ... I would say that if you do curve fitting, that it does a very nice job.
However, the fit Alex has shown us is based on an incorrect model equation, because @Ayushi Sharma had a typo in the first line of his post. If we substitute Alex's parameter estimates into the true model, it gives strong disagreement with the data:
load doubt
a=-54592639.7090172;
c=-31608221.6797308;
T=-1.72718650949557;
fun=@(x) a*exp(-x*T) +c*(T*(exp(-x/T)-1)+x);
plot(x,y,'o'); ax=axis;
hold on
plot( x,fun(x));
hold off
axis(ax)
legend('Data','Fit')

参考
カテゴリ
Find more on Preprocessing Data in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!