フィルターのクリア

Inconsistencies between using cftool and plot

4 ビュー (過去 30 日間)
Miraboreasu
Miraboreasu 2024 年 1 月 4 日
コメント済み: Sam Chak 2024 年 1 月 5 日
Hi,
I am using the GUI of cftool, and get this
```
Fit Name: untitled fit 1
Exponential Curve Fit (exp2)
f(x) = a*exp(b*x) + c*exp(d*x)
Coefficients and 95% Confidence Bounds
Value Lower Upper
a 6.7397e+11 -4.3032e+21 4.3032e+21
b -0.1407 -2.8050e+04 2.8049e+04
c -6.7395e+11 -4.3032e+21 4.3032e+21
d -0.1407 -2.8052e+04 2.8052e+04
Goodness of Fit
Value
SSE 1.0357e+11
R-square 0.9960
DFE 1
Adj R-sq 0.9839
RMSE 3.2182e+05
```
and the plot is
then I plot it in a script with same x
x = linspace(1,10,100)
x = 1×100
1.0000 1.0909 1.1818 1.2727 1.3636 1.4545 1.5455 1.6364 1.7273 1.8182 1.9091 2.0000 2.0909 2.1818 2.2727 2.3636 2.4545 2.5455 2.6364 2.7273 2.8182 2.9091 3.0000 3.0909 3.1818 3.2727 3.3636 3.4545 3.5455 3.6364
a1 = 6.7397e+11;
b1 = -0.1407;
c1 = -6.7395e+11;
d1 = -0.1407;
fit_y1 = a1 * exp(b1 * x) + c1 * exp(d1 * x);
figure;
plot(x, fit_y1, 'r-', 'LineWidth', 1.5);
Thanks
  1 件のコメント
Walter Roberson
Walter Roberson 2024 年 1 月 4 日
It would help if you could attach your data for us to test with.

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

採用された回答

Sam Chak
Sam Chak 2024 年 1 月 4 日
Oh, I see. The reason for the inconsistency in the plot is due to the fact that the cftool app only displays 5 digits of precision. If you increase the precision, both plots should be the same.

その他の回答 (1 件)

Drew
Drew 2024 年 1 月 4 日
編集済み: Drew 2024 年 1 月 4 日
The ordinary way to reproduce the plot is to use the cfit "plot" method. If the curve fit was done in the Curve Fitter app, export the fitted model from the app using the "Export"->"Export to Workspace" option, then use plot(fittedmodel) at the command line. To re-create the fit at the commandline, choose the "Export" "Generate Code" option in the app. The generated code will re-create the fit and create a plot. For both of these options, see the doc page https://www.mathworks.com/help/curvefit/generating-code-and-exporting-fits-to-the-workspace.html
If you want to access the full-precision coefficients, use the cfit method "coeffvalues", that is:
>> coeffvalues(fittedmodel)
You can see all methods for the cfit object using
>>methods(fittedmodel)
Below is an example using the command line interface. As mentioned above, the fitting could alternately be done in the Curve Fitter app, followed by exporting the fittedmodel from the app, and/or generating code from the app to reproduce the fit and plot.
% These points were estimated from the graph provided in the question
x=[1 2 4 8 10];
y=[2.43 2.57 2.6 2.28 1.98]*10^7;
% The fit function expects a single column for each of x and y, so use
% simple prepareCurveData helper function to achieve that
[xData,yData]=prepareCurveData(x,y);
% Create the fit. "fittedmodel" is a cfit object.
fittedmodel = fit(xData,yData,'exp2');
% Use the cfit "plot" method to plot the curve fit along with the data points
plot(fittedmodel,xData,yData)
% If you want to plot the curve "manually" without using the cfit plot method,
% use the cfit "coeffvalues" method to retrieve the full-precision
% coefficients.
coefficients = coeffvalues(fittedmodel);
a1 = coefficients(1);
b1 = coefficients(2);
c1 = coefficients(3);
d1 = coefficients(4);
% Choose x values
x1 = linspace(1,10,100);
% Calculate values on the fitted curve
fit_y1 = a1 * exp(b1 * x1) + c1 * exp(d1 * x1);
% plot the resulting curve
plot(x1, fit_y1, 'r-', 'LineWidth', 1.5);
% To make the plot look more like the one in the curve fitter app, plot the
% curve with the default first color, then add data points in black.
plot(x1,fit_y1,'LineWidth',1.5);
grid on; hold on;
% Add the data points in black
plot(xData, yData,'.k')
% See all methods (the output may have a horizontal scroll bar)
methods(fittedmodel)
Methods for class cfit: argnames cfit coeffvalues dependnames feval formula integrate numargs plot probnames setoptions category coeffnames confint differentiate fitoptions indepnames islinear numcoeffs predint probvalues type
  1 件のコメント
Sam Chak
Sam Chak 2024 年 1 月 5 日
@Drew gave a very good explanation about using the coeffvalues() command.
👍

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

カテゴリ

Help Center および File ExchangeFit Postprocessing についてさらに検索

製品


リリース

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by