フィルターのクリア

Finding best fit function for a data set

58 ビュー (過去 30 日間)
Abdullah Azzam
Abdullah Azzam 2023 年 2 月 9 日
編集済み: Arka 2023 年 2 月 9 日
Hi All, I have a set of X,Y,Z Data and I am trying to find the best fit equation between the input variables (X,Y) and the output variable (Z). I have been manually trying different functions that and so far the best function I have came up with is (Z = Log(X*Y) with R2 of 0.59) I am not sure if there is an automated way to find even more best fitting equation for this data. I have attached the excel sheet that contain the data. Thanks in advance for your help.

回答 (2 件)

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2023 年 2 月 9 日
You can try cftool - curve fitting toolbox, or use fit(), e.g.:
D = readmatrix('Samples_Data.xlsx');
X = D(:,2);
Y = D(:,3);
Z = D(:,4);
FModel = fit([X,Y], Z, 'poly23');
plot(FModel, [X, Y], Z)
[FModel, Fit_quality]=fit([X,Y], Z, 'poly23')
Linear model Poly23: FModel(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p21*x^2*y + p12*x*y^2 + p03*y^3 Coefficients (with 95% confidence bounds): p00 = 2595 (-335.2, 5525) p10 = -394.5 (-854.9, 65.83) p01 = -4.988 (-15.39, 5.417) p20 = 14.19 (-2.286, 30.67) p11 = 1.61 (-0.3392, 3.559) p02 = -0.0514 (-0.1291, 0.02633) p21 = -0.0701 (-0.1506, 0.01037) p12 = 0.002326 (-0.001086, 0.005738) p03 = 1.234e-05 (-3.496e-05, 5.963e-05)
Fit_quality = struct with fields:
sse: 592.8486 rsquare: 0.8895 dfe: 3 adjrsquare: 0.5948 rmse: 14.0576

Arka
Arka 2023 年 2 月 9 日
編集済み: Arka 2023 年 2 月 9 日
Hello,
From what I understood, you have a 3 variable dataset, and you would like to automate the process of getting a line of best fit for the dataset.
You can use the ‘fit’ function and its supported polynomial solvers to automate the process of finding a polynomial best fit function for the dataset.
The code for the same is given below:
data = readmatrix('Samples_Data.xlsx');
x = data(:, 2);
y = data(:, 3);
z = data(:, 4);
solvers = ["poly11", "poly12", "poly13", "poly21", "poly22", "poly23", "poly31", "poly32", "poly33", "poly41"];
rSq = 0;
bestModel = 0;
for i=1:size(solvers, 2)
[model, goodnessOfFit] = fit([x, y], z, solvers(i));
if goodnessOfFit.rsquare > rSq
rSq = goodnessOfFit.rsquare;
bestModel = model;
end
end
bestModel
plot(bestModel, [x, y], z)
The output gives us the best fit function (and the solver used for it):
output
The plot is given below:
plot
You can refer to the documentation link for the ‘fit’ function below:

カテゴリ

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

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by